This commit was manufactured by cvs2svn to create tag
'GROOVY_1_0_JSR_06'.

git-svn-id: http://svn.codehaus.org/groovy/tags/GROOVY_1_0_JSR_06@3872 a5544e8c-8a19-0410-ba12-f9af4593a198
diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist
deleted file mode 100644
index d326583..0000000
--- a/CVSROOT/checkoutlist
+++ /dev/null
@@ -1,15 +0,0 @@
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-#	[<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
-passwd
-log_accum.conf
\ No newline at end of file
diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo
deleted file mode 100644
index 6ecba79..0000000
--- a/CVSROOT/commitinfo
+++ /dev/null
@@ -1,16 +0,0 @@
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list 
-# of files to check.  A non-zero exit of the filter program will 
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
-# Beautiful
\ No newline at end of file
diff --git a/CVSROOT/damagecontrol-groovy.conf b/CVSROOT/damagecontrol-groovy.conf
deleted file mode 100644
index 623fc62..0000000
--- a/CVSROOT/damagecontrol-groovy.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-project_name: Groovy
-scm_spec: ":ext:dcontrol@localhost:/home/projects/groovy/scm:groovy/groovy-core"
-build_command_line: "maven dc"
-nag_email: groovy-dev@groovy.codehaus.org
-...
\ No newline at end of file
diff --git a/CVSROOT/dctrigger.rb b/CVSROOT/dctrigger.rb
deleted file mode 100644
index a6545a5..0000000
--- a/CVSROOT/dctrigger.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-require 'xmlrpc/client'
-
-url = ARGV[0]
-project_name = ARGV[1]
-
-puts "Nudging DamageControl on #{url} to build project #{project_name}"
-client = XMLRPC::Client.new2(url)
-build = client.proxy("build")
-result = build.trig(project_name, Time.now.utc.strftime("%Y%m%d%H%M%S"))
-puts result
diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo
deleted file mode 100644
index d78886c..0000000
--- a/CVSROOT/editinfo
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "editinfo" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/CVSROOT/log_accum.conf b/CVSROOT/log_accum.conf
deleted file mode 100644
index 6343eb0..0000000
--- a/CVSROOT/log_accum.conf
+++ /dev/null
@@ -1,83 +0,0 @@
-# The "log_accum.conf" file overrides the the defaults hard-coded in
-# the "log_accum.pl" script allowing admins to setup the log_accum.pl
-# once as executable, but not writable.  Each project can then have
-# it's own "log_accum.conf" to configure the behaviour of their own
-# cvs commit messages.
-
-
-# MAIL TO
-#
-# When set, specifies the email address(es) to
-# receive commit messages. When left unset, the
-# script will attempt to guess the correct
-# mailing list using the repository name and
-# the MLISTHOST option.
-#
-MAIL_TO = scm@groovy.codehaus.org
-
-# MAIL FROM
-#
-# When set, specifies the email address that
-# all commit messages will be sent from.
-# Very usefull for setting up a "no reply"
-# address for commit messages.
-#
-# When not set, the script will guess the sender's
-# address by prefixing the cvs user's name to the
-# MLISTHOST option.
-#
-#MAIL_FROM = noreply@codehaus.org
-
-# MAIL HOST ADDRESS
-#
-# The host address to use when guessing either
-# the TO or FROM addresses.
-#MLISTHOST = codehaus.org
-
-# X-SENDER EMAIL HEADER
-#
-# When specified, adds an X-Sender header to the
-# emails sent so that users can use it to more
-# easily filter out cvs messages.  This is very
-# nice for when there is no mailing list
-# dedicated to cvs commit messages.
-#
-XSENDER       = Groovy-CVS
-
-# REPLY-TO EMAIL ADDRESS
-#
-# When REPLYTO is set an SMTP "Reply-To" email
-# header will be added.  This is very useful
-# for keeping development discussion on a
-# dev list even when cvs messages go a cvs list.
-#
-REPLYTO = dev@groovy.codehaus.org
-
-# SUBJECT PREFIX
-#
-# This text, plus a space, will be prepended
-# to the subject line of the commit message.
-# When the option specified with no value, no
-# prefix will be used.
-#
-SUBJECT_PREFIX =
-
-# MESSAGE SIZE LIMIT
-#
-# If the delta info exceeds this threshold, no diff will be
-# mailed/logged; as a replacement for this, URLs pointing
-# to the corresponding ViewCVS diffs will be constructed and
-# included in the mail/log message.
-#
-# 0 = no treshold, unlimited diffs
-# x = maximum size of the diff in kb
-#
-#SIZELIMIT = 100;
-
-# VIEWCVS URL
-#
-# Specify here the URL to ViewCVS (without trailing slash!)
-# If left unset, the script will attempt to guess the correct
-# value.
-#
-VIEWCVS = "http://cvs.groovy.codehaus.org/groovy";
diff --git a/CVSROOT/modules b/CVSROOT/modules
deleted file mode 100644
index cb9e9ef..0000000
--- a/CVSROOT/modules
+++ /dev/null
@@ -1,26 +0,0 @@
-# Three different line formats are valid:
-#	key	-a    aliases...
-#	key [options] directory
-#	key [options] directory files...
-#
-# Where "options" are composed of:
-#	-i prog		Run "prog" on "cvs commit" from top-level of module.
-#	-o prog		Run "prog" on "cvs checkout" of module.
-#	-e prog		Run "prog" on "cvs export" of module.
-#	-t prog		Run "prog" on "cvs rtag" of module.
-#	-u prog		Run "prog" on "cvs update" of module.
-#	-d dir		Place module in directory "dir" instead of module name.
-#	-l		Top-level directory only -- do not recurse.
-#
-# NOTE:  If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias.  An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module.  This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
diff --git a/CVSROOT/notify b/CVSROOT/notify
deleted file mode 100644
index 74ae6f9..0000000
--- a/CVSROOT/notify
+++ /dev/null
@@ -1,12 +0,0 @@
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent.  The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT.  If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail -s "CVS notification" %s
diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo
deleted file mode 100644
index 49e59f4..0000000
--- a/CVSROOT/rcsinfo
+++ /dev/null
@@ -1,13 +0,0 @@
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT.  For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo
deleted file mode 100644
index 274a46d..0000000
--- a/CVSROOT/taginfo
+++ /dev/null
@@ -1,20 +0,0 @@
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4->  file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT.  For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg
deleted file mode 100644
index 86f747c..0000000
--- a/CVSROOT/verifymsg
+++ /dev/null
@@ -1,21 +0,0 @@
-# The "verifymsg" file is used to allow verification of logging
-# information.  It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure.  Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-#   Making sure that the entered bug-id number is correct.
-#   Validating that the code that was reviewed is indeed the code being
-#       checked in (using the bug-id number or a seperate review
-#       number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported.  There can be only one entry that matches a given
-# repository.
diff --git a/groovy/.cvsignore b/groovy/.cvsignore
deleted file mode 100644
index 52444d2..0000000
--- a/groovy/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-groovy.iml
-groovy.ipr
-groovy.iws
diff --git a/groovy/groovy-native/README b/groovy/groovy-native/README
deleted file mode 100644
index 9049c27..0000000
--- a/groovy/groovy-native/README
+++ /dev/null
@@ -1,120 +0,0 @@
-This is a proof-of-concept for compiling Groovy to native code.
-
-Goals:
- - Better performance / reduced overheads (cpu, memory, start-up time).
- - Appealing alternative to Perl/Python/Ruby/shell-scripts.
- - Simple install (src tarball, RPM, dpkg, windows installer, OS-X whatever).
- - No JVM required.
- - Ability to use Groovy to access less Javaish libraries (POSIXy stuff, MFC, .NET).
- - Ability to use Groovy (and Java) objects from other languages (C, C++, Perl, Python, Ruby, .NET, etc)
-
-WARNING: This is an experiment. It's a proof-of-concept. It probably won't work. But maybe it will.
-
-The first attempt at this package uses the GNU GCJ compiler. This is built on top of GCC and is 
-available for UNIXy platforms (including Linux and OS-X) and Windows (with Cygwin).
-
-These are the first set of goals for the experiment. 
-
-
-
-*** Goal 1 : Native standalone executable of .groovy file.
-[Complete]
-
-The existing Groovy compiler (running on a JVM) can compile .groovy files to .class files.
-GCJ can then compile these .class files to .o binary objects.
-GCJ can link these objects (together with a native version of the Groovy runtime library) into a 
-native executable.
-
-The challenge is building the native runtime library. In particular, identifying if the runtime 
-byte-code generation, custom class-loaders and dynamic proxies will cause problems when moved to 
-native code.
-
-Certain features of the Groovy language may be excluded to meet this goal and a JVM is still 
-required at build time.  
-
-
-
-*** Goal 2 : Native Groovy libraries.
-[In progress]
-
-Compile a collection of .groovy files into a .so that can be linked to from other Groovy or native
-libraries. 
-
-Provide samples for Groovy, C and C++ apps all linking to another Groovy library.
-
-
-
-*** Goal 3 : Native .groovy compiler.
-[Not started]
-
-The actual Groovy compiler should be native (as well as the runtime) allowing Groovy to be developed
-entirely without a JVM present.
-
-
-
-*** Goal 4 : Usable tool set.
-[In progress]
-
-A set of simple wrapper tools should be provided for common features:
- - Compiling and linking a Groovy library or standalone executable.
- - JIT style interpreter (like Python) that runs a Groovy script directly by recompiling if necessary.
- - #!/usr/local/bin/groovy style declaration for scripts allowing direct invocation.
-
-
-
-*** Goal 5 : Runtime interpreter.
-[Not started]
-
-Allow Groovy snippets to be evaluated dynamically at runtime (the functionality of GroovyClassLoader).
-This could get tricky.
-
-
-
-*** Goal 6 : Complete language features.
-[Not started]
-
-Get all the unit tests running on the native Groovy. This excludes Java specific extras such as JMS 
-and Servlets.
-
-
-
-*** Goal 7 : Installation bundle.
-[Not started]
-
-Provide a UNIX installation bundle that contains scripts and instructions for getting native Groovy
-running on a machine.
-
-
-
-*** Goal 8 : Optimizations.
-[Not started]
-
-Profile code to see how it can be made snappier. Especially important is the startup time. A plain
-GCJ compiled Java file starts within <50ms, whereas Groovy is taking much longer.
-
-
-
-*** Goal 9 : Provide Groovy with simple access to native libraries.
-[Not started]
-
-Extend the Groovy library and build tools to allow easy access to code outside of Groovy/Java from 
-Groovy classes.
-
-Something like:
-
-import ncurses // use libncurses/ncurses.h
-class Thingy {
-  void doStuff(name) {
-    ncurses.printw("Hello ${name}") // print string
-    ncurses.refresh()               // display it on screen
-    ncurses.getch()                 // wait for key press
-  }
-}
-
-
-
-
-
-
-
-- Joe Walnes <joe@thoughtworks.net>
diff --git a/groovy/groovy-native/examples/001-standalone-executable/README b/groovy/groovy-native/examples/001-standalone-executable/README
deleted file mode 100644
index fefdd4d..0000000
--- a/groovy/groovy-native/examples/001-standalone-executable/README
+++ /dev/null
@@ -1,15 +0,0 @@
-Read README in parent directory first. And read the README in the grand-parent directory
-before that! Seriously, it's important!
-
-
-
-This demo simply compiles a single Simple.groovy class into a native executable that can
-be invoked using ./Simple
-
-Steps:
- * Read the other README files.
- * ./build.sh
- * ./Simple
-
-
-- Joe Walnes <joe@thoughtworks.net>
diff --git a/groovy/groovy-native/examples/001-standalone-executable/Simple.groovy b/groovy/groovy-native/examples/001-standalone-executable/Simple.groovy
deleted file mode 100644
index b67e0d3..0000000
--- a/groovy/groovy-native/examples/001-standalone-executable/Simple.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-class Simple {
-  doSomething() {
-    data = ["name": "James", "location": "London"]
-    for (e in data) {
-      println("entry ${e.key} is ${e.value}")
-    }
-  }
-  
-  closureExample(collection) {
-    collection.each { println("value ${it}") }
-  }
-  
-  static void main(args) {
-    values = [1, 2, 3, "abc", "moo"]
-    foo = new Simple()
-    foo.closureExample(values)
-    foo.doSomething()
-  }
-}
diff --git a/groovy/groovy-native/examples/001-standalone-executable/build.sh b/groovy/groovy-native/examples/001-standalone-executable/build.sh
deleted file mode 100644
index e1ca0b1..0000000
--- a/groovy/groovy-native/examples/001-standalone-executable/build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-$GROOVY_HOME/bin/groovyc Simple.groovy
-CLASSPATH=../../libgroovy/libgroovy.jar gcj --main=Simple -o Simple -L../../libgroovy -lgroovy *.class
-rm -rf *.class
-
diff --git a/groovy/groovy-native/examples/README b/groovy/groovy-native/examples/README
deleted file mode 100644
index a01ddda..0000000
--- a/groovy/groovy-native/examples/README
+++ /dev/null
@@ -1,16 +0,0 @@
-These are the examples for libgroovy. If you don't know what I'm talking about, read
-the README in the parent directory.
-
-Before running any of the examples:
- * Build libgroovy (instructions in libgroovy directory).
- * Set GROOVY_HOME to wherever Groovy may reside.
- * Append the libgroovy directory to LD_LIBRARY_PATH if not already present.
-   
-   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/groovy-native/libgroovy
-
-The example directory names are prefixed with a number so you can step through the 
-examples in a logical order.
-
-
-- Joe Walnes <joe@thoughtworks.net>
-
diff --git a/groovy/groovy-native/libgroovy/README b/groovy/groovy-native/libgroovy/README
deleted file mode 100644
index 0314b9d..0000000
--- a/groovy/groovy-native/libgroovy/README
+++ /dev/null
@@ -1,59 +0,0 @@
-See README in parent directory before reading on.
-
-Okay, so now you know what this is all about.
-
-
-
-*** Introduction
-
-libgroovy is the core native Groovy library for runtime use. Any Groovy application
-requires this library (and the standard libgcj libraries) to run.
-
-libgroovy only contains a subset of the standard Groovy library. Currently it only
-runs basic Groovy scripts.
-
-You may notice that there are no actual source files here. This is because libgroovy
-is built from the Java source files from Groovy. The source files for the Java ASM 
-library are also required.
-
-
-
-*** Building the library.
-
-This library currently only compiles on UNIX.
-
-You need:
- - JDK.
- - GCJ.
- - The Java source for Groovy and ASM.
- - Bash.
-
-Edit build.sh and set the appropriate variables at the top of the script.
-
-./build.sh
-(may take some time and generate a collection of warnings - but hopefully no errors).
-
-If all goes to plan, you should end up with libgroovy.so and libgroovy.jar in the current
-directory. 
-
-
-
-*** Notes on how the library is built.
-
-The stripped down library only tries to compile the classes listed in groovy-src and asm-src.
-
-Certain tweaks needed to be made to get the source to compile as GCJ only partially supports 
-the J2SE1.4 library. Rather than modify the Groovy source, build.sh patches the source using
-patch.diff to get the code to compile (although nobbling some features in doing so).
-
-
-
-*** How to use the library.
-
-Coming soon. In the mean time, look at one of the examples.
-
-
-
-- Joe Walnes <joe@thoughtworks.net>
-
-
diff --git a/groovy/groovy-native/libgroovy/asm-src b/groovy/groovy-native/libgroovy/asm-src
deleted file mode 100644
index e89f128..0000000
--- a/groovy/groovy-native/libgroovy/asm-src
+++ /dev/null
@@ -1,10 +0,0 @@
-org/objectweb/asm/ClassVisitor.java
-org/objectweb/asm/ClassWriter.java
-org/objectweb/asm/CodeVisitor.java
-org/objectweb/asm/Constants.java
-org/objectweb/asm/CodeWriter.java
-org/objectweb/asm/Edge.java
-org/objectweb/asm/Item.java
-org/objectweb/asm/Label.java
-org/objectweb/asm/Type.java
-org/objectweb/asm/ByteVector.java
diff --git a/groovy/groovy-native/libgroovy/build.sh b/groovy/groovy-native/libgroovy/build.sh
deleted file mode 100644
index fd1be84..0000000
--- a/groovy/groovy-native/libgroovy/build.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-# Ensure these paths are correct
-
-#JAVA_HOME=/usr/local/java
-GROOVY_HOME=~/groovy-1.0-beta-2
-GROOVY_SRC=$GROOVY_HOME/src/main
-ASM_SRC=~/ASM/dev/src
-
-# End of paths
-
-
-
-
-BUILD_DIR=build
-LIB_NAME=groovy
-
-rm -rf $BUILD_DIR lib$LIB_NAME.{jar,so}
-mkdir -p $BUILD_DIR
-
-BASE_DIR=`pwd`
-cd $BUILD_DIR
-BUILD_DIR=`pwd`
-cd $BASE_DIR
-
-# Copy mimimum required source files to temp directory
-(cd $GROOVY_SRC && cp --parents `grep -v '#' $BASE_DIR/groovy-src` $BUILD_DIR)
-(cd $ASM_SRC && cp --parents `grep -v '#' $BASE_DIR/asm-src` $BUILD_DIR)
-
-# Patch the source files
-patch --silent -f -p0 -d $BUILD_DIR < patch.diff
-
-# .java -> .class
-find $BUILD_DIR -name \*.java | xargs gcj -C
-
-# .class -> .jar
-jar -cf lib$LIB_NAME.jar -C $BUILD_DIR .
-
-# .class -> .so
-gcj -shared -o lib$LIB_NAME.so lib$LIB_NAME.jar
-
-# clean up
-rm -rf $BUILD_DIR
-
diff --git a/groovy/groovy-native/libgroovy/groovy-src b/groovy/groovy-native/libgroovy/groovy-src
deleted file mode 100644
index 0030e97..0000000
--- a/groovy/groovy-native/libgroovy/groovy-src
+++ /dev/null
@@ -1,128 +0,0 @@
-groovy/lang/Closure.java
-groovy/lang/ClosureException.java
-groovy/lang/GString.java
-groovy/lang/GroovyClassLoader.java
-groovy/lang/GroovyLog.java
-groovy/lang/GroovyObject.java
-groovy/lang/GroovyObjectSupport.java
-groovy/lang/GroovyShell.java
-groovy/lang/IntRange.java
-groovy/lang/MetaClass.java
-groovy/lang/MetaClassRegistry.java
-groovy/lang/NonEmptySequence.java
-groovy/lang/ObjectRange.java
-groovy/lang/Range.java
-groovy/lang/Reference.java
-groovy/lang/Script.java
-groovy/lang/ScriptContext.java
-groovy/lang/Sequence.java
-groovy/lang/Tuple.java
-groovy/util/Bitwise.java
-groovy/util/BuilderSupport.java
-groovy/util/ClosureComparator.java
-groovy/util/IndentPrinter.java
-groovy/util/MapEntry.java
-groovy/util/Node.java
-groovy/util/NodeBuilder.java
-groovy/util/NodePrinter.java
-groovy/util/OrderBy.java
-org/codehaus/groovy/GroovyException.java
-org/codehaus/groovy/ast/ASTNode.java
-org/codehaus/groovy/ast/ClassNode.java
-org/codehaus/groovy/ast/CodeVisitorSupport.java
-org/codehaus/groovy/ast/CompileUnit.java
-org/codehaus/groovy/ast/ConstructorNode.java
-org/codehaus/groovy/ast/FieldNode.java
-org/codehaus/groovy/ast/GroovyClassVisitor.java
-org/codehaus/groovy/ast/GroovyCodeVisitor.java
-org/codehaus/groovy/ast/InnerClassNode.java
-org/codehaus/groovy/ast/MetadataNode.java
-org/codehaus/groovy/ast/MethodNode.java
-org/codehaus/groovy/ast/MixinNode.java
-org/codehaus/groovy/ast/ModuleNode.java
-org/codehaus/groovy/ast/Parameter.java
-org/codehaus/groovy/ast/PropertyNode.java
-org/codehaus/groovy/ast/expr/ArgumentListExpression.java
-org/codehaus/groovy/ast/expr/ArrayExpression.java
-org/codehaus/groovy/ast/expr/BinaryExpression.java
-org/codehaus/groovy/ast/expr/BooleanExpression.java
-org/codehaus/groovy/ast/expr/ClassExpression.java
-org/codehaus/groovy/ast/expr/ClosureExpression.java
-org/codehaus/groovy/ast/expr/ConstantExpression.java
-org/codehaus/groovy/ast/expr/ConstructorCallExpression.java
-org/codehaus/groovy/ast/expr/Expression.java
-org/codehaus/groovy/ast/expr/FieldExpression.java
-org/codehaus/groovy/ast/expr/GStringExpression.java
-org/codehaus/groovy/ast/expr/ListExpression.java
-org/codehaus/groovy/ast/expr/MapEntryExpression.java
-org/codehaus/groovy/ast/expr/MapExpression.java
-org/codehaus/groovy/ast/expr/MethodCallExpression.java
-org/codehaus/groovy/ast/expr/NamedArgumentListExpression.java
-org/codehaus/groovy/ast/expr/NotExpression.java
-org/codehaus/groovy/ast/expr/PostfixExpression.java
-org/codehaus/groovy/ast/expr/PrefixExpression.java
-org/codehaus/groovy/ast/expr/PropertyExpression.java
-org/codehaus/groovy/ast/expr/RangeExpression.java
-org/codehaus/groovy/ast/expr/RegexExpression.java
-org/codehaus/groovy/ast/expr/StaticMethodCallExpression.java
-org/codehaus/groovy/ast/expr/TupleExpression.java
-org/codehaus/groovy/ast/expr/VariableExpression.java
-org/codehaus/groovy/ast/stmt/AssertStatement.java
-org/codehaus/groovy/ast/stmt/BlockStatement.java
-org/codehaus/groovy/ast/stmt/BreakStatement.java
-org/codehaus/groovy/ast/stmt/CaseStatement.java
-org/codehaus/groovy/ast/stmt/CatchStatement.java
-org/codehaus/groovy/ast/stmt/ContinueStatement.java
-org/codehaus/groovy/ast/stmt/DoWhileStatement.java
-org/codehaus/groovy/ast/stmt/EmptyStatement.java
-org/codehaus/groovy/ast/stmt/ExpressionStatement.java
-org/codehaus/groovy/ast/stmt/ForStatement.java
-org/codehaus/groovy/ast/stmt/IfStatement.java
-org/codehaus/groovy/ast/stmt/ReturnStatement.java
-org/codehaus/groovy/ast/stmt/Statement.java
-org/codehaus/groovy/ast/stmt/SwitchStatement.java
-org/codehaus/groovy/ast/stmt/SynchronizedStatement.java
-org/codehaus/groovy/ast/stmt/ThrowStatement.java
-org/codehaus/groovy/ast/stmt/TryCatchStatement.java
-org/codehaus/groovy/ast/stmt/WhileStatement.java
-org/codehaus/groovy/classgen/ClassGenerator.java
-org/codehaus/groovy/classgen/ClassGeneratorException.java
-org/codehaus/groovy/classgen/VariableScopeCodeVisitor.java
-org/codehaus/groovy/classgen/CompilerFacade.java
-org/codehaus/groovy/classgen/GeneratorContext.java
-org/codehaus/groovy/classgen/MethodCaller.java
-org/codehaus/groovy/classgen/Variable.java
-org/codehaus/groovy/classgen/Verifier.java
-org/codehaus/groovy/classgen/VerifierCodeVisitor.java
-org/codehaus/groovy/runtime/ClassExtender.java
-org/codehaus/groovy/runtime/DefaultGroovyMethods.java
-org/codehaus/groovy/runtime/Invoker.java
-org/codehaus/groovy/runtime/InvokerException.java
-org/codehaus/groovy/runtime/InvokerHelper.java
-org/codehaus/groovy/runtime/InvokerInvocationException.java
-org/codehaus/groovy/runtime/IteratorClosureAdapter.java
-org/codehaus/groovy/runtime/MethodClosure.java
-org/codehaus/groovy/runtime/MethodHelper.java
-org/codehaus/groovy/runtime/NoSuchClassException.java
-org/codehaus/groovy/runtime/NoSuchMethodException.java
-org/codehaus/groovy/runtime/NoSuchPropertyException.java
-org/codehaus/groovy/syntax/AbstractTokenStream.java
-org/codehaus/groovy/syntax/LookAheadExhaustionException.java
-org/codehaus/groovy/syntax/SyntaxException.java
-org/codehaus/groovy/syntax/Token.java
-org/codehaus/groovy/syntax/TokenStream.java
-org/codehaus/groovy/syntax/TokenMismatchException.java
-org/codehaus/groovy/syntax/lexer/AbstractCharStream.java
-org/codehaus/groovy/syntax/lexer/CharStream.java
-org/codehaus/groovy/syntax/lexer/InputStreamCharStream.java
-org/codehaus/groovy/syntax/lexer/Lexer.java
-org/codehaus/groovy/syntax/lexer/LexerTokenStream.java
-org/codehaus/groovy/syntax/lexer/UnexpectedCharacterException.java
-org/codehaus/groovy/syntax/lexer/LexerException.java
-org/codehaus/groovy/syntax/lexer/UnterminatedStringLiteralException.java
-org/codehaus/groovy/syntax/parser/ASTBuilder.java
-org/codehaus/groovy/syntax/parser/CSTNode.java
-org/codehaus/groovy/syntax/parser/UnexpectedTokenException.java
-org/codehaus/groovy/syntax/parser/ParserException.java
-org/codehaus/groovy/syntax/parser/Parser.java
-org/codehaus/groovy/syntax/lexer/StringCharStream.java
diff --git a/groovy/groovy-native/libgroovy/patch.diff b/groovy/groovy-native/libgroovy/patch.diff
deleted file mode 100644
index 68b0bce..0000000
--- a/groovy/groovy-native/libgroovy/patch.diff
+++ /dev/null
@@ -1,82 +0,0 @@
---- org/codehaus/groovy/runtime/Invoker.java	2004-01-06 16:37:49.000000000 +0000
-+++ org/codehaus/groovy/runtime/Invoker.java	2004-01-06 16:38:46.000000000 +0000
-@@ -62,8 +62,6 @@
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- 
--import com.mockobjects.util.NotImplementedException;
--
- /**
-  * A helper class to invoke methods or extract properties on arbitrary Java objects dynamically
-  * 
-@@ -244,7 +242,7 @@
- 					return matcher.group();
- 				}
- 				public void remove() {
--					throw new NotImplementedException();
-+					throw new UnsupportedOperationException();
- 				}
-         	};
-         }
---- ./org/codehaus/groovy/runtime/InvokerHelper.java.orig	2004-01-06 17:13:41.000000000 +0000
-+++ ./org/codehaus/groovy/runtime/InvokerHelper.java	2004-01-06 17:14:24.000000000 +0000
-@@ -170,7 +170,7 @@
-         }
-         else if (object instanceof Matcher) {
-             Matcher matcher = (Matcher) object;
--            return matcher.find();
-+	    throw new UnsupportedOperationException("Matcher.find()");
-         }
-         else if (object instanceof Collection) {
-             Collection collection = (Collection) object;
---- ./org/codehaus/groovy/runtime/Invoker.java.orig	2004-01-06 17:14:52.000000000 +0000
-+++ ./org/codehaus/groovy/runtime/Invoker.java	2004-01-06 17:17:41.000000000 +0000
-@@ -227,8 +227,7 @@
- 				public boolean hasNext() {
- 					if (done) return false;
- 					if (!found) {
--						found = matcher.find();
--						if (!found) done = true;
-+						throw new UnsupportedOperationException("Matcher.find()");
- 					}
- 					return found;
- 				}
-@@ -239,7 +238,7 @@
- 						}
- 					}
- 					found = false;
--					return matcher.group();
-+					throw new UnsupportedOperationException("Matcher.group()");
- 				}
- 				public void remove() {
- 					throw new UnsupportedOperationException();
-@@ -485,7 +484,7 @@
-     		pattern = Pattern.compile(toString(right));
-     	}
-     	String stringToCompare = toString(left);
--    	return pattern.matcher(stringToCompare).matches();
-+	throw new UnsupportedOperationException("Matcher");
-     }
- 
- 	/**
---- ./org/codehaus/groovy/runtime/DefaultGroovyMethods.java.orig	2004-01-06 17:18:17.000000000 +0000
-+++ ./org/codehaus/groovy/runtime/DefaultGroovyMethods.java	2004-01-06 17:19:36.000000000 +0000
-@@ -221,7 +221,7 @@
-     }
- 
-     public static boolean isCase(Pattern caseValue, Object switchValue) {
--        return caseValue.matcher(switchValue.toString()).matches();
-+	throw new UnsupportedOperationException("Matcher.matches()");
-     }
- 
-     // Collection based methods
-@@ -850,8 +850,7 @@
-     }
- 
-     public static String minus(String left, Object value) {
--        String text = toString(value);
--        return left.replaceFirst(text, "");
-+	throw new UnsupportedOperationException("String.replaceFirst()");
-     }
- 
-     public static String multiply(String self, Number factor) {
diff --git a/groovy/jsr/build.xml b/groovy/jsr/build.xml
deleted file mode 100644
index 14e0d6e..0000000
--- a/groovy/jsr/build.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<project name="jsr" default="default">
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="publish.dir" value="/home/projects/groovy/public_html/jsr"/>
-  <property name="spec.wiki.dir" value="spec/wiki"/>
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="publish" 
-          description="default: publish distributables"
-  />
-  
-  <target name="clean" description="remove all built files">
-    <!--workaround for biscuit local dir issue -->
-    <delete file="SearchAndReplace"/>
-    <delete file="SearchAndReplaceRegex"/>
-    <delete file="TemplatePage.html"/>
-
-    <ant dir="spec" target="clean"/> 
-    <ant dir="ideas/parsers/antlr" target="clean"/>
-  </target>
-
-  <target name="doc">
-    <echo>
------------------------
-render specification...
------------------------
-    </echo>
-    <!--workaround for biscuit local dir issue -->
-    <copy file="spec/SearchAndReplace" todir="."/>
-    <copy file="spec/SearchAndReplaceRegex" todir="."/>
-    <copy file="spec/TemplatePage.html" todir="."/>
-    <ant dir="spec" target="render" inheritAll="false"/>
-
-    <echo>
------------------------
-render grammar...
------------------------
-    </echo>
-    <!-- bring grammar over from groovy-core -->
-    <copy todir="ideas/parsers/antlr/src">
-      <fileset dir="../groovy-core/src/main">
-        <include name="**/groovy.g"/>
-      </fileset>
-    </copy>
-
-    <ant dir="ideas/parsers/antlr" target="docs" inheritAll="false"/>
-
-
-  </target>
-
-  <target name="publish" depends="doc" description="publish distributables">
-    <copy todir="${publish.dir}/spec">
-      <fileset dir="${spec.wiki.dir}"/>
-    </copy>
-
-    <copy todir="${publish.dir}/spec">
-      <fileset dir="ideas/parsers/antlr/doc/">
-        <include name="GroovyRecognizer.html"/>
-        <include name="GroovyLexer.html"/>
-      </fileset>
-    </copy>
-  </target>
-
-</project>
diff --git a/groovy/jsr/ideas/README.txt b/groovy/jsr/ideas/README.txt
deleted file mode 100644
index 2774a73..0000000
--- a/groovy/jsr/ideas/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-This directory is a place holder for new ideas we may wish to add to the language.
diff --git a/groovy/jsr/ideas/parsers/antlr/build.xml b/groovy/jsr/ideas/parsers/antlr/build.xml
deleted file mode 100644
index 6dcbbec..0000000
--- a/groovy/jsr/ideas/parsers/antlr/build.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0"?>
-<project name="groovyparser" default="default">
-
-  <!-- project generated by http://megg.sf.net -->
-  <!-- author Jeremy.Rayner@bigfoot.com -->
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   compile settings                -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="build.debug" value="on"/>
-  <property name="version.number" value="0.0.2"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="src.dir" value="src"/>
-  <property name="generated.src.dir" value="srcgen"/>
-  <property name="build.dir" value="build"/>
-  <property name="build.classes.dir" value="${build.dir}/classes"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="standalone.dir" value="standalone"/>
-  <property name="standalone.working.dir" value="temp"/>
-
-  <!-- TODO limit exposure to groovy classic -->
-  <property name="groovy.classic.dir" value="../../../../groovy-core/target/install"/>
-  <property name="groovy.classic.lib.dir" value="${groovy.classic.dir}/embeddable"/>
-  <property name="groovy.classic.ext.lib.dir" value="${groovy.classic.dir}/lib"/>
-
-  <!-- javadoc properties -->
-  <property name="javadoc.dir" value="doc"/>
-  <property name="javadoc.packages" value="org.*"/>
-
-  <!-- junit properties -->
-  <property name="test.src.dir"	value="test"/>
-  <property name="test.classes.dir" value="${build.dir}/test/classes"/>
-  <property name="test.reports.dir" value="reports"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                     datatypes                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <path id="compile.classpath">
-      <pathelement location="${build.classes.dir}"/>
-    <fileset dir="${lib.dir}">
-      <include name="**/*.jar" />
-      <include name="**/*.zip" />
-    </fileset>
-
-    <!-- TODO limit exposure to groovy classic -->
-    <fileset dir="${groovy.classic.lib.dir}">
-        <include name="**/*.jar" />
-    </fileset>
-  </path>
-  
-  <path id="test.classpath">
-    <path refid="compile.classpath"/>
-    <pathelement location="${test.classes.dir}"/>  
-    <fileset dir="${groovy.classic.ext.lib.dir}">
-        <include name="**/*.jar" />
-    </fileset>
-  </path>
-  
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="dist" 
-          description="default: build everything"
-  />
-  
-  <target name="all" 
-          depends="test,dist" 
-          description="build and test everything"
-  />
-
-  <target name="clean" description="remove all built files">
-    <delete dir="${test.reports.dir}"/>
-    <delete dir="${standalone.dir}"/>
-    <delete dir="${javadoc.dir}" />
-    <delete dir="${generated.src.dir}" />
-    <delete dir="${build.dir}" />
-    <delete dir="${dist.dir}" />
-  </target>
-
-  <target name="dist" 
-          depends="compile" 
-          description="create distributables (jars etc)">
-    <mkdir dir="${dist.dir}" />
-    <jar jarfile="${dist.dir}/groovy-jsr-${version.number}.jar"
-         manifest="${src.dir}/manifest.txt">
-      <fileset dir="${build.classes.dir}"/>
-    </jar>
-  </target>
-
-  <target name="docs" depends="generate" description="generate documentation">
-    <mkdir dir="${javadoc.dir}" />
-
-    <antlr target="${src.dir}/org/codehaus/groovy/antlr/groovy.g"
-           html="true"
-           outputdirectory="${javadoc.dir}">
-      <classpath>
-        <fileset dir="${lib.dir}">
-          <include name="**/*.jar"/>
-        </fileset>
-      </classpath>
-    </antlr>
-    <move file="doc/GroovyLexer.txt" tofile="doc/GroovyLexer.html" failonerror="No"/>
-
-    <copy todir="${generated.src.dir}">
-      <fileset dir="${src.dir}"/>
-    </copy>
-
-    <javadoc sourcepath="${generated.src.dir}" 
-             destdir="${javadoc.dir}" 
-             packagenames="${javadoc.packages}"
-             classpathref="compile.classpath"
-             use="true"
-             windowtitle="groovyc"
-             private="true"/>
-  </target>
-
-  <target name="test" 
-          depends="test-compile" 
-          description="run all test cases">
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="plain" usefile="false"/>
-      <batchtest>
-        <fileset dir="${test.src.dir}">
-          <include name="**/*Test.java" />
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-        
-  <target name="test-classic"
-          depends="test-compile"
-          description="run all the classic test cases">
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="plain" usefile="false"/>
-      <batchtest>
-        <fileset dir="${test.src.dir}">
-          <include name="**/AllTests.java" />
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-
-  <target name="pretty-test"
-          depends="test-compile" 
-          description="HTML output of test cases">
-    <mkdir dir="${test.reports.dir}"/>
-    <junit haltonfailure="false" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="xml" usefile="true"/>
-
-      <batchtest todir="${test.reports.dir}">
-        <fileset dir="${test.src.dir}">
-          <include name="**/*Test.java" />
-        </fileset>
-      </batchtest>
-
-    </junit>
-
-    <junitreport todir="${test.reports.dir}">
-      <fileset dir="${test.reports.dir}">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report format="frames" todir="${test.reports.dir}"/>
-    </junitreport>
-  </target>
-
-  <target name="standalone" depends="dist" description="merge all jars together">
-    <mkdir dir="${standalone.working.dir}"/>
-    <unzip dest="${standalone.working.dir}">
-      <fileset dir="${lib.dir}">
-        <include name="*.jar"/>
-      </fileset>
-      <fileset dir="${dist.dir}">
-        <include name="*.jar"/>
-      </fileset>
-    </unzip>
-    <copy todir="${standalone.working.dir}">
-        <fileset dir="licenses"/>
-    </copy>
-    <mkdir dir="standalone"/>
-    <jar jarfile="standalone/groovy-jsr-${version.number}.jar"
-         manifest="${src.dir}/manifest.txt">
-    <fileset dir="${standalone.working.dir}"/>
-  </jar>
-  <delete dir="${standalone.working.dir}"/>
-  </target>
-
-
-
-  <target name="generate" depends="init" description="generate sources from a grammar file">
-    <mkdir dir="${generated.src.dir}/org/codehaus/groovy/antlr"/>
-    <antlr target="${src.dir}/org/codehaus/groovy/antlr/groovy.g"
-           outputdirectory="${generated.src.dir}/org/codehaus/groovy/antlr">
-      <classpath>
-        <fileset dir="${lib.dir}">
-          <include name="**/*.jar"/>
-        </fileset>
-      </classpath>
-    </antlr>
-  </target>
-  
-  <target name="compile" depends="generate" description="compile java">
-    <mkdir dir="${build.classes.dir}" />
-    <copy todir="${generated.src.dir}">
-      <fileset dir="${src.dir}"/>
-    </copy>
-    <javac srcdir="${generated.src.dir}" 
-           destdir="${build.classes.dir}" 
-           classpathref="compile.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-  
-  <target name="test-compile" depends="compile" description="compile tests">
-    <mkdir dir="${test.classes.dir}" />
-    <javac srcdir="${test.src.dir}" 
-           destdir="${test.classes.dir}" 
-           classpathref="test.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-
-  <target name="init">
-    <tstamp />
-    <mkdir dir="${lib.dir}"/>
-  </target>
-       
-</project>
diff --git a/groovy/jsr/ideas/parsers/antlr/lib/antlr-2.7.5.jar b/groovy/jsr/ideas/parsers/antlr/lib/antlr-2.7.5.jar
deleted file mode 100644
index fbe5e3c..0000000
--- a/groovy/jsr/ideas/parsers/antlr/lib/antlr-2.7.5.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/antlr/lib/xpp3-1.1.3.4d_b4_min.jar b/groovy/jsr/ideas/parsers/antlr/lib/xpp3-1.1.3.4d_b4_min.jar
deleted file mode 100644
index 43486c2..0000000
--- a/groovy/jsr/ideas/parsers/antlr/lib/xpp3-1.1.3.4d_b4_min.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/antlr/lib/xstream-1.1.jar b/groovy/jsr/ideas/parsers/antlr/lib/xstream-1.1.jar
deleted file mode 100644
index d657fa0..0000000
--- a/groovy/jsr/ideas/parsers/antlr/lib/xstream-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/antlr/licenses/antlr.license.txt b/groovy/jsr/ideas/parsers/antlr/licenses/antlr.license.txt
deleted file mode 100644
index 7d45591..0000000
--- a/groovy/jsr/ideas/parsers/antlr/licenses/antlr.license.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-
-http://www.antlr.org/license.html
-
-Software License
-
-We  reserve no legal rights to the ANTLR--it is fully in the public domain. An individual or  company may do whatever they wish with source code distributed with ANTLR or the code  generated by ANTLR, including the incorporation of ANTLR, or its output, into commerical software.
-
-We encourage users to develop software with ANTLR. However, we do ask that  credit is given to us for developing ANTLR. By "credit", we mean that if you use  ANTLR or incorporate any source code into one of your programs (commercial product,  research project, or otherwise) that you acknowledge this fact somewhere in the  documentation, research report, etc... If you like ANTLR and have developed a nice tool with the output, please mention that you developed it using ANTLR. In addition, we ask  that the headers remain intact in our source code. As long as these guidelines are kept,  we expect to continue enhancing this system and expect to make other tools available as  they are completed.
-
-Terence Parr
-
diff --git a/groovy/jsr/ideas/parsers/antlr/licenses/xpp3-license.txt b/groovy/jsr/ideas/parsers/antlr/licenses/xpp3-license.txt
deleted file mode 100644
index 5d28ee1..0000000
--- a/groovy/jsr/ideas/parsers/antlr/licenses/xpp3-license.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-Indiana University Extreme! Lab Software License
-
-Version 1.1.1
-
-Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce 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 Indiana University
-  Extreme! Lab (http://www.extreme.indiana.edu/)."
-
-Alternately, this acknowledgment may appear in the software itself,
-if and wherever such third-party acknowledgments normally appear.
-
-4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab"
-must not be used to endorse or promote products derived from this
-software without prior written permission. For written permission,
-please contact http://www.extreme.indiana.edu/.
-
-5. Products derived from this software may not use "Indiana Univeristy"
-name nor may "Indiana Univeristy" appear in their name, without prior
-written permission of the Indiana University.
-
-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 AUTHORS, COPYRIGHT HOLDERS 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.
\ No newline at end of file
diff --git a/groovy/jsr/ideas/parsers/antlr/licenses/xstream-1.1-license.txt b/groovy/jsr/ideas/parsers/antlr/licenses/xstream-1.1-license.txt
deleted file mode 100644
index 4848b3e..0000000
--- a/groovy/jsr/ideas/parsers/antlr/licenses/xstream-1.1-license.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-(BSD Style License)
-
-Copyright (c) 2003-2004, Joe Walnes
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-Redistributions of source code must retain the above copyright notice, this list of
-conditions and the following disclaimer. Redistributions in binary form must reproduce
-the above copyright notice, this list of conditions and the following disclaimer in
-the documentation and/or other materials provided with the distribution.
-
-Neither the name of XStream nor the names of its contributors may be used to endorse
-or promote products derived from this software without specific prior written
-permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
-SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (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/groovy/jsr/ideas/parsers/antlr/misc/README.txt b/groovy/jsr/ideas/parsers/antlr/misc/README.txt
deleted file mode 100644
index 475b84e..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/README.txt
+++ /dev/null
@@ -1,9 +0,0 @@
--=-=-=-=-=-
-Misc Files
--=-=-=-=-=-
-
-antlr_grammar_files.xml - ANTLR syntax colouring for IntelliJ
-
-    put the antlr_grammar_files.xml in ~/Library/Preferences/IntelliJ IDEA/filetypes  (Mac OS X path)
-
-java.g - the original grammar that groovy.g is based upon
\ No newline at end of file
diff --git a/groovy/jsr/ideas/parsers/antlr/misc/antlr_grammar_files.xml b/groovy/jsr/ideas/parsers/antlr/misc/antlr_grammar_files.xml
deleted file mode 100644
index d47118e..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/antlr_grammar_files.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<filetype binary="false" default_extension="g" extensions="g" description="ANTLR Grammar files" name="ANTLR Grammar files">
-  <highlighting>
-    <options>
-      <option name="LINE_COMMENT" value="//" />
-      <option name="COMMENT_START" value="/*" />
-      <option name="COMMENT_END" value="*/" />
-      <option name="HEX_PREFIX" value="" />
-      <option name="NUM_POSTFIXES" value="" />
-    </options>
-    <keywords ignore_case="false">
-      <keyword name="class" />
-      <keyword name="extends" />
-      <keyword name="header" />
-      <keyword name="options" />
-      <keyword name="returns" />
-    </keywords>
-    <keywords2 />
-    <keywords3 />
-    <keywords4 />
-  </highlighting>
-</filetype>
-
diff --git a/groovy/jsr/ideas/parsers/antlr/misc/java.g b/groovy/jsr/ideas/parsers/antlr/misc/java.g
deleted file mode 100644
index 910cfff..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/java.g
+++ /dev/null
@@ -1,1273 +0,0 @@
-/** Java 1.3 Recognizer
- *
- * Run 'java Main [-showtree] directory-full-of-java-files'
- *
- * [The -showtree option pops up a Swing frame that shows
- *  the AST constructed from the parser.]
- *
- * Run 'java Main <directory full of java files>'
- *
- * Contributing authors:
- *		John Mitchell		johnm@non.net
- *		Terence Parr		parrt@magelang.com
- *		John Lilley			jlilley@empathy.com
- *		Scott Stanchfield	thetick@magelang.com
- *		Markus Mohnen       mohnen@informatik.rwth-aachen.de
- *      Peter Williams      pete.williams@sun.com
- *      Allan Jacobs        Allan.Jacobs@eng.sun.com
- *      Steve Messick       messick@redhills.com
- *      John Pybus			john@pybus.org
- *
- * Version 1.00 December 9, 1997 -- initial release
- * Version 1.01 December 10, 1997
- *		fixed bug in octal def (0..7 not 0..8)
- * Version 1.10 August 1998 (parrt)
- *		added tree construction
- *		fixed definition of WS,comments for mac,pc,unix newlines
- *		added unary plus
- * Version 1.11 (Nov 20, 1998)
- *		Added "shutup" option to turn off last ambig warning.
- *		Fixed inner class def to allow named class defs as statements
- *		synchronized requires compound not simple statement
- *		add [] after builtInType DOT class in primaryExpression
- *		"const" is reserved but not valid..removed from modifiers
- * Version 1.12 (Feb 2, 1999)
- *		Changed LITERAL_xxx to xxx in tree grammar.
- *		Updated java.g to use tokens {...} now for 2.6.0 (new feature).
- *
- * Version 1.13 (Apr 23, 1999)
- *		Didn't have (stat)? for else clause in tree parser.
- *		Didn't gen ASTs for interface extends.  Updated tree parser too.
- *		Updated to 2.6.0.
- * Version 1.14 (Jun 20, 1999)
- *		Allowed final/abstract on local classes.
- *		Removed local interfaces from methods
- *		Put instanceof precedence where it belongs...in relationalExpr
- *			It also had expr not type as arg; fixed it.
- *		Missing ! on SEMI in classBlock
- *		fixed: (expr) + "string" was parsed incorrectly (+ as unary plus).
- *		fixed: didn't like Object[].class in parser or tree parser
- * Version 1.15 (Jun 26, 1999)
- *		Screwed up rule with instanceof in it. :(  Fixed.
- *		Tree parser didn't like (expr).something; fixed.
- *		Allowed multiple inheritance in tree grammar. oops.
- * Version 1.16 (August 22, 1999)
- *		Extending an interface built a wacky tree: had extra EXTENDS.
- *		Tree grammar didn't allow multiple superinterfaces.
- *		Tree grammar didn't allow empty var initializer: {}
- * Version 1.17 (October 12, 1999)
- *		ESC lexer rule allowed 399 max not 377 max.
- *		java.tree.g didn't handle the expression of synchronized
- *		statements.
- * Version 1.18 (August 12, 2001)
- *      	Terence updated to Java 2 Version 1.3 by
- *		observing/combining work of Allan Jacobs and Steve
- *		Messick.  Handles 1.3 src.  Summary:
- *		o  primary didn't include boolean.class kind of thing
- *      	o  constructor calls parsed explicitly now:
- * 		   see explicitConstructorInvocation
- *		o  add strictfp modifier
- *      	o  missing objBlock after new expression in tree grammar
- *		o  merged local class definition alternatives, moved after declaration
- *		o  fixed problem with ClassName.super.field
- *      	o  reordered some alternatives to make things more efficient
- *		o  long and double constants were not differentiated from int/float
- *		o  whitespace rule was inefficient: matched only one char
- *		o  add an examples directory with some nasty 1.3 cases
- *		o  made Main.java use buffered IO and a Reader for Unicode support
- *		o  supports UNICODE?
- *		   Using Unicode charVocabulay makes code file big, but only
- *		   in the bitsets at the end. I need to make ANTLR generate
- *		   unicode bitsets more efficiently.
- * Version 1.19 (April 25, 2002)
- *		Terence added in nice fixes by John Pybus concerning floating
- *		constants and problems with super() calls.  John did a nice
- *		reorg of the primary/postfix expression stuff to read better
- *		and makes f.g.super() parse properly (it was METHOD_CALL not
- *		a SUPER_CTOR_CALL).  Also:
- *
- *		o  "finally" clause was a root...made it a child of "try"
- *		o  Added stuff for asserts too for Java 1.4, but *commented out*
- *		   as it is not backward compatible.
- *
- * Version 1.20 (October 27, 2002)
- *
- *      Terence ended up reorging John Pybus' stuff to
- *      remove some nondeterminisms and some syntactic predicates.
- *      Note that the grammar is stricter now; e.g., this(...) must
- *	be the first statement.
- *
- *      Trinary ?: operator wasn't working as array name:
- *          (isBig ? bigDigits : digits)[i];
- *
- *      Checked parser/tree parser on source for
- *          Resin-2.0.5, jive-2.1.1, jdk 1.3.1, Lucene, antlr 2.7.2a4,
- *	    and the 110k-line jGuru server source.
- *
- * Version 1.21 (October 17, 2003)
- *	Fixed lots of problems including:
- *	Ray Waldin: add typeDefinition to interfaceBlock in java.tree.g
- *  He found a problem/fix with floating point that start with 0
- *  Ray also fixed problem that (int.class) was not recognized.
- *  Thorsten van Ellen noticed that \n are allowed incorrectly in strings.
- *  TJP fixed CHAR_LITERAL analogously.
- *
- * Version 1.22 (April 14, 2004)                
- *  Changed vocab to be ..\uFFFE to avoid -1 char. removed dummy VOCAB rule.
- *
- * This grammar is in the PUBLIC DOMAIN
- */
-class JavaRecognizer extends Parser;
-options {
-	k = 2;                           // two token lookahead
-	exportVocab=Java;                // Call its vocabulary "Java"
-	codeGenMakeSwitchThreshold = 2;  // Some optimizations
-	codeGenBitsetTestThreshold = 3;
-	defaultErrorHandler = false;     // Don't generate parser error handlers
-	buildAST = true;
-}
-
-tokens {
-	BLOCK; MODIFIERS; OBJBLOCK; SLIST; CTOR_DEF; METHOD_DEF; VARIABLE_DEF;
-	INSTANCE_INIT; STATIC_INIT; TYPE; CLASS_DEF; INTERFACE_DEF;
-	PACKAGE_DEF; ARRAY_DECLARATOR; EXTENDS_CLAUSE; IMPLEMENTS_CLAUSE;
-	PARAMETERS; PARAMETER_DEF; LABELED_STAT; TYPECAST; INDEX_OP;
-	POST_INC; POST_DEC; METHOD_CALL; EXPR; ARRAY_INIT;
-	IMPORT; UNARY_MINUS; UNARY_PLUS; CASE_GROUP; ELIST; FOR_INIT; FOR_CONDITION;
-	FOR_ITERATOR; EMPTY_STAT; FINAL="final"; ABSTRACT="abstract";
-	STRICTFP="strictfp"; SUPER_CTOR_CALL; CTOR_CALL;
-}
-
-// Compilation Unit: In Java, this is a single file.  This is the start
-//   rule for this parser
-compilationUnit
-	:	// A compilation unit starts with an optional package definition
-		(	packageDefinition
-		|	/* nothing */
-		)
-
-		// Next we have a series of zero or more import statements
-		( importDefinition )*
-
-		// Wrapping things up with any number of class or interface
-		//    definitions
-		( typeDefinition )*
-
-		EOF!
-	;
-
-
-// Package statement: "package" followed by an identifier.
-packageDefinition
-	options {defaultErrorHandler = true;} // let ANTLR handle errors
-	:	p:"package"^ {#p.setType(PACKAGE_DEF);} identifier SEMI!
-	;
-
-
-// Import statement: import followed by a package or class name
-importDefinition
-	options {defaultErrorHandler = true;}
-	:	i:"import"^ {#i.setType(IMPORT);} identifierStar SEMI!
-	;
-
-// A type definition in a file is either a class or interface definition.
-typeDefinition
-	options {defaultErrorHandler = true;}
-	:	m:modifiers!
-		( classDefinition[#m]
-		| interfaceDefinition[#m]
-		)
-	|	SEMI!
-	;
-
-/** A declaration is the creation of a reference or primitive-type variable
- *  Create a separate Type/Var tree for each var in the var list.
- */
-declaration!
-	:	m:modifiers t:typeSpec[false] v:variableDefinitions[#m,#t]
-		{#declaration = #v;}
-	;
-
-// A type specification is a type name with possible brackets afterwards
-//   (which would make it an array type).
-typeSpec[boolean addImagNode]
-	: classTypeSpec[addImagNode]
-	| builtInTypeSpec[addImagNode]
-	;
-
-// A class type specification is a class type with possible brackets afterwards
-//   (which would make it an array type).
-classTypeSpec[boolean addImagNode]
-	:	identifier (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-		{
-			if ( addImagNode ) {
-				#classTypeSpec = #(#[TYPE,"TYPE"], #classTypeSpec);
-			}
-		}
-	;
-
-// A builtin type specification is a builtin type with possible brackets
-// afterwards (which would make it an array type).
-builtInTypeSpec[boolean addImagNode]
-	:	builtInType (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-		{
-			if ( addImagNode ) {
-				#builtInTypeSpec = #(#[TYPE,"TYPE"], #builtInTypeSpec);
-			}
-		}
-	;
-
-// A type name. which is either a (possibly qualified) class name or
-//   a primitive (builtin) type
-type
-	:	identifier
-	|	builtInType
-	;
-
-// The primitive types.
-builtInType
-	:	"void"
-	|	"boolean"
-	|	"byte"
-	|	"char"
-	|	"short"
-	|	"int"
-	|	"float"
-	|	"long"
-	|	"double"
-	;
-
-// A (possibly-qualified) java identifier.  We start with the first IDENT
-//   and expand its name by adding dots and following IDENTS
-identifier
-	:	IDENT  ( DOT^ IDENT )*
-	;
-
-identifierStar
-	:	IDENT
-		( DOT^ IDENT )*
-		( DOT^ STAR  )?
-	;
-
-// A list of zero or more modifiers.  We could have used (modifier)* in
-//   place of a call to modifiers, but I thought it was a good idea to keep
-//   this rule separate so they can easily be collected in a Vector if
-//   someone so desires
-modifiers
-	:	( modifier )*
-		{#modifiers = #([MODIFIERS, "MODIFIERS"], #modifiers);}
-	;
-
-// modifiers for Java classes, interfaces, class/instance vars and methods
-modifier
-	:	"private"
-	|	"public"
-	|	"protected"
-	|	"static"
-	|	"transient"
-	|	"final"
-	|	"abstract"
-	|	"native"
-	|	"threadsafe"
-	|	"synchronized"
-//	|	"const"			// reserved word, but not valid
-	|	"volatile"
-	|	"strictfp"
-	;
-
-// Definition of a Java class
-classDefinition![AST modifiers]
-	:	"class" IDENT
-		// it _might_ have a superclass...
-		sc:superClassClause
-		// it might implement some interfaces...
-		ic:implementsClause
-		// now parse the body of the class
-		cb:classBlock
-		{#classDefinition = #(#[CLASS_DEF,"CLASS_DEF"],
-							   modifiers,IDENT,sc,ic,cb);}
-	;
-
-superClassClause!
-	:	( "extends" id:identifier )?
-		{#superClassClause = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],id);}
-	;
-
-// Definition of a Java Interface
-interfaceDefinition![AST modifiers]
-	:	"interface" IDENT
-		// it might extend some other interfaces
-		ie:interfaceExtends
-		// now parse the body of the interface (looks like a class...)
-		cb:classBlock
-		{#interfaceDefinition = #(#[INTERFACE_DEF,"INTERFACE_DEF"],
-									modifiers,IDENT,ie,cb);}
-	;
-
-
-// This is the body of a class.  You can have fields and extra semicolons,
-// That's about it (until you see what a field is...)
-classBlock
-	:	LCURLY!
-			( field | SEMI! )*
-		RCURLY!
-		{#classBlock = #([OBJBLOCK, "OBJBLOCK"], #classBlock);}
-	;
-
-// An interface can extend several other interfaces...
-interfaceExtends
-	:	(
-		e:"extends"!
-		identifier ( COMMA! identifier )*
-		)?
-		{#interfaceExtends = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],
-							#interfaceExtends);}
-	;
-
-// A class can implement several interfaces...
-implementsClause
-	:	(
-			i:"implements"! identifier ( COMMA! identifier )*
-		)?
-		{#implementsClause = #(#[IMPLEMENTS_CLAUSE,"IMPLEMENTS_CLAUSE"],
-								 #implementsClause);}
-	;
-
-// Now the various things that can be defined inside a class or interface...
-// Note that not all of these are really valid in an interface (constructors,
-//   for example), and if this grammar were used for a compiler there would
-//   need to be some semantic checks to make sure we're doing the right thing...
-field!
-	:	// method, constructor, or variable declaration
-		mods:modifiers
-		(	h:ctorHead s:constructorBody // constructor
-			{#field = #(#[CTOR_DEF,"CTOR_DEF"], mods, h, s);}
-
-		|	cd:classDefinition[#mods]       // inner class
-			{#field = #cd;}
-
-		|	id:interfaceDefinition[#mods]   // inner interface
-			{#field = #id;}
-
-		|	t:typeSpec[false]  // method or variable declaration(s)
-			(	IDENT  // the name of the method
-
-				// parse the formal parameter declarations.
-				LPAREN! param:parameterDeclarationList RPAREN!
-
-				rt:declaratorBrackets[#t]
-
-				// get the list of exceptions that this method is
-				// declared to throw
-				(tc:throwsClause)?
-
-				( s2:compoundStatement | SEMI )
-				{#field = #(#[METHOD_DEF,"METHOD_DEF"],
-						     mods,
-							 #(#[TYPE,"TYPE"],rt),
-							 IDENT,
-							 param,
-							 tc,
-							 s2);}
-			|	v:variableDefinitions[#mods,#t] SEMI
-//				{#field = #(#[VARIABLE_DEF,"VARIABLE_DEF"], v);}
-				{#field = #v;}
-			)
-		)
-
-    // "static { ... }" class initializer
-	|	"static" s3:compoundStatement
-		{#field = #(#[STATIC_INIT,"STATIC_INIT"], s3);}
-
-    // "{ ... }" instance initializer
-	|	s4:compoundStatement
-		{#field = #(#[INSTANCE_INIT,"INSTANCE_INIT"], s4);}
-	;
-
-constructorBody
-    :   lc:LCURLY^ {#lc.setType(SLIST);}
-            ( options { greedy=true; } : explicitConstructorInvocation)?
-            (statement)*
-        RCURLY!
-    ;
-
-/** Catch obvious constructor calls, but not the expr.super(...) calls */
-explicitConstructorInvocation
-    :   "this"! lp1:LPAREN^ argList RPAREN! SEMI!
-		{#lp1.setType(CTOR_CALL);}
-    |   "super"! lp2:LPAREN^ argList RPAREN! SEMI!
-		{#lp2.setType(SUPER_CTOR_CALL);}
-    ;
-
-variableDefinitions[AST mods, AST t]
-	:	variableDeclarator[getASTFactory().dupTree(mods),
-						   getASTFactory().dupTree(t)]
-		(	COMMA!
-			variableDeclarator[getASTFactory().dupTree(mods),
-							   getASTFactory().dupTree(t)]
-		)*
-	;
-
-/** Declaration of a variable.  This can be a class/instance variable,
- *   or a local variable in a method
- * It can also include possible initialization.
- */
-variableDeclarator![AST mods, AST t]
-	:	id:IDENT d:declaratorBrackets[t] v:varInitializer
-		{#variableDeclarator = #(#[VARIABLE_DEF,"VARIABLE_DEF"], mods, #(#[TYPE,"TYPE"],d), id, v);}
-	;
-
-declaratorBrackets[AST typ]
-	:	{#declaratorBrackets=typ;}
-		(lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-	;
-
-varInitializer
-	:	( ASSIGN^ initializer )?
-	;
-
-// This is an initializer used to set up an array.
-arrayInitializer
-	:	lc:LCURLY^ {#lc.setType(ARRAY_INIT);}
-			(	initializer
-				(
-					// CONFLICT: does a COMMA after an initializer start a new
-					//           initializer or start the option ',' at end?
-					//           ANTLR generates proper code by matching
-					//			 the comma as soon as possible.
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:
-					COMMA! initializer
-				)*
-				(COMMA!)?
-			)?
-		RCURLY!
-	;
-
-
-// The two "things" that can initialize an array element are an expression
-//   and another (nested) array initializer.
-initializer
-	:	expression
-	|	arrayInitializer
-	;
-
-// This is the header of a method.  It includes the name and parameters
-//   for the method.
-//   This also watches for a list of exception classes in a "throws" clause.
-ctorHead
-	:	IDENT  // the name of the method
-
-		// parse the formal parameter declarations.
-		LPAREN! parameterDeclarationList RPAREN!
-
-		// get the list of exceptions that this method is declared to throw
-		(throwsClause)?
-	;
-
-// This is a list of exception classes that the method is declared to throw
-throwsClause
-	:	"throws"^ identifier ( COMMA! identifier )*
-	;
-
-
-// A list of formal parameters
-parameterDeclarationList
-	:	( parameterDeclaration ( COMMA! parameterDeclaration )* )?
-		{#parameterDeclarationList = #(#[PARAMETERS,"PARAMETERS"],
-									#parameterDeclarationList);}
-	;
-
-// A formal parameter.
-parameterDeclaration!
-	:	pm:parameterModifier t:typeSpec[false] id:IDENT
-		pd:declaratorBrackets[#t]
-		{#parameterDeclaration = #(#[PARAMETER_DEF,"PARAMETER_DEF"],
-									pm, #([TYPE,"TYPE"],pd), id);}
-	;
-
-parameterModifier
-	:	(f:"final")?
-		{#parameterModifier = #(#[MODIFIERS,"MODIFIERS"], f);}
-	;
-
-// Compound statement.  This is used in many contexts:
-//   Inside a class definition prefixed with "static":
-//      it is a class initializer
-//   Inside a class definition without "static":
-//      it is an instance initializer
-//   As the body of a method
-//   As a completely indepdent braced block of code inside a method
-//      it starts a new scope for variable definitions
-
-compoundStatement
-	:	lc:LCURLY^ {#lc.setType(SLIST);}
-			// include the (possibly-empty) list of statements
-			(statement)*
-		RCURLY!
-	;
-
-
-statement
-	// A list of statements in curly braces -- start a new scope!
-	:	compoundStatement
-
-	// declarations are ambiguous with "ID DOT" relative to expression
-	// statements.  Must backtrack to be sure.  Could use a semantic
-	// predicate to test symbol table to see what the type was coming
-	// up, but that's pretty hard without a symbol table ;)
-	|	(declaration)=> declaration SEMI!
-
-	// An expression statement.  This could be a method call,
-	// assignment statement, or any other expression evaluated for
-	// side-effects.
-	|	expression SEMI!
-
-	// class definition
-	|	m:modifiers! classDefinition[#m]
-
-	// Attach a label to the front of a statement
-	|	IDENT c:COLON^ {#c.setType(LABELED_STAT);} statement
-
-	// If-else statement
-	|	"if"^ LPAREN! expression RPAREN! statement
-		(
-			// CONFLICT: the old "dangling-else" problem...
-			//           ANTLR generates proper code matching
-			//			 as soon as possible.  Hush warning.
-			options {
-				warnWhenFollowAmbig = false;
-			}
-		:
-			"else"! statement
-		)?
-
-	// For statement
-	|	"for"^
-			LPAREN!
-				forInit SEMI!   // initializer
-				forCond	SEMI!   // condition test
-				forIter         // updater
-			RPAREN!
-			statement                     // statement to loop over
-
-	// While statement
-	|	"while"^ LPAREN! expression RPAREN! statement
-
-	// do-while statement
-	|	"do"^ statement "while"! LPAREN! expression RPAREN! SEMI!
-
-	// get out of a loop (or switch)
-	|	"break"^ (IDENT)? SEMI!
-
-	// do next iteration of a loop
-	|	"continue"^ (IDENT)? SEMI!
-
-	// Return an expression
-	|	"return"^ (expression)? SEMI!
-
-	// switch/case statement
-	|	"switch"^ LPAREN! expression RPAREN! LCURLY!
-			( casesGroup )*
-		RCURLY!
-
-	// exception try-catch block
-	|	tryBlock
-
-	// throw an exception
-	|	"throw"^ expression SEMI!
-
-	// synchronize a statement
-	|	"synchronized"^ LPAREN! expression RPAREN! compoundStatement
-
-	// asserts (uncomment if you want 1.4 compatibility)
-	// |	"assert"^ expression ( COLON! expression )? SEMI!
-
-	// empty statement
-	|	s:SEMI {#s.setType(EMPTY_STAT);}
-	;
-
-casesGroup
-	:	(	// CONFLICT: to which case group do the statements bind?
-			//           ANTLR generates proper code: it groups the
-			//           many "case"/"default" labels together then
-			//           follows them with the statements
-			options {
-				greedy = true;
-			}
-			:
-			aCase
-		)+
-		caseSList
-		{#casesGroup = #([CASE_GROUP, "CASE_GROUP"], #casesGroup);}
-	;
-
-aCase
-	:	("case"^ expression | "default") COLON!
-	;
-
-caseSList
-	:	(statement)*
-		{#caseSList = #(#[SLIST,"SLIST"],#caseSList);}
-	;
-
-// The initializer for a for loop
-forInit
-		// if it looks like a declaration, it is
-	:	(	(declaration)=> declaration
-		// otherwise it could be an expression list...
-		|	expressionList
-		)?
-		{#forInit = #(#[FOR_INIT,"FOR_INIT"],#forInit);}
-	;
-
-forCond
-	:	(expression)?
-		{#forCond = #(#[FOR_CONDITION,"FOR_CONDITION"],#forCond);}
-	;
-
-forIter
-	:	(expressionList)?
-		{#forIter = #(#[FOR_ITERATOR,"FOR_ITERATOR"],#forIter);}
-	;
-
-// an exception handler try/catch block
-tryBlock
-	:	"try"^ compoundStatement
-		(handler)*
-		( finallyClause )?
-	;
-
-finallyClause
-	:	"finally"^ compoundStatement
-	;
-
-// an exception handler
-handler
-	:	"catch"^ LPAREN! parameterDeclaration RPAREN! compoundStatement
-	;
-
-
-// expressions
-// Note that most of these expressions follow the pattern
-//   thisLevelExpression :
-//       nextHigherPrecedenceExpression
-//           (OPERATOR nextHigherPrecedenceExpression)*
-// which is a standard recursive definition for a parsing an expression.
-// The operators in java have the following precedences:
-//    lowest  (13)  = *= /= %= += -= <<= >>= >>>= &= ^= |=
-//            (12)  ?:
-//            (11)  ||
-//            (10)  &&
-//            ( 9)  |
-//            ( 8)  ^
-//            ( 7)  &
-//            ( 6)  == !=
-//            ( 5)  < <= > >=
-//            ( 4)  << >>
-//            ( 3)  +(binary) -(binary)
-//            ( 2)  * / %
-//            ( 1)  ++ -- +(unary) -(unary)  ~  !  (type)
-//                  []   () (method call)  . (dot -- identifier qualification)
-//                  new   ()  (explicit parenthesis)
-//
-// the last two are not usually on a precedence chart; I put them in
-// to point out that new has a higher precedence than '.', so you
-// can validy use
-//     new Frame().show()
-//
-// Note that the above precedence levels map to the rules below...
-// Once you have a precedence chart, writing the appropriate rules as below
-//   is usually very straightfoward
-
-
-
-// the mother of all expressions
-expression
-	:	assignmentExpression
-		{#expression = #(#[EXPR,"EXPR"],#expression);}
-	;
-
-
-// This is a list of expressions.
-expressionList
-	:	expression (COMMA! expression)*
-		{#expressionList = #(#[ELIST,"ELIST"], expressionList);}
-	;
-
-
-// assignment expression (level 13)
-assignmentExpression
-	:	conditionalExpression
-		(	(	ASSIGN^
-            |   PLUS_ASSIGN^
-            |   MINUS_ASSIGN^
-            |   STAR_ASSIGN^
-            |   DIV_ASSIGN^
-            |   MOD_ASSIGN^
-            |   SR_ASSIGN^
-            |   BSR_ASSIGN^
-            |   SL_ASSIGN^
-            |   BAND_ASSIGN^
-            |   BXOR_ASSIGN^
-            |   BOR_ASSIGN^
-            )
-			assignmentExpression
-		)?
-	;
-
-
-// conditional test (level 12)
-conditionalExpression
-	:	logicalOrExpression
-		( QUESTION^ assignmentExpression COLON! conditionalExpression )?
-	;
-
-
-// logical or (||)  (level 11)
-logicalOrExpression
-	:	logicalAndExpression (LOR^ logicalAndExpression)*
-	;
-
-
-// logical and (&&)  (level 10)
-logicalAndExpression
-	:	inclusiveOrExpression (LAND^ inclusiveOrExpression)*
-	;
-
-
-// bitwise or non-short-circuiting or (|)  (level 9)
-inclusiveOrExpression
-	:	exclusiveOrExpression (BOR^ exclusiveOrExpression)*
-	;
-
-
-// exclusive or (^)  (level 8)
-exclusiveOrExpression
-	:	andExpression (BXOR^ andExpression)*
-	;
-
-
-// bitwise or non-short-circuiting and (&)  (level 7)
-andExpression
-	:	equalityExpression (BAND^ equalityExpression)*
-	;
-
-
-// equality/inequality (==/!=) (level 6)
-equalityExpression
-	:	relationalExpression ((NOT_EQUAL^ | EQUAL^) relationalExpression)*
-	;
-
-
-// boolean relational expressions (level 5)
-relationalExpression
-	:	shiftExpression
-		(	(	(	LT^
-				|	GT^
-				|	LE^
-				|	GE^
-				)
-				shiftExpression
-			)*
-		|	"instanceof"^ typeSpec[true]
-		)
-	;
-
-
-// bit shift expressions (level 4)
-shiftExpression
-	:	additiveExpression ((SL^ | SR^ | BSR^) additiveExpression)*
-	;
-
-
-// binary addition/subtraction (level 3)
-additiveExpression
-	:	multiplicativeExpression ((PLUS^ | MINUS^) multiplicativeExpression)*
-	;
-
-
-// multiplication/division/modulo (level 2)
-multiplicativeExpression
-	:	unaryExpression ((STAR^ | DIV^ | MOD^ ) unaryExpression)*
-	;
-
-unaryExpression
-	:	INC^ unaryExpression
-	|	DEC^ unaryExpression
-	|	MINUS^ {#MINUS.setType(UNARY_MINUS);} unaryExpression
-	|	PLUS^  {#PLUS.setType(UNARY_PLUS);} unaryExpression
-	|	unaryExpressionNotPlusMinus
-	;
-
-unaryExpressionNotPlusMinus
-	:	BNOT^ unaryExpression
-	|	LNOT^ unaryExpression
-
-		// use predicate to skip cases like: (int.class)
-    |   (LPAREN builtInTypeSpec[true] RPAREN) =>
-        lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN!
-        unaryExpression
-
-        // Have to backtrack to see if operator follows.  If no operator
-        // follows, it's a typecast.  No semantic checking needed to parse.
-        // if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)"
-    |	(LPAREN classTypeSpec[true] RPAREN unaryExpressionNotPlusMinus)=>
-        lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN!
-        unaryExpressionNotPlusMinus
-
-    |	postfixExpression
-	;
-
-// qualified names, array expressions, method invocation, post inc/dec
-postfixExpression
-	:
-    /*
-    "this"! lp1:LPAREN^ argList RPAREN!
-		{#lp1.setType(CTOR_CALL);}
-
-    |   "super"! lp2:LPAREN^ argList RPAREN!
-		{#lp2.setType(SUPER_CTOR_CALL);}
-    |
-    */
-        primaryExpression
-
-		(
-            /*
-            options {
-				// the use of postfixExpression in SUPER_CTOR_CALL adds DOT
-				// to the lookahead set, and gives loads of false non-det
-				// warnings.
-				// shut them off.
-				generateAmbigWarnings=false;
-			}
-		:	*/
-            DOT^ IDENT
-			(	lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-				argList
-				RPAREN!
-			)?
-		|	DOT^ "this"
-
-		|	DOT^ "super"
-            (   // (new Outer()).super()  (create enclosing instance)
-                lp3:LPAREN^ argList RPAREN!
-                {#lp3.setType(SUPER_CTOR_CALL);}
-			|   DOT^ IDENT
-                (	lps:LPAREN^ {#lps.setType(METHOD_CALL);}
-                    argList
-                    RPAREN!
-                )?
-            )
-		|	DOT^ newExpression
-		|	lb:LBRACK^ {#lb.setType(INDEX_OP);} expression RBRACK!
-		)*
-
-		(   // possibly add on a post-increment or post-decrement.
-            // allows INC/DEC on too much, but semantics can check
-			in:INC^ {#in.setType(POST_INC);}
-	 	|	de:DEC^ {#de.setType(POST_DEC);}
-		)?
- 	;
-
-// the basic element of an expression
-primaryExpression
-	:	identPrimary ( options {greedy=true;} : DOT^ "class" )?
-    |   constant
-	|	"true"
-	|	"false"
-	|	"null"
-    |   newExpression
-	|	"this"
-	|	"super"
-	|	LPAREN! assignmentExpression RPAREN!
-		// look for int.class and int[].class
-	|	builtInType
-		( lbt:LBRACK^ {#lbt.setType(ARRAY_DECLARATOR);} RBRACK! )*
-		DOT^ "class"
-	;
-
-/** Match a, a.b.c refs, a.b.c(...) refs, a.b.c[], a.b.c[].class,
- *  and a.b.c.class refs.  Also this(...) and super(...).  Match
- *  this or super.
- */
-identPrimary
-	:	IDENT
-		(
-            options {
-				// .ident could match here or in postfixExpression.
-				// We do want to match here.  Turn off warning.
-				greedy=true;
-			}
-		:	DOT^ IDENT
-		)*
-		(
-            options {
-				// ARRAY_DECLARATOR here conflicts with INDEX_OP in
-				// postfixExpression on LBRACK RBRACK.
-				// We want to match [] here, so greedy.  This overcomes
-                // limitation of linear approximate lookahead.
-				greedy=true;
-		    }
-		:   ( lp:LPAREN^ {#lp.setType(METHOD_CALL);} argList RPAREN! )
-		|	( options {greedy=true;} :
-              lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK!
-            )+
-		)?
-    ;
-
-/** object instantiation.
- *  Trees are built as illustrated by the following input/tree pairs:
- *
- *  new T()
- *
- *  new
- *   |
- *   T --  ELIST
- *           |
- *          arg1 -- arg2 -- .. -- argn
- *
- *  new int[]
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *
- *  new int[] {1,2}
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR -- ARRAY_INIT
- *                                  |
- *                                EXPR -- EXPR
- *                                  |      |
- *                                  1      2
- *
- *  new int[3]
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *                |
- *              EXPR
- *                |
- *                3
- *
- *  new int[1][2]
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *               |
- *         ARRAY_DECLARATOR -- EXPR
- *               |              |
- *             EXPR             1
- *               |
- *               2
- *
- */
-newExpression
-	:	"new"^ type
-		(	LPAREN! argList RPAREN! (classBlock)?
-
-			//java 1.1
-			// Note: This will allow bad constructs like
-			//    new int[4][][3] {exp,exp}.
-			//    There needs to be a semantic check here...
-			// to make sure:
-			//   a) [ expr ] and [ ] are not mixed
-			//   b) [ expr ] and an init are not used together
-
-		|	newArrayDeclarator (arrayInitializer)?
-		)
-	;
-
-argList
-	:	(	expressionList
-		|	/*nothing*/
-			{#argList = #[ELIST,"ELIST"];}
-		)
-	;
-
-newArrayDeclarator
-	:	(
-			// CONFLICT:
-			// newExpression is a primaryExpression which can be
-			// followed by an array index reference.  This is ok,
-			// as the generated code will stay in this loop as
-			// long as it sees an LBRACK (proper behavior)
-			options {
-				warnWhenFollowAmbig = false;
-			}
-		:
-			lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);}
-				(expression)?
-			RBRACK!
-		)+
-	;
-
-constant
-	:	NUM_INT
-	|	CHAR_LITERAL
-	|	STRING_LITERAL
-	|	NUM_FLOAT
-	|	NUM_LONG
-	|	NUM_DOUBLE
-	;
-
-
-//----------------------------------------------------------------------------
-// The Java scanner
-//----------------------------------------------------------------------------
-class JavaLexer extends Lexer;
-
-options {
-	exportVocab=Java;      // call the vocabulary "Java"
-	testLiterals=false;    // don't automatically test for literals
-	k=4;                   // four characters of lookahead
-	charVocabulary='\u0003'..'\u7FFE';
-	// without inlining some bitset tests, couldn't do unicode;
-	// I need to make ANTLR generate smaller bitsets; see
-	// bottom of JavaLexer.java
-	codeGenBitsetTestThreshold=20;
-}
-
-
-
-// OPERATORS
-QUESTION		:	'?'		;
-LPAREN			:	'('		;
-RPAREN			:	')'		;
-LBRACK			:	'['		;
-RBRACK			:	']'		;
-LCURLY			:	'{'		;
-RCURLY			:	'}'		;
-COLON			:	':'		;
-COMMA			:	','		;
-//DOT			:	'.'		;
-ASSIGN			:	'='		;
-EQUAL			:	"=="	;
-LNOT			:	'!'		;
-BNOT			:	'~'		;
-NOT_EQUAL		:	"!="	;
-DIV				:	'/'		;
-DIV_ASSIGN		:	"/="	;
-PLUS			:	'+'		;
-PLUS_ASSIGN		:	"+="	;
-INC				:	"++"	;
-MINUS			:	'-'		;
-MINUS_ASSIGN	:	"-="	;
-DEC				:	"--"	;
-STAR			:	'*'		;
-STAR_ASSIGN		:	"*="	;
-MOD				:	'%'		;
-MOD_ASSIGN		:	"%="	;
-SR				:	">>"	;
-SR_ASSIGN		:	">>="	;
-BSR				:	">>>"	;
-BSR_ASSIGN		:	">>>="	;
-GE				:	">="	;
-GT				:	">"		;
-SL				:	"<<"	;
-SL_ASSIGN		:	"<<="	;
-LE				:	"<="	;
-LT				:	'<'		;
-BXOR			:	'^'		;
-BXOR_ASSIGN		:	"^="	;
-BOR				:	'|'		;
-BOR_ASSIGN		:	"|="	;
-LOR				:	"||"	;
-BAND			:	'&'		;
-BAND_ASSIGN		:	"&="	;
-LAND			:	"&&"	;
-SEMI			:	';'		;
-
-
-// Whitespace -- ignored
-WS	:	(	' '
-		|	'\t'
-		|	'\f'
-			// handle newlines
-		|	(	options {generateAmbigWarnings=false;}
-			:	"\r\n"  // Evil DOS
-			|	'\r'    // Macintosh
-			|	'\n'    // Unix (the right way)
-			)
-			{ newline(); }
-		)+
-		{ _ttype = Token.SKIP; }
-	;
-
-// Single-line comments
-SL_COMMENT
-	:	"//"
-		(~('\n'|'\r'))* ('\n'|'\r'('\n')?)?
-		{$setType(Token.SKIP); newline();}
-	;
-
-// multiple-line comments
-ML_COMMENT
-	:	"/*"
-		(	/*	'\r' '\n' can be matched in one alternative or by matching
-				'\r' in one iteration and '\n' in another.  I am trying to
-				handle any flavor of newline that comes in, but the language
-				that allows both "\r\n" and "\r" and "\n" to all be valid
-				newline is ambiguous.  Consequently, the resulting grammar
-				must be ambiguous.  I'm shutting this warning off.
-			 */
-			options {
-				generateAmbigWarnings=false;
-			}
-		:
-			{ LA(2)!='/' }? '*'
-		|	'\r' '\n'		{newline();}
-		|	'\r'			{newline();}
-		|	'\n'			{newline();}
-		|	~('*'|'\n'|'\r')
-		)*
-		"*/"
-		{$setType(Token.SKIP);}
-	;
-
-
-// character literals
-CHAR_LITERAL
-	:	'\'' ( ESC | ~('\''|'\n'|'\r'|'\\') ) '\''
-	;
-
-// string literals
-STRING_LITERAL
-	:	'"' (ESC|~('"'|'\\'|'\n'|'\r'))* '"'
-	;
-
-
-// escape sequence -- note that this is protected; it can only be called
-//   from another lexer rule -- it will not ever directly return a token to
-//   the parser
-// There are various ambiguities hushed in this rule.  The optional
-// '0'...'9' digit matches should be matched here rather than letting
-// them go back to STRING_LITERAL to be matched.  ANTLR does the
-// right thing by matching immediately; hence, it's ok to shut off
-// the FOLLOW ambig warnings.
-protected
-ESC
-	:	'\\'
-		(	'n'
-		|	'r'
-		|	't'
-		|	'b'
-		|	'f'
-		|	'"'
-		|	'\''
-		|	'\\'
-		|	('u')+ HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
-		|	'0'..'3'
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	'0'..'7'
-				(
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:	'0'..'7'
-				)?
-			)?
-		|	'4'..'7'
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	'0'..'7'
-			)?
-		)
-	;
-
-
-// hexadecimal digit (again, note it's protected!)
-protected
-HEX_DIGIT
-	:	('0'..'9'|'A'..'F'|'a'..'f')
-	;
-
-
-// an identifier.  Note that testLiterals is set to true!  This means
-// that after we match the rule, we look in the literals table to see
-// if it's a literal or really an identifer
-IDENT
-	options {testLiterals=true;}
-	:	('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'$')*
-	;
-
-
-// a numeric literal
-NUM_INT
-	{boolean isDecimal=false; Token t=null;}
-    :   '.' {_ttype = DOT;}
-            (	('0'..'9')+ (EXPONENT)? (f1:FLOAT_SUFFIX {t=f1;})?
-                {
-				if (t != null && t.getText().toUpperCase().indexOf('F')>=0) {
-                	_ttype = NUM_FLOAT;
-				}
-				else {
-                	_ttype = NUM_DOUBLE; // assume double
-				}
-				}
-            )?
-
-	|	(	'0' {isDecimal = true;} // special case for just '0'
-			(	('x'|'X')
-				(											// hex
-					// the 'e'|'E' and float suffix stuff look
-					// like hex digits, hence the (...)+ doesn't
-					// know when to stop: ambig.  ANTLR resolves
-					// it correctly by matching immediately.  It
-					// is therefor ok to hush warning.
-					options {
-						warnWhenFollowAmbig=false;
-					}
-				:	HEX_DIGIT
-				)+
-
-			|	//float or double with leading zero
-				(('0'..'9')+ ('.'|EXPONENT|FLOAT_SUFFIX)) => ('0'..'9')+
-
-			|	('0'..'7')+									// octal
-			)?
-		|	('1'..'9') ('0'..'9')*  {isDecimal=true;}		// non-zero decimal
-		)
-		(	('l'|'L') { _ttype = NUM_LONG; }
-
-		// only check to see if it's a float if looks like decimal so far
-		|	{isDecimal}?
-            (   '.' ('0'..'9')* (EXPONENT)? (f2:FLOAT_SUFFIX {t=f2;})?
-            |   EXPONENT (f3:FLOAT_SUFFIX {t=f3;})?
-            |   f4:FLOAT_SUFFIX {t=f4;}
-            )
-            {
-			if (t != null && t.getText().toUpperCase() .indexOf('F') >= 0) {
-                _ttype = NUM_FLOAT;
-			}
-            else {
-	           	_ttype = NUM_DOUBLE; // assume double
-			}
-			}
-        )?
-	;
-
-
-// a couple protected methods to assist in matching floating point numbers
-protected
-EXPONENT
-	:	('e'|'E') ('+'|'-')? ('0'..'9')+
-	;
-
-
-protected
-FLOAT_SUFFIX
-	:	'f'|'F'|'d'|'D'
-	;
-
-
diff --git a/groovy/jsr/ideas/parsers/antlr/misc/make-antlr-runtime.sh b/groovy/jsr/ideas/parsers/antlr/misc/make-antlr-runtime.sh
deleted file mode 100644
index 76409ab..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/make-antlr-runtime.sh
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-#
-# script to make a runtime jar out of antlr distro
-#
-# usage:  make-antlr-runtime.sh
-# (when executed in a directory containing the antlr-2.x.x.jar
-# (pops result in antlr-runtime.jar)
-#
-# @author "Jeremy Rayner"<groovy@ross-rayner.com>
-# Thanks to Christopher Schultz
-
-jar xvf antlr-2.7.5.jar
-
-mkdir antlr-runtime
-mkdir antlr-runtime/antlr
-mkdir antlr-runtime/antlr/collections
-mkdir antlr-runtime/antlr/collections/impl
-mkdir antlr-runtime/antlr/debug
-mkdir antlr-runtime/antlr/debug/misc
-
-cp antlr/ANTLRException.class antlr-runtime/antlr
-cp antlr/ANTLRHashString.class antlr-runtime/antlr
-cp antlr/ANTLRStringBuffer.class antlr-runtime/antlr
-cp antlr/ASTFactory.class antlr-runtime/antlr
-cp antlr/ASTPair.class antlr-runtime/antlr
-cp antlr/BaseAST.class antlr-runtime/antlr
-cp antlr/ByteBuffer.class antlr-runtime/antlr
-cp antlr/CharBuffer.class antlr-runtime/antlr
-cp antlr/CharFormatter.class antlr-runtime/antlr
-cp antlr/CharQueue.class antlr-runtime/antlr
-cp antlr/CharScanner.class antlr-runtime/antlr
-cp antlr/CharStreamException.class antlr-runtime/antlr
-cp antlr/CharStreamIOException.class antlr-runtime/antlr
-cp antlr/CommonAST.class antlr-runtime/antlr
-cp antlr/CommonToken.class antlr-runtime/antlr
-cp antlr/InputBuffer.class antlr-runtime/antlr
-cp antlr/LLkParser.class antlr-runtime/antlr
-cp antlr/LexerSharedInputState.class antlr-runtime/antlr
-cp antlr/MismatchedCharException.class antlr-runtime/antlr
-cp antlr/MismatchedTokenException.class antlr-runtime/antlr
-cp antlr/NoViableAltException.class antlr-runtime/antlr
-cp antlr/NoViableAltForCharException.class antlr-runtime/antlr
-cp antlr/ParserSharedInputState.class antlr-runtime/antlr
-cp antlr/Parser.class antlr-runtime/antlr
-cp antlr/RecognitionException.class antlr-runtime/antlr
-cp antlr/SemanticException.class antlr-runtime/antlr
-cp antlr/StringUtils.class antlr-runtime/antlr
-cp antlr/TokenBuffer.class antlr-runtime/antlr
-cp antlr/TokenQueue.class antlr-runtime/antlr
-cp antlr/TokenStreamException.class antlr-runtime/antlr
-cp antlr/TokenStreamIOException.class antlr-runtime/antlr
-cp antlr/TokenStreamRecognitionException.class antlr-runtime/antlr
-cp antlr/TokenStream.class antlr-runtime/antlr
-cp antlr/Token.class antlr-runtime/antlr
-cp antlr/collections/ASTEnumeration.class antlr-runtime/antlr/collections
-cp antlr/collections/AST.class antlr-runtime/antlr/collections
-cp antlr/collections/impl/ASTArray.class antlr-runtime/antlr/collections/impl
-cp antlr/collections/impl/BitSet.class antlr-runtime/antlr/collections/impl
-cp antlr/collections/impl/IntRange.class antlr-runtime/antlr/collections/impl
-cp antlr/collections/impl/Vector.class antlr-runtime/antlr/collections/impl
-cp antlr/debug/misc/ASTFrame\$1.class antlr-runtime/antlr/debug/misc
-cp antlr/debug/misc/ASTFrame\$MyTreeSelectionListener.class antlr-runtime/antlr/debug/misc
-cp antlr/debug/misc/ASTFrame.class antlr-runtime/antlr/debug/misc
-cp antlr/debug/misc/JTreeASTModel.class antlr-runtime/antlr/debug/misc
-cp antlr/debug/misc/JTreeASTPanel.class antlr-runtime/antlr/debug/misc
-
-cd antlr-runtime
-jar cvf ../antlr-runtime.jar antlr
-cd ..
diff --git a/groovy/jsr/ideas/parsers/antlr/misc/studmanPlusGroovy.g b/groovy/jsr/ideas/parsers/antlr/misc/studmanPlusGroovy.g
deleted file mode 100644
index 1fcdad6..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/studmanPlusGroovy.g
+++ /dev/null
@@ -1,3030 +0,0 @@
-header {
-package org.codehaus.groovy.antlr;
-import java.util.ArrayList;
-	import java.io.InputStream;
-	import java.io.Reader;
-	import antlr.InputBuffer;
-	import antlr.LexerSharedInputState;
-}
- 
-/** JSR-241 Groovy Recognizer
- *
- * Run 'java Main [-showtree] directory-full-of-groovy-files'
- *
- * [The -showtree option pops up a Swing frame that shows
- *  the AST constructed from the parser.]
- *
- * Contributing authors:
- *		John Mitchell		johnm@non.net
- *		Terence Parr		parrt@magelang.com
- *		John Lilley		jlilley@empathy.com
- *		Scott Stanchfield	thetick@magelang.com
- *		Markus Mohnen		mohnen@informatik.rwth-aachen.de
- *		Peter Williams		pete.williams@sun.com
- *		Allan Jacobs		Allan.Jacobs@eng.sun.com
- *		Steve Messick		messick@redhills.com
- *		John Pybus		john@pybus.org
- *		John Rose		rose00@mac.com
- *		Jeremy Rayner		groovy@ross-rayner.com
- *
- * Version 1.00 December 9, 1997 -- initial release
- * Version 1.01 December 10, 1997
- *		fixed bug in octal def (0..7 not 0..8)
- * Version 1.10 August 1998 (parrt)
- *		added tree construction
- *		fixed definition of WS,comments for mac,pc,unix newlines
- *		added unary plus
- * Version 1.11 (Nov 20, 1998)
- *		Added "shutup" option to turn off last ambig warning.
- *		Fixed inner class def to allow named class defs as statements
- *		synchronized requires compound not simple statement
- *		add [] after builtInType DOT class in primaryExpression
- *		"const" is reserved but not valid..removed from modifiers
- * Version 1.12 (Feb 2, 1999)
- *		Changed LITERAL_xxx to xxx in tree grammar.
- *		Updated java.g to use tokens {...} now for 2.6.0 (new feature).
- *
- * Version 1.13 (Apr 23, 1999)
- *		Didn't have (stat)? for else clause in tree parser.
- *		Didn't gen ASTs for interface extends.  Updated tree parser too.
- *		Updated to 2.6.0.
- * Version 1.14 (Jun 20, 1999)
- *		Allowed final/abstract on local classes.
- *		Removed local interfaces from methods
- *		Put instanceof precedence where it belongs...in relationalExpr
- *			It also had expr not type as arg; fixed it.
- *		Missing ! on SEMI in classBlock
- *		fixed: (expr) + "string" was parsed incorrectly (+ as unary plus).
- *		fixed: didn't like Object[].class in parser or tree parser
- * Version 1.15 (Jun 26, 1999)
- *		Screwed up rule with instanceof in it. :(  Fixed.
- *		Tree parser didn't like (expr).something; fixed.
- *		Allowed multiple inheritance in tree grammar. oops.
- * Version 1.16 (August 22, 1999)
- *		Extending an interface built a wacky tree: had extra EXTENDS.
- *		Tree grammar didn't allow multiple superinterfaces.
- *		Tree grammar didn't allow empty var initializer: {}
- * Version 1.17 (October 12, 1999)
- *		ESC lexer rule allowed 399 max not 377 max.
- *		java.tree.g didn't handle the expression of synchronized
- *		statements.
- * Version 1.18 (August 12, 2001)
- *	  	Terence updated to Java 2 Version 1.3 by
- *		observing/combining work of Allan Jacobs and Steve
- *		Messick.  Handles 1.3 src.  Summary:
- *		o  primary didn't include boolean.class kind of thing
- *	  	o  constructor calls parsed explicitly now:
- * 		   see explicitConstructorInvocation
- *		o  add strictfp modifier
- *	  	o  missing objBlock after new expression in tree grammar
- *		o  merged local class definition alternatives, moved after declaration
- *		o  fixed problem with ClassName.super.field
- *	  	o  reordered some alternatives to make things more efficient
- *		o  long and double constants were not differentiated from int/float
- *		o  whitespace rule was inefficient: matched only one char
- *		o  add an examples directory with some nasty 1.3 cases
- *		o  made Main.java use buffered IO and a Reader for Unicode support
- *		o  supports UNICODE?
- *		   Using Unicode charVocabulay makes code file big, but only
- *		   in the bitsets at the end. I need to make ANTLR generate
- *		   unicode bitsets more efficiently.
- * Version 1.19 (April 25, 2002)
- *		Terence added in nice fixes by John Pybus concerning floating
- *		constants and problems with super() calls.  John did a nice
- *		reorg of the primary/postfix expression stuff to read better
- *		and makes f.g.super() parse properly (it was METHOD_CALL not
- *		a SUPER_CTOR_CALL).  Also:
- *
- *		o  "finally" clause was a root...made it a child of "try"
- *		o  Added stuff for asserts too for Java 1.4, but *commented out*
- *		   as it is not backward compatible.
- *
- * Version 1.20 (October 27, 2002)
- *
- *	  Terence ended up reorging John Pybus' stuff to
- *	  remove some nondeterminisms and some syntactic predicates.
- *	  Note that the grammar is stricter now; e.g., this(...) must
- *	be the first statement.
- *
- *	  Trinary ?: operator wasn't working as array name:
- *		  (isBig ? bigDigits : digits)[i];
- *
- *	  Checked parser/tree parser on source for
- *		  Resin-2.0.5, jive-2.1.1, jdk 1.3.1, Lucene, antlr 2.7.2a4,
- *		and the 110k-line jGuru server source.
- *
- * Version 1.21 (October 17, 2003)
- *  Fixed lots of problems including:
- *  Ray Waldin: add typeDefinition to interfaceBlock in java.tree.g
- *  He found a problem/fix with floating point that start with 0
- *  Ray also fixed problem that (int.class) was not recognized.
- *  Thorsten van Ellen noticed that \n are allowed incorrectly in strings.
- *  TJP fixed CHAR_LITERAL analogously.
- *
- * Version 1.21.2 (March, 2003)
- *	  Changes by Matt Quail to support generics (as per JDK1.5/JSR14)
- *	  Notes:
- *	  o We only allow the "extends" keyword and not the "implements"
- *		keyword, since thats what JSR14 seems to imply.
- *	  o Thanks to Monty Zukowski for his help on the antlr-interest
- *		mail list.
- *	  o Thanks to Alan Eliasen for testing the grammar over his
- *		Fink source base
- *
- * Version 1.22 (July, 2004)
- *	  Changes by Michael Studman to support Java 1.5 language extensions
- *	  Notes:
- *	  o Added support for annotations types
- *	  o Finished off Matt Quail's generics enhancements to support bound type arguments
- *	  o Added support for new for statement syntax
- *	  o Added support for static import syntax
- *	  o Added support for enum types
- *	  o Tested against JDK 1.5 source base and source base of jdigraph project
- *	  o Thanks to Matt Quail for doing the hard part by doing most of the generics work
- *
- * Version 1.22.1 (July 28, 2004)
- *	  Bug/omission fixes for Java 1.5 language support
- *	  o Fixed tree structure bug with classOrInterface - thanks to Pieter Vangorpto for
- *		spotting this
- *	  o Fixed bug where incorrect handling of SR and BSR tokens would cause type
- *		parameters to be recognised as type arguments.
- *	  o Enabled type parameters on constructors, annotations on enum constants
- *		and package definitions
- *	  o Fixed problems when parsing if ((char.class.equals(c))) {} - solution by Matt Quail at Cenqua
- *
- * Version 1.22.2 (July 28, 2004)
- *	  Slight refactoring of Java 1.5 language support
- *	  o Refactored for/"foreach" productions so that original literal "for" literal
- *	    is still used but the for sub-clauses vary by token type
- *	  o Fixed bug where type parameter was not included in generic constructor's branch of AST
- *
- * Version 1.22.3 (August 26, 2004)
- *	  Bug fixes as identified by Michael Stahl; clean up of tabs/spaces
- *        and other refactorings
- *	  o Fixed typeParameters omission in identPrimary and newStatement
- *	  o Replaced GT reconcilliation code with simple semantic predicate
- *	  o Adapted enum/assert keyword checking support from Michael Stahl's java15 grammar
- *	  o Refactored typeDefinition production and field productions to reduce duplication
- *
- * Version 1.22.4 (October 21, 2004)
- *    Small bux fixes
- *    o Added typeArguments to explicitConstructorInvocation, e.g. new <String>MyParameterised()
- *    o Added typeArguments to postfixExpression productions for anonymous inner class super
- *      constructor invocation, e.g. new Outer().<String>super()
- *    o Fixed bug in array declarations identified by Geoff Roy
- *
- * Version 1.22.4.g.1
- *    o I have taken java.g for Java1.5 from Michael Studman (1.22.4)
- *      and have applied the groovy.diff from java.g (1.22) by John Rose
- *      back onto the new root (1.22.4) - Jeremy Rayner (Jan 2005)
- *    o for a map of the task see... 
- *      http://groovy.javanicus.com/java-g.png
- *
- * This grammar is in the PUBLIC DOMAIN
- */
-
-class GroovyRecognizer extends Parser;
-options {
-	k = 3;							// three token lookahead
-	exportVocab=Groovy;				// Call its vocabulary "Groovy"
-	codeGenMakeSwitchThreshold = 2;	// Some optimizations
-	codeGenBitsetTestThreshold = 3;
-	defaultErrorHandler = false;	// Don't generate parser error handlers
-	buildAST = true;
-}
-
-tokens {
-	BLOCK; MODIFIERS; OBJBLOCK; SLIST; METHOD_DEF; VARIABLE_DEF;
-	INSTANCE_INIT; STATIC_INIT; TYPE; CLASS_DEF; INTERFACE_DEF;
-	PACKAGE_DEF; EXTENDS_CLAUSE; IMPLEMENTS_CLAUSE;
-	PARAMETERS; PARAMETER_DEF; LABELED_STAT; TYPECAST; INDEX_OP;
-	POST_INC; POST_DEC; METHOD_CALL; EXPR;
-	IMPORT; UNARY_MINUS; UNARY_PLUS; CASE_GROUP; ELIST; FOR_INIT; FOR_CONDITION;
-	FOR_ITERATOR; EMPTY_STAT; FINAL="final"; ABSTRACT="abstract";
-UNUSED_GOTO="goto"; UNUSED_CONST="const"; UNUSED_DO="do";
-	STRICTFP="strictfp"; SUPER_CTOR_CALL; CTOR_CALL; CTOR_IDENT; VARIABLE_PARAMETER_DEF;
-STRING_CONSTRUCTOR; STRING_CTOR_MIDDLE;
-CLOSED_BLOCK; IMPLICIT_PARAMETERS; DEF="def";
-SELECT_SLOT; REFLECT_MEMBER; DYNAMIC_MEMBER;
-LABELED_ARG; SPREAD_ARG; OPTIONAL_ARG; SCOPE_ESCAPE;
-LIST_CONSTRUCTOR; MAP_CONSTRUCTOR;
-FOR_IN_ITERABLE; RANGE_EXCLUSIVE;
-	STATIC_IMPORT; ENUM_DEF; ENUM_CONSTANT_DEF; FOR_EACH_CLAUSE; ANNOTATION_DEF; ANNOTATIONS;
-	ANNOTATION; ANNOTATION_MEMBER_VALUE_PAIR; ANNOTATION_FIELD_DEF; ANNOTATION_ARRAY_INIT;
-	TYPE_ARGUMENTS; TYPE_ARGUMENT; TYPE_PARAMETERS; TYPE_PARAMETER; WILDCARD_TYPE;
-	TYPE_UPPER_BOUNDS; TYPE_LOWER_BOUNDS;
-}
-
-{
-	/** This factory is the correct way to wire together a Groovy parser and lexer. */
-	public static GroovyRecognizer make(GroovyLexer lexer) {
-		GroovyRecognizer parser = new GroovyRecognizer(lexer.plumb());
-		// TO DO: set up a common error-handling control block, to avoid excessive tangle between these guys
-		parser.lexer = lexer;
-		lexer.parser = parser;
-		return parser;
-	}
-	// Create a scanner that reads from the input stream passed to us...
-	public static GroovyRecognizer make(InputStream in) { return make(new GroovyLexer(in)); }
-	public static GroovyRecognizer make(Reader in) { return make(new GroovyLexer(in)); }
-	public static GroovyRecognizer make(InputBuffer in) { return make(new GroovyLexer(in)); }
-	public static GroovyRecognizer make(LexerSharedInputState in) { return make(new GroovyLexer(in)); }
-
-	GroovyLexer lexer;
-	public GroovyLexer getLexer() { return lexer; }
-	public void setFilename(String f) { super.setFilename(f); lexer.setFilename(f); }
-
-	// stuff to adjust ANTLR's tracing machinery
-    public static boolean tracing = false;  // only effective if antlr.Tool is run with -traceParser
-    public void traceIn(String rname) throws TokenStreamException {
-        if (!GroovyRecognizer.tracing)  return;
-        super.traceIn(rname);
-    }
-    public void traceOut(String rname) throws TokenStreamException {
-        if (!GroovyRecognizer.tracing)  return;
-        if (returnAST != null)  rname += returnAST.toStringList();
-        super.traceOut(rname);
-    }
-	
-	// Error handling.  This is a funnel through which parser errors go, when the parser can suggest a solution.
-	public void requireFailed(String problem, String solution) throws SemanticException {
-		// TO DO: Needs more work.
-		Token lt = null;
-		try { lt = LT(1); }
-		catch (TokenStreamException ee) { }
-		if (lt == null)  lt = Token.badToken;
-		throw new SemanticException(problem + ";\n   solution: " + solution,
-									getFilename(), lt.getLine(), lt.getColumn());
-	}
-	// Convenience method for checking of expected error syndromes.
-	private void require(boolean z, String problem, String solution) throws SemanticException {
-		if (!z)  requireFailed(problem, solution);
-	}
-
-	// Query a name token to see if it begins with a capital letter.
-	// This is used to tell the difference (w/o symbol table access) between {String x} and {println x}.
-	private boolean isUpperCase(Token x) {
-		if (x == null || x.getType() != IDENT)  return false;  // cannot happen?
-		String xtext = x.getText();
-		return (xtext.length() > 0 && Character.isUpperCase(xtext.charAt(0)));
-	}
-
-	private AST currentClass = null;  // current enclosing class (for constructor recognition)
-	// Query a name token to see if it is identical with the current class name.
-	// This is used to distinguish constructors from other methods.
-	private boolean isConstructorIdent(Token x) {
-		if (currentClass == null)  return false;
-		if (currentClass.getType() != IDENT)  return false;  // cannot happen?
-		String cname = currentClass.getText();
-
-		if (x == null || x.getType() != IDENT)  return false;  // cannot happen?
-		return cname.equals(x.getText());
-	}
-
-
-/**
-	 * Counts the number of LT seen in the typeArguments production.
-	 * It is used in semantic predicates to ensure we have seen
-	 * enough closing '>' characters; which actually may have been
-	 * either GT, SR or BSR tokens.
-	 */
-	private int ltCounter = 0;
-}
-
-// Compilation Unit: In Groovy, this is a single file or script. This is the start
-// rule for this parser
-compilationUnit
-	:	// A compilation unit starts with an optional package definition
-		(	(annotations "package")=> packageDefinition
-                // The main part of the script is a sequence of any number of statements.
-                // Semicolons and/or significant newlines serve as separators.
-                ( sep! (statement)? )*
-                EOF!
-		|   (statement)? ( sep! (statement)? )*
-            EOF!
-		)
-
-		// Next we have a series of zero or more import statements
-		// TODO REMOVE ( importDefinition )*
-
-		// Wrapping things up with any number of class or interface
-		// definitions
-		// TODO REMOVE ( typeDefinition )*
-
-		EOF!
-	;
-
-/** A Groovy script or simple expression.  Can be anything legal inside {...}. */
-snippetUnit
-    :       blockBody
-    ;
-
-
-// Package statement: optional annotations followed by "package" then the package identifier.
-packageDefinition
-	//TODO? options {defaultErrorHandler = true;} // let ANTLR handle errors
-	:	annotations p:"package"^ {#p.setType(PACKAGE_DEF);} identifier
-	;
-
-
-// Import statement: import followed by a package or class name
-importStatement
-	//TODO? options {defaultErrorHandler = true;}
-	{ boolean isStatic = false; }
-	:	i:"import"^ {#i.setType(IMPORT);} ( "static"! {#i.setType(STATIC_IMPORT);} )? identifierStar
-	;
-
-// TODO REMOVE
-// A type definition is either a class, interface, enum or annotation with possible additional semis.
-//typeDefinition
-//	options {defaultErrorHandler = true;}
-//	:	m:modifiers!
-//		typeDefinitionInternal[#m]
-//	|	SEMI!
-//	;
-
-// Added this production, even though 'typeDefinition' seems to be obsolete,
-// as this is referenced by many other parts of the grammar.
-// Protected type definitions production for reuse in other productions
-protected typeDefinitionInternal[AST mods]
-	:	cd:classDefinition[#mods]		// inner class
-	  {#typeDefinitionInternal = #cd;}
-	|	id:interfaceDefinition[#mods]	// inner interface
-	  {#typeDefinitionInternal = #id;}
-	|	ed:enumDefinition[#mods]		// inner enum
-	  {#typeDefinitionInternal = #ed;}
-	|	ad:annotationDefinition[#mods]	// inner annotation
-	  {#typeDefinitionInternal = #ad;}
-	;
-
-/** A declaration is the creation of a reference or primitive-type variable,
- *  or (if arguments are present) of a method.
- *  Generically, this is called a 'variable' definition, even in the case of a class field or method.
- *  It may start with the keyword "def" and/or modifiers.
- *  It may also start, more simply, with a capitalized type name.
- *  <p>
- *  AST effect: Create a separate Type/Var tree for each var in the var list.
- *  Must be guarded, as in (declarationStart) => declaration.
- */
-declaration!
-    :       DEF! nls!
-        (m:modifiers)? (t:typeSpec[false])? v:variableDefinitions[#m,#t]
-        {#declaration = #v;}
-    |   m2:modifiers   (t2:typeSpec[false])? v2:variableDefinitions[#m2,#t2]
-        {#declaration = #v2;}
-    |       t3:typeSpec[false] v3:variableDefinitions[null,#t3]
-        {#declaration = #v3;}
-    ;
-
-/** A declaration with one declarator and no initialization, like a parameterDeclaration. */
-
-/*TODO* Yes, and we must also audit the various occurrences of warning
-suppressions like "options { greedy = true; }".
-*/
-
-singleDeclarationNoInit!
-    :       DEF! nls!
-        (m:modifiers)? (t:typeSpec[false])?  v:singleVariable[#m,#t]
-        {#singleDeclarationNoInit = #v;}
-    |   m2:modifiers   (t2:typeSpec[false])? v2:singleVariable[#m2,#t2]
-        {#singleDeclarationNoInit = #v2;}
-    |       t3:typeSpec[false] v3:singleVariable[null,#t3]
-        {#singleDeclarationNoInit = #v3;}
-    ;
-
-singleDeclaration
-    :   sd:singleDeclarationNoInit!
-        { #singleDeclaration = #sd; }
-                varInitializer
-    ;
-
-/** Used only as a lookahead predicate, before diving in and parsing a declaration.
- *  A declaration can be unambiguously introduced with "def" or a modifier token like "final".
- *  It may also be introduced by a simple identifier whose first character is an uppercase letter,
- *  as in {String x}.  A declaration can also be introduced with a built in type like 'int' or 'void'.
- *  Brackets (array and generic) are allowed, as in {List[] x} or {int[][] y}.
- *  Anything else is parsed as a statement of some sort (expression or command).
- *  <p>
- *  (In the absence of explicit method-call parens, we assume a capitalized name is a type name.
- *  Yes, this is a little hacky.  Alternatives are to complicate the declaration or command
- *  syntaxes, or to have the parser query the symbol table.  Parse-time queries are evil.
- *  And we want both {String x} and {println x}.  So we need a syntactic razor-edge to slip
- *  between 'println' and 'String'.)
- *  
- *   *TODO* The declarationStart production needs to be strengthened to recognize
- *  things like {List<String> foo}.
- *  Right now it only knows how to skip square brackets after the type, not
- *  angle brackets.
- *  This probably turns out to be tricky because of >> vs. > >. ÊIf so,
- *  just put a TO DO comment in.
- *   
- */
-declarationStart!
-    :   DEF
-    |   modifier!
-    |   (   upperCaseIdent!
-        |   builtInType!
-        ) (LBRACK balancedTokens! RBRACK)* (IDENT | "it")
-    ;
-
-/** Used only as a lookahead predicate for nested type declarations. */
-
-/*TODO* The lookahead in typeDeclarationStart needs to skip annotations, not
-just stop at '@', because variable and method declarations can also be
-annotated.
-> typeDeclarationStart!
-> Ê Ê : Ê (modifier!)* ("class" | "interface" | "enum" | AT )
-S.B. something like
-> Ê Ê : Ê (modifier! | annotationTokens!)* ("class" | "interface" |
-> "enum" )
-(And maybe @interface, if Java 5 allows nested annotation types? ÊDon't
-know offhand.)
-Where annotationTokens can be a quick paren-skipper, as in other
-places: Ê'@' ident '(' balancedTokens ')'.
-*/
-
-typeDeclarationStart!
-    :   (modifier!)* ("class" | "interface" | "enum" | AT )
-    ;
-
-/** An IDENT token whose spelling is required to start with an uppercase letter.
- *  In the case of a simple statement {UpperID name} the identifier is taken to be a type name, not a command name.
- */
-upperCaseIdent
-    :   {isUpperCase(LT(1))}?
-                IDENT
-    ;
-
-// A type specification is a type name with possible brackets afterwards
-// (which would make it an array type).
-// Set addImagNode true for types inside expressions, not declarations.
-typeSpec[boolean addImagNode]
-	: classTypeSpec[addImagNode]
-	|	builtInTypeSpec[addImagNode]
-	;
-
-//TODO - URGENT - check that 'arrayOrTypeArgs' is ok instead of 'ARRAY_DECLARATOR'
-// also check that 'classOrInterfaceType[false]' is a suitable substitution for 'identifier'
-
-// A class type specification is a class type with either:
-// - possible brackets afterwards
-//   (which would make it an array type).
-// - generic type arguments after
-classTypeSpec[boolean addImagNode]
-	:	t:classOrInterfaceType[false]
-		(   ata:arrayOrTypeArgs[#t]  )?
-		{
-			if (#ata != null)  #classTypeSpec = #ata;
-			if ( addImagNode ) {
-				#classTypeSpec = #(#[TYPE,"TYPE"], #classTypeSpec);
-			}
-		}
-	;
-
-// A non-built in type name, with possible type parameters
-classOrInterfaceType[boolean addImagNode]
-	:	IDENT^ (typeArguments)?
-		(options{greedy=true;}: // match as many as possible
-			DOT^
-			IDENT (typeArguments)?
-		)*
-		{
-			if ( addImagNode ) {
-				#classOrInterfaceType = #(#[TYPE,"TYPE"], #classOrInterfaceType);
-			}
-		}
-	;
-
-// A specialised form of typeSpec where built in types must be arrays
-typeArgumentSpec
-	:	classTypeSpec[true]
-	|	builtInTypeArraySpec[true]
-	;
-
-// A generic type argument is a class type, a possibly bounded wildcard type or a built-in type array
-typeArgument
-	:	(	typeArgumentSpec
-		|	wildcardType
-		)
-		{#typeArgument = #(#[TYPE_ARGUMENT,"TYPE_ARGUMENT"], #typeArgument);}
-	;
-
-// Wildcard type indicating all types (with possible constraint)
-wildcardType
-	:	q:QUESTION^ {#q.setType(WILDCARD_TYPE);}
-		(("extends" | "super")=> typeArgumentBounds)?
-	;
-
-// Type arguments to a class or interface type
-typeArguments
-{int currentLtLevel = 0;}
-	:
-		{currentLtLevel = ltCounter;}
-		LT! {ltCounter++;}
-		typeArgument
-		(options{greedy=true;}: // match as many as possible
-			{inputState.guessing !=0 || ltCounter == currentLtLevel + 1}?
-			COMMA! typeArgument
-		)*
-
-		(	// turn warning off since Antlr generates the right code,
-			// plus we have our semantic predicate below
-			options{generateAmbigWarnings=false;}:
-			typeArgumentsOrParametersEnd
-		)?
-
-		// make sure we have gobbled up enough '>' characters
-		// if we are at the "top level" of nested typeArgument productions
-		{(currentLtLevel != 0) || ltCounter == currentLtLevel}?
-
-		{#typeArguments = #(#[TYPE_ARGUMENTS, "TYPE_ARGUMENTS"], #typeArguments);}
-	;
-
-// this gobbles up *some* amount of '>' characters, and counts how many
-// it gobbled.
-protected typeArgumentsOrParametersEnd
-	:	GT! {ltCounter-=1;}
-	|	SR! {ltCounter-=2;}
-	|	BSR! {ltCounter-=3;}
-	;
-
-// Restriction on wildcard types based on super class or derrived class
-typeArgumentBounds
-	{boolean isUpperBounds = false;}
-	:
-		( "extends"! {isUpperBounds=true;} | "super"! ) classOrInterfaceType[false]
-		{
-			if (isUpperBounds)
-			{
-				#typeArgumentBounds = #(#[TYPE_UPPER_BOUNDS,"TYPE_UPPER_BOUNDS"], #typeArgumentBounds);
-			}
-			else
-			{
-				#typeArgumentBounds = #(#[TYPE_LOWER_BOUNDS,"TYPE_LOWER_BOUNDS"], #typeArgumentBounds);
-			}
-		}
-	;
-
-//TODO - check that arrayOrTypeArgs is suitable here
-// A builtin type array specification is a builtin type with brackets afterwards
-builtInTypeArraySpec[boolean addImagNode]
-	:	t:builtInType
-		(   ata:arrayOrTypeArgs[#t]  )+
-		{
-			if (#ata != null)  #builtInTypeArraySpec = #ata;
-			if ( addImagNode ) {
-				#builtInTypeArraySpec = #(#[TYPE,"TYPE"], #builtInTypeArraySpec);
-			}
-		}
-	;
-
-//TODO - check that arrayOrTypeArgs is suitable here
-// A builtin type specification is a builtin type with possible brackets
-// afterwards (which would make it an array type).
-builtInTypeSpec[boolean addImagNode]
-	:	t:builtInType
-		(   ata:arrayOrTypeArgs[#t]  )*
-		{
-			if (#ata != null)  #builtInTypeSpec = #ata;
-			if ( addImagNode ) {
-				#builtInTypeSpec = #(#[TYPE,"TYPE"], #builtInTypeSpec);
-			}
-		}
-	;
-
-// A type name. which is either a (possibly qualified and parameterized)
-// class name or a primitive (builtin) type
-type
-	:	classOrInterfaceType[false]
-	|	builtInType
-	;
-
-// The primitive types.
-builtInType
-	:	"void"
-	|	"boolean"
-	|	"byte"
-	|	"char"
-	|	"short"
-	|	"int"
-	|	"float"
-	|	"long"
-	|	"double"
-    |   "any"
-    // PROPOSE:  Add "list", "map", "closure"??
-	;
-
-// A (possibly-qualified) java identifier. We start with the first IDENT
-// and expand its name by adding dots and following IDENTS
-identifier
-    :       IDENT
-        (   options { greedy = true; } :
-                        DOT^ nls! IDENT )*
-    ;
-
-identifierStar
-    :       IDENT
-        (   options { greedy = true; } :
-                        DOT^  nls! IDENT )*
-        (   DOT^  nls! STAR
-        |   "as"^ nls! IDENT
-        )?
-    ;
-
-// A list of zero or more modifiers. We could have used (modifier)* in
-// place of a call to modifiers, but I thought it was a good idea to keep
-// this rule separate so they can easily be collected in a Vector if
-// someone so desires
-modifiers
-	:
-		(
-			//hush warnings since the semantic check for "@interface" solves the non-determinism
-			options{generateAmbigWarnings=false;}:
-
-			modifier nls!
-			|
-			//Semantic check that we aren't matching @interface as this is not an annotation
-			//A nicer way to do this would be nice
-			{LA(1)==AT && !LT(2).getText().equals("interface")}? annotation nls!
-        )+
-
-		{#modifiers = #([MODIFIERS, "MODIFIERS"], #modifiers);}
-	;
-
-// modifiers for Java classes, interfaces, class/instance vars and methods
-modifier
-	:	"private"
-	|	"public"
-	|	"protected"
-	|	"static"
-	|	"transient"
-	|	"final"
-	|	"abstract"
-	|	"native"
-	|	"threadsafe"
-	|	"synchronized"
-	|	"volatile"
-	|	"strictfp"
-	;
-
-annotation!
-	:	AT! i:identifier ( LPAREN! ( args:annotationArguments )? RPAREN! )?
-		{#annotation = #(#[ANNOTATION,"ANNOTATION"], i, args);}
-	;
-
-annotations
-    :   (annotation nls!)*
-		{#annotations = #([ANNOTATIONS, "ANNOTATIONS"], #annotations);}
-    ;
-
-annotationArguments
-	:	annotationMemberValueInitializer | anntotationMemberValuePairs
-	;
-
-anntotationMemberValuePairs
-	:	annotationMemberValuePair ( COMMA! annotationMemberValuePair )*
-	;
-
-annotationMemberValuePair!
-	:	i:IDENT ASSIGN! v:annotationMemberValueInitializer
-		{#annotationMemberValuePair = #(#[ANNOTATION_MEMBER_VALUE_PAIR,"ANNOTATION_MEMBER_VALUE_PAIR"], i, v);}
-	;
-
-annotationMemberValueInitializer
-	:
-		conditionalExpression | annotation nls!| annotationMemberArrayInitializer
-	;
-
-// This is an initializer used to set up an annotation member array.
-annotationMemberArrayInitializer
-	:	lc:LCURLY^ {#lc.setType(ANNOTATION_ARRAY_INIT);}
-			(	annotationMemberArrayValueInitializer
-				(
-					// CONFLICT: does a COMMA after an initializer start a new
-					// initializer or start the option ',' at end?
-					// ANTLR generates proper code by matching
-					// the comma as soon as possible.
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:
-					COMMA! annotationMemberArrayValueInitializer
-				)*
-				(COMMA!)?
-			)?
-		RCURLY!
-	;
-
-// The two things that can initialize an annotation array element are a conditional expression
-// and an annotation (nested annotation array initialisers are not valid)
-annotationMemberArrayValueInitializer
-	:	conditionalExpression
-	|	annotation nls!
-	;
-
-superClassClause!
-	:	( "extends" c:classOrInterfaceType[false] )?
-		{#superClassClause = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],c);}
-	;
-
-// Definition of a Java class
-classDefinition![AST modifiers]
-        { AST prevCurrentClass = currentClass; }
-	:	"class" IDENT nls!
-        { currentClass = #IDENT; }
-		// it _might_ have type paramaters
-		(tp:typeParameters)?
-		// it _might_ have a superclass...
-		sc:superClassClause
-		// it might implement some interfaces...
-		ic:implementsClause
-		// now parse the body of the class
-		cb:classBlock
-		{#classDefinition = #(#[CLASS_DEF,"CLASS_DEF"],
-								modifiers,IDENT,tp,sc,ic,cb);}
-        { currentClass = prevCurrentClass; }
-	;
-
-//TODO - where has superClassClause! production gone???
-
-// Definition of a Java Interface
-interfaceDefinition![AST modifiers]
-	:	"interface" IDENT nls!
-		// it _might_ have type paramaters
-		(tp:typeParameters)?
-		// it might extend some other interfaces
-		ie:interfaceExtends
-		// now parse the body of the interface (looks like a class...)
-		ib:interfaceBlock
-		{#interfaceDefinition = #(#[INTERFACE_DEF,"INTERFACE_DEF"],
-									modifiers,IDENT,tp,ie,ib);}
-	;
-
-enumDefinition![AST modifiers]
-	:	"enum" IDENT
-		// it might implement some interfaces...
-		ic:implementsClause
-		// now parse the body of the enum
-		eb:enumBlock
-		{#enumDefinition = #(#[ENUM_DEF,"ENUM_DEF"],
-								modifiers,IDENT,ic,eb);}
-	;
-
-annotationDefinition![AST modifiers]
-	:	AT "interface" IDENT
-		// now parse the body of the annotation
-		ab:annotationBlock
-		{#annotationDefinition = #(#[ANNOTATION_DEF,"ANNOTATION_DEF"],
-									modifiers,IDENT,ab);}
-	;
-
-typeParameters
-{int currentLtLevel = 0;}
-	:
-		{currentLtLevel = ltCounter;}
-		LT! {ltCounter++;}
-		typeParameter (COMMA! typeParameter)*
-		(typeArgumentsOrParametersEnd)?
-
-		// make sure we have gobbled up enough '>' characters
-		// if we are at the "top level" of nested typeArgument productions
-		{(currentLtLevel != 0) || ltCounter == currentLtLevel}?
-
-		{#typeParameters = #(#[TYPE_PARAMETERS, "TYPE_PARAMETERS"], #typeParameters);}
-	;
-
-typeParameter
-	:
-		// I'm pretty sure Antlr generates the right thing here:
-		(id:IDENT) ( options{generateAmbigWarnings=false;}: typeParameterBounds )?
-		{#typeParameter = #(#[TYPE_PARAMETER,"TYPE_PARAMETER"], #typeParameter);}
-	;
-
-typeParameterBounds
-	:
-		"extends"! classOrInterfaceType[false]
-		(BAND! classOrInterfaceType[false])*
-		{#typeParameterBounds = #(#[TYPE_UPPER_BOUNDS,"TYPE_UPPER_BOUNDS"], #typeParameterBounds);}
-	;
-
-// This is the body of a class. You can have classFields and extra semicolons.
-classBlock
-	:	LCURLY!
-            ( classField )? ( sep! ( classField )? )*
-		RCURLY!
-		{#classBlock = #([OBJBLOCK, "OBJBLOCK"], #classBlock);}
-	;
-
-// This is the body of an interface. You can have interfaceField and extra semicolons.
-interfaceBlock
-	:	LCURLY!
-            ( interfaceField )? ( sep! ( interfaceField )? )*
-		RCURLY!
-		{#interfaceBlock = #([OBJBLOCK, "OBJBLOCK"], #interfaceBlock);}
-	;
-	
-// This is the body of an annotation. You can have annotation fields and extra semicolons,
-// That's about it (until you see what an annoation field is...)
-annotationBlock
-	:	LCURLY!
-            ( annotationField )? ( sep! ( annotationField )? )*
-		RCURLY!
-		{#annotationBlock = #([OBJBLOCK, "OBJBLOCK"], #annotationBlock);}
-	;
-
-// This is the body of an enum. You can have zero or more enum constants
-// followed by any number of fields like a regular class
-enumBlock
-	:	LCURLY!
-			( enumConstant ( options{greedy=true;}: COMMA! enumConstant )* ( COMMA! )? )?
-			( SEMI! ( classField | SEMI! )* )?
-		RCURLY!
-		{#enumBlock = #([OBJBLOCK, "OBJBLOCK"], #enumBlock);}
-	;
-
-// An annotation field
-annotationField!
-	:	mods:modifiers
-		(	td:typeDefinitionInternal[#mods]
-			{#annotationField = #td;}
-		|	t:typeSpec[false]		// annotation field
-			(	i:IDENT				// the name of the field
-
-				LPAREN! RPAREN!
-
-				/*OBS* rt:declaratorBrackets[#t] *OBS*/
-
-				( "default" amvi:annotationMemberValueInitializer )?
-
-				SEMI
-				{#annotationField =
-					#(#[ANNOTATION_FIELD_DEF,"ANNOTATION_FIELD_DEF"],
-						 mods,
-						 #(#[TYPE,"TYPE"],t),
-						 i,amvi
-						 );}
-			|	v:variableDefinitions[#mods,#t] SEMI	// variable
-				{#annotationField = #v;}
-			)
-		)
-	;
-
-//An enum constant may have optional parameters and may have a
-//a class body
-enumConstant!
-	:	an:annotations
-		i:IDENT
-		(	LPAREN!
-			a:argList
-			RPAREN!
-		)?
-		( b:enumConstantBlock )?
-		{#enumConstant = #([ENUM_CONSTANT_DEF, "ENUM_CONSTANT_DEF"], an, i, a, b);}
-	;
-
-//The class-like body of an enum constant
-enumConstantBlock
-	:	LCURLY!
-		( enumConstantField | SEMI! )*
-		RCURLY!
-		{#enumConstantBlock = #([OBJBLOCK, "OBJBLOCK"], #enumConstantBlock);}
-	;
-
-//An enum constant field is just like a class field but without
-//the posibility of a constructor definition or a static initializer
-
-// TODO - maybe allow 'declaration' production within this production, 
-// but how to disallow constructors and static initializers...
-enumConstantField!
-	:	mods:modifiers
-		(	td:typeDefinitionInternal[#mods]
-			{#enumConstantField = #td;}
-	|	// A generic method has the typeParameters before the return type.
-			// This is not allowed for variable definitions, but this production
-			// allows it, a semantic check could be used if you wanted.
-			(tp:typeParameters)? t:typeSpec[false]		// method or variable declaration(s)
-			(	IDENT									// the name of the method
-
-				// parse the formal parameter declarations.
-				LPAREN! param:parameterDeclarationList RPAREN!
-
-	/*OBS*			rt:declaratorBrackets[#t] *OBS*/
-
-				// get the list of exceptions that this method is
-				// declared to throw
-				(tc:throwsClause)?
-
-				( s2:compoundStatement | SEMI )
-			 // TODO - verify that 't' is useful/correct here, used to be 'rt'
-				{#enumConstantField = #(#[METHOD_DEF,"METHOD_DEF"],
-							 mods,
-							 tp,
-							 #(#[TYPE,"TYPE"],t),
-							 IDENT,
-							 param,
-							 tc,
-							 s2);}
-			
-			 |	v:variableDefinitions[#mods,#t] SEMI
-				{#enumConstantField = #v;}
-			)
-		)
-
-	// "{ ... }" instance initializer
-	|	s4:compoundStatement
-		{#enumConstantField = #(#[INSTANCE_INIT,"INSTANCE_INIT"], s4);}
-	;
-
-// An interface can extend several other interfaces...
-interfaceExtends
-	:	(
-		e:"extends"! nls!
-		classOrInterfaceType[false] ( COMMA! nls! classOrInterfaceType[false] )* nls!
-		)?
-		{#interfaceExtends = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],
-								#interfaceExtends);}
-	;
-
-// A class can implement several interfaces...
-implementsClause
-	:	(
-			i:"implements"! nls! classOrInterfaceType[false] ( COMMA! nls! classOrInterfaceType[false] )* nls!
-		)?
-		{#implementsClause = #(#[IMPLEMENTS_CLAUSE,"IMPLEMENTS_CLAUSE"],
-								 #implementsClause);}
-	;
-
-// Now the various things that can be defined inside a class
-classField!
-	:	// method, constructor, or variable declaration
-		(declarationStart)=>
-        d:declaration
-        {#classField = #d;}
-    |
-        //TODO - unify typeDeclaration and typeDefinitionInternal names
-        // type declaration
-        (typeDeclarationStart)=>
-        ( mods:modifiers )?
-		(	td:typeDefinitionInternal[#mods]
-			{#classField = #td;}
-		)
-
-	// "static { ... }" class initializer
-	|	"static" s3:compoundStatement
-		{#classField = #(#[STATIC_INIT,"STATIC_INIT"], s3);}
-
-	// "{ ... }" instance initializer
-	|	s4:compoundStatement
-		{#classField = #(#[INSTANCE_INIT,"INSTANCE_INIT"], s4);}
-	;
-
-// Now the various things that can be defined inside a interface
-interfaceField!
-	:	// method, constructor, or variable declaration
-        (declarationStart)=>
-        d:declaration
-        {#interfaceField = #d;}
-    |
-        //TODO - unify typeDeclaration and typeDefinitionInternal names
-        // type declaration
-        (typeDeclarationStart)=>
-        ( mods:modifiers )?
-
-		(	td:typeDefinitionInternal[#mods]
-			{#interfaceField = #td;}
-		)
-	;
-
-constructorBody
-	:	lc:LCURLY^ {#lc.setType(SLIST);} nls!
-        (   (explicitConstructorInvocation) =>   // Java compatibility hack
-                explicitConstructorInvocation (sep! blockBody)?
-            |   blockBody
-        )
-        RCURLY!
-    ;
-
-
-/** Catch obvious constructor calls, but not the expr.super(...) calls */
-explicitConstructorInvocation
-        {boolean zz; /*ignored*/ }
-	:	(typeArguments)?
-		(	"this"! lp1:LPAREN^ zz=argList RPAREN!
-			{#lp1.setType(CTOR_CALL);}
-		|	"super"! lp2:LPAREN^ zz=argList RPAREN!
-			{#lp2.setType(SUPER_CTOR_CALL);}
-		)
-	;
-
-/** The tail of a declaration.
-  * Either v1, v2, ... (with possible initializers) or else m(args){body}.
-  * The two arguments are the modifier list (if any) and the declaration head (if any).
-  * The declaration head is the variable type, or (for a method) the return type.
-  * If it is missing, then the variable type is taken from its initializer (if there is one).
-  * Otherwise, the variable type defaults to 'any'.
-  * DECIDE:  Method return types default to the type of the method body, as an expression.
-  */
-variableDefinitions[AST mods, AST t]
-    :       variableDeclarator[getASTFactory().dupTree(mods),
-                                                   getASTFactory().dupTree(t)]
-        (       COMMA! nls!
-                        variableDeclarator[getASTFactory().dupTree(mods),
-                                                           getASTFactory().dupTree(t)]
-        )*
-    |
-                // The parser allows a method definition anywhere a variable definition is accepted.
-
-        (   id:IDENT
-        |   qid:STRING_LITERAL          {#qid.setType(IDENT);}  // use for operator defintions, etc.
-        )
-
-                // parse the formal parameter declarations.
-                LPAREN! param:parameterDeclarationList! RPAREN!
-
-                /*OBS*rt:declaratorBrackets[#t]*/
-
-                // get the list of exceptions that this method is
-                // declared to throw
-        (       tc:throwsClause!  )?
-
-                // the method body is an open block
-                // but, it may have an optional constructor call (for constructors only)
-        (
-            {isConstructorIdent(id)}?
-            {#id.setType(CTOR_IDENT);}
-                        cb:constructorBody!
-        |       mb:openBlock!
-        |   /*or nothing at all*/
-        )
-        {   if (#cb != null)   #mb = #cb;
-                        if (#qid != null)  #id = #qid;
-                        #variableDefinitions =
-                                #(#[METHOD_DEF,"METHOD_DEF"],
-                                  mods, #(#[TYPE,"TYPE"],t), id, param, tc, mb);
-        }
-    ;
-
-
-/** Declaration of a variable. This can be a class/instance variable,
- *  or a local variable in a method
- *  It can also include possible initialization.
- */
-variableDeclarator![AST mods, AST t]
-    :
-                id:variableName
-                /*OBS*d:declaratorBrackets[t]*/
-                v:varInitializer
-        {#variableDeclarator = #(#[VARIABLE_DEF,"VARIABLE_DEF"], mods, #(#[TYPE,"TYPE"],t), id, v);}
-    ;
-
-/** Used in cases where a declaration cannot have commas, or ends with the "in" operator instead of '='. */
-singleVariable![AST mods, AST t]
-        :
-                id:variableName
-                {#singleVariable = #(#[VARIABLE_DEF,"VARIABLE_DEF"], mods, #(#[TYPE,"TYPE"],t), id);}
-        ;
-
-variableName
-        :   (IDENT | "it")
-        ;
-
-/*OBS*
-declaratorBrackets[AST typ]
-	:	{#declaratorBrackets=typ;}
-		(lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)*
-	;
-*OBS*/
-
-varInitializer
-	:	( ASSIGN^ nls! initializer )?
-	;
-
-/*OBS*
-// This is an initializer used to set up an array.
-arrayInitializer
-	:	lc:LCURLY^ {#lc.setType(ARRAY_INIT);}
-			(	initializer
-				(
-					// CONFLICT: does a COMMA after an initializer start a new
-					// initializer or start the option ',' at end?
-					// ANTLR generates proper code by matching
-					// the comma as soon as possible.
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:
-					COMMA! initializer
-				)*
-				(COMMA!)?
-			)?
-		RCURLY!
-	;
-*OBS*/
-
-// The two "things" that can initialize an array element are an expression
-// and another (nested) array initializer.
-initializer
-	:	expression
-/*OBS*  // Use [...] for initializing all sorts of sequences, including arrays.
-	|	arrayInitializer
-*OBS*/
-	;
-
-/*OBS???
-// This is the header of a method. It includes the name and parameters
-// for the method.
-// This also watches for a list of exception classes in a "throws" clause.
-ctorHead
-	:	IDENT // the name of the method
-
-		// parse the formal parameter declarations.
-		LPAREN! parameterDeclarationList RPAREN!
-
-		// get the list of exceptions that this method is declared to throw
-		(throwsClause)?
-	;
-*OBS*/
-
-// This is a list of exception classes that the method is declared to throw
-throwsClause
-	:	"throws"^ nls! identifier ( COMMA! nls! identifier )* nls!
-	;
-
-// A list of formal parameters
-//	 Zero or more parameters
-//	 If a parameter is variable length (e.g. String... myArg) it is the right-most parameter
-parameterDeclarationList
-	// The semantic check in ( .... )* block is flagged as superfluous, and seems superfluous but
-	// is the only way I could make this work. If my understanding is correct this is a known bug
-	:	(	( parameterDeclaration )=> parameterDeclaration
-			( options {warnWhenFollowAmbig=false;} : ( COMMA! nls! parameterDeclaration ) => COMMA! nls! parameterDeclaration )*
-			( COMMA! nls! variableLengthParameterDeclaration )?
-		|
-			variableLengthParameterDeclaration
-		)?
-		{#parameterDeclarationList = #(#[PARAMETERS,"PARAMETERS"],
-									#parameterDeclarationList);}
-	;
-
-// A formal parameter.
-parameterDeclaration!
-        :       ("def"!)?  // useless but permitted for symmetry
-                pm:parameterModifier ( options {greedy=true;} : t:typeSpec[false])? id:parameterIdent
-                /*OBS*pd:declaratorBrackets[#t]*/
-                {#parameterDeclaration = #(#[PARAMETER_DEF,"PARAMETER_DEF"],
-                                                                        pm, #([TYPE,"TYPE"],t), id);}
-        ;
-
-// TODO - possibly add nls! somewhere within variableLengthParameterDeclaration
-variableLengthParameterDeclaration!
-	:	pm:parameterModifier t:typeSpec[false] TRIPLE_DOT! id:IDENT
-		/*OBS* pd:declaratorBrackets[#t]*/
-		{#variableLengthParameterDeclaration = #(#[VARIABLE_PARAMETER_DEF,"VARIABLE_PARAMETER_DEF"],
-												pm, #([TYPE,"TYPE"],t), id);}
-	;
-
-parameterModifier
-	//final can appear amongst annotations in any order - greedily consume any preceding
-	//annotations to shut nond-eterminism warnings off
-	:	(options{greedy=true;} : annotation nls!)* (f:"final")? (annotation nls!)*
-		{#parameterModifier = #(#[MODIFIERS,"MODIFIERS"], #parameterModifier);}
-	;
-
-closureParameters
-        :   (closureParameter (COMMA! nls! closureParameter)* nls!)? BOR!
-                {#closureParameters = #(#[PARAMETERS,"PARAMETERS"], #closureParameters);}
-        |   LPAREN! parameterDeclarationList RPAREN! BOR!
-                // Yes, you can have a full parameter declaration list.
-                // Yes, you must parenthesize it (as for a named method) unless it's really, really simple.
-        ;
-
-closureParametersStart!
-        :   BOR
-        |       parameterIdent! nls! (BOR | COMMA)
-        |   LPAREN balancedTokens! RPAREN nls! BOR
-        ;
-
-/** Simple names, as in {x|...}, are completely equivalent to {(def x)|...}.  Build the right AST. */
-closureParameter!
-        :   parameterIdent!
-                {#closureParameter = #(#[PARAMETER_DEF,"PARAMETER_DEF"],
-                                                                #(#[MODIFIERS,"MODIFIERS"]), #([TYPE,"TYPE"]),
-                                                                #closureParameter);}
-        ;
-
-/** A formal parameter name can be decorated with the optionality operator, meaning that
- *  the argument can be omitted by the caller.
- *  (This has the same effect as creating a new wrapper overloading that
- *  passes the appropriate null value in place of the missing argument.)
- *  <p>
- *  A formal parameter name can be decorated with a spread operator f(*x),
- *  which means the name will be bound to a list of argument values.
- *  This spread argument must be the last argument, except perhaps for
- *  a Map argument (which may also be spread), and except perhaps for
- *  a final Closure argument.  The Map and Closure parameters must be
- *  explicitly typed, in order to provide a clear basis for dividing
- *  incoming arguments into unlabeled, labeled, and closure categories.
- *  <p>
- *  Examples:
- *    {(*al) | al}(0,1,2)  ===  [0,1,2]
- *    {(*al) | al}(0,a:1,b:2)  ===  [0,[a:1,b:2]]
- *    {(*al) | al}(0){s}  ===  [0,{s}]
- *    {(*al,Closure c) | al}(0){s}  ===  [0]
- *    {(*al,Map m) | al}(0,a:1,b:2)  ===  [0]
- *    {(*al,Map m) | m}(0)  ===  [:]
- */
-parameterIdent
-        :   (   // Spread operator:  {(*y)|y}(1,2,3)  ===  [1,2,3]
-                        sp:STAR^                                {#sp.setType(SPREAD_ARG);}
-                |   // Optional-null operator:  {(?x,?y)|[x,y]}(1)  ===  [1,null]
-                        op:QUESTION^                    {#op.setType(OPTIONAL_ARG);}
-                )?
-                (   IDENT
-                |   "it"                // allow keyword "it", but only as a method or closure parameter
-                )
-        ;
-
-// Compound statement. This is used in many contexts:
-// Inside a class definition prefixed with "static":
-// it is a class initializer
-// Inside a class definition without "static":
-// it is an instance initializer
-// As the body of a method
-// As a completely indepdent braced block of code inside a method
-// it starts a new scope for variable definitions
-// In Groovy, this is called an "open block".  It cannot have closure arguments.
-
-compoundStatement
-	:	openBlock
-	;
-
-/** An open block is not allowed to have closure arguments. */
-openBlock
-        :       lc:LCURLY^ {#lc.setType(SLIST);}   // AST type of SLIST means "never gonna be a closure"
-                blockBody
-                RCURLY!
-        ;
-
-/** A block body is either a single expression, with no additional newlines or separators,
-  * or else the usual parade of zero or more statements.
-  */
-blockBody
-        :   // Allow almost any expression, as long as it stands completely alone in the block.
-                // The expression must not contain line breaks outside of parentheses.
-                // DECIDE: Illegality of line breaks.  Forces coders to place the RCURLY right after the expression:  {1+1}.
-                // This makes expression-bearing blocks look more distinct.
-                (balancedTokensNoSep (RCURLY | EOF)) => (assignmentExpression (RCURLY | EOF)) => expressionNotBOR
-
-        |       // include the (possibly-empty) list of statements
-                (statement)? (sep! (statement)?)*
-        ;
-
-// Special restriction:  Logical OR expressions cannot occur at statement level, not even as {a...|b...}.
-// This restriction helps programmers avoid inadvertantly creating closure arguments.
-// Note pernicious case #1:  {it|1}.  Does this mean set the low-order bit of the argument, or return constant 1?
-// Note pernicious case #2:  {xx|1}.  Does this mean add the low-order bit into xx, or return constant 1?
-// In both cases, the bar is "eagerly" taken to be a closure argument delimiter.
-expressionNotBOR
-        :   e:expression
-                {require(#e.getType() != BOR,
-                                "expression in block; cannot be of the form a|b",
-                                "enclose the expression parentheses (a|b)");}
-        ;
-
-/** A block which is known to be a closure, even if it has no apparent arguments.
- */
-closedBlock
-        :       lc:LCURLY^ {#lc.setType(CLOSED_BLOCK);}
-                ( ( nls closureParametersStart ) =>
-                        nls! closureParameters
-                |
-                        implicitParameters  // implicit {it|...} or {?noname|...}
-                )
-                blockBody
-                RCURLY!
-        ;
-
-/** A block inside an expression is assumed to be a closure, unless it is double braced.
- *  DECIDE: PROPOSAL: Double bracing always forces an open block.
- *  This syntax is useful for passing on a pre-existing closure to a call, rather than building another.
- *  Example:  <code>def forEachTwice(Closure y) { forEach{{y}}; forEach{{y}} }</code>
- *  In the absence of double bracing, the block may always be interpreted as a closure,
- *  even though its syntactic context may require that the closure be immediately invoked.
- */
-expressionBlock
-        :   (LCURLY LCURLY balancedTokens RCURLY RCURLY) =>
-                LCURLY! openBlock RCURLY!
-        |   closedBlock
-        ;
-
-/** An appended block follows a method name or method argument list.
- *  It is optionally labeled.  DECIDE:  A good rule?
- */
-appendedBlock
-        :
-        /*
-            (IDENT COLON nls LCURLY)=>
-                IDENT c:COLON^ {#c.setType(LABELED_ARG);} nls!
-                expressionBlock
-        |
-        */
-                expressionBlock
-        ;
-
-/** A block known to be a closure, but which omits its arguments, is given this placeholder.
- *  A subsequent pass is responsible for deciding if there is an implicit 'it' parameter,
- *  or if the parameter list should be empty.
- */
-implicitParameters
-        :   {   #implicitParameters = #(#[IMPLICIT_PARAMETERS,"IMPLICIT_PARAMETERS"]);  }
-        ;
-
-/** A sub-block of a block can be either open or closed.
- *  It is closed if and only if there are explicit closure arguments.
- *  Compare this to a block which is appended to a method call,
- *  which is given closure arguments, even if they are not explicit in the code.
- */
-openOrClosedBlock
-        :   (LCURLY nls closureParametersStart ) =>
-                closedBlock
-        |       openBlock
-        ;
-
-statement
-	// A list of statements in curly braces -- start a new scope!
-	// Free-floating blocks must be labeled or double-braced, to defend against typos.
-        :       (LCURLY LCURLY balancedTokens RCURLY RCURLY) =>
-                LCURLY! openOrClosedBlock RCURLY!
-        |       compoundStatement
-		{require(false,
-                                "ambiguous free-floating block head{...} needs context to determine if it's open or closed",
-                                "surround {...} with extra braces {{...}} or use it as a closure in an expression x={...}");}
-
-	// declarations are ambiguous with "ID DOT" relative to expression
-	// statements. Must backtrack to be sure. Could use a semantic
-	// predicate to test symbol table to see what the type was coming
-	// up, but that's pretty hard without a symbol table ;)
-	|	(declarationStart)=> 
-                declaration
-
-	// An expression statement. This could be a method call,
-	// assignment statement, or any other expression evaluated for
-	// side-effects.
-	|	expressionStatement 
-
-	//TODO: what abour interfaces, enums and annotations
-	// class definition
-	|	(m:modifiers!)? classDefinition[#m]
-
-	// Attach a label to the front of a statement
-        // This block is executed for effect, unless it has an explicit closure argument.
-        |       IDENT c:COLON^ {#c.setType(LABELED_STAT);}
-                (   (LCURLY) => openOrClosedBlock
-                |   statement
-                )
-
-	// If-else statement
-        // Note:  There is no nls next to either paren, even though it would be increase compatibility
-        // with various styles of Java indenting.  The "if" statement has the same constraints on white
-        // space as a method call statement like "iflikemethod (args) { body }".  By restricting
-        // newlines in both constructs in similar ways, we make Groovy internally consistent,
-        // at a minor cost to compatibility with Java.
-        |       "if"^ LPAREN! expression RPAREN! compatibleBodyStatement
-                (
-                        // CONFLICT: the old "dangling-else" problem...
-                        //           ANTLR generates proper code matching
-                        //                       as soon as possible.  Hush warning.
-                        options {
-                                warnWhenFollowAmbig = false;
-                        }
-                :
-                        (sep!)?  // allow SEMI here for compatibility with Java
-                        "else"! nls! compatibleBodyStatement
-                )?
-
-	// For statement
-	|	forStatement
-
-	// While statement
-	|	"while"^ LPAREN! expression RPAREN! compatibleBodyStatement
-
-	/*OBS* no do-while statement in Groovy (too ambiguous)
-	// do-while statement
-	|	"do"^ statement "while"! LPAREN! expression RPAREN! SEMI!
-	*OBS*/
-	// With statement
-        // (This is the Groovy scope-shift mechanism, used for builders.)
-        |       "with"^ LPAREN! expression RPAREN! compoundStatement
-        
-        // Splice statement, meaningful only inside a "with" expression.
-        // PROPOSED, DECIDE.  Prevents the namespace pollution of a "text" method or some such.
-        |   sp:STAR^ nls!                       {#sp.setType(SPREAD_ARG);}
-                expressionStatement
-        // Example:  with(htmlbuilder) { head{} body{ *"some text" } }
-        // Equivalent to:  { htmlbuilder.head{} htmlbuilder.body{ (htmlbuilder as Collection).add("some text") } }
-
-        // Import statement.  Can be used in any scope.  Has "import x as y" also.
-        |   importStatement
-
-	// switch/case statement
-	|	"switch"^ LPAREN! expression RPAREN! LCURLY!
-			( casesGroup )*
-		RCURLY!
-
-	// exception try-catch block
-	|	tryBlock
-
-	// synchronize a statement
-	|	"synchronized"^ LPAREN! expression RPAREN! compoundStatement
-
-
-	/*OBS*
-	// empty statement
-	|	s:SEMI {#s.setType(EMPTY_STAT);}
-	*OBS*/
-
-	// NOTE: some alternations have been moved to 'branchExpression'
-	;
-
-forStatement
-	:	f:"for"^
-		LPAREN!
-			(	(forInit SEMI)=>traditionalForClause
-			// *OBS* 
-			// There's no need at all for squeezing in the new Java 5 "for"
-  // syntax, since Groovy's is a suitable alternative.
-		 // |	(parameterDeclaration COLON)=> forEachClause
-	  // *OBS*
-			|       // the coast is clear; it's a modern Groovy for statement
-				forInClause
-			)
-		RPAREN!
-		compatibleBodyStatement					 // statement to loop over
-	;
-
-traditionalForClause
-	:
-		forInit SEMI!	// initializer
-		forCond SEMI!	// condition test
-		forIter			// updater
-	;
-
-/*OBS*
-forEachClause
-	:
-		p:parameterDeclaration COLON! expression
-		{#forEachClause = #(#[FOR_EACH_CLAUSE,"FOR_EACH_CLAUSE"], #forEachClause);}
-	;
-*OBS*/
-
-forInClause
-        :       (   (declarationStart)=>
-                        singleDeclarationNoInit
-                |   IDENT
-                |   "it"
-                )
-                i:"in"^         {#i.setType(FOR_IN_ITERABLE);}
-                shiftExpression
-        ;
-
-/** In Java, "if", "while", and "for" statements can take random, non-braced statements as their bodies.
- *  Support this practice, even though it isn't very Groovy.
- */
-compatibleBodyStatement
-        :   (LCURLY)=>
-                compoundStatement
-        |
-                statement
-        ;
-
-/* TODO - QUESTION - why do we use 'assignmentExpression' instead of 'expression' inside each branchExpression production */
-/** In Groovy, return, break, continue, throw, and assert can be used in any expression context.
- *  Example:  println (x || return);  println assert x, "won't print a false value!"
- *  If an optional expression is missing, its value is void (this coerces to null when a value is required).
- */
-branchExpression
-        :
-        // Return an expression
-                "return"^ (assignmentExpression)?
-
-        // break:  get out of a loop, or switch, or method call
-        // continue:  do next iteration of a loop, or leave a closure
-        |       ("break"^ | "continue"^)
-                (   IDENT
-                        (   options {greedy=true;} :
-                                COLON! assignmentExpression
-                        )?
-                )?
-
-        // throw an exception
-        |       "throw"^ assignmentExpression!
-
-
-	// TODO - decide on definitive 'assert' statement in groovy (1.4 and|or groovy)
-	// asserts
-	// 1.4+ ...
-	//      |	"assert"^ expression ( COLON! expression )?
-	
-	// groovy assertion...
-        |       "assert"^ assignmentExpression
-                (   options {greedy=true;} :
-                        COMMA! assignmentExpression
-                )?
-	
-
-        // Note:  The colon is too special in Groovy; we modify the FOR and ASSERT syntax to dispense with it.
-        ;
-
-
-/** Any statement which begins with an expression, called the "head".
- *  The head can be followed by command arguments:  {x.y a,b}, {x[y] a,b}, even {f(x) y}.
- *  Or, the head can be followed by an assignment operator:  {x.y = z}, {x.y[a] ++}, {x.y(a) += z}, etc.
- *  To catch simple errors, expressions at statement level have a limited set of syntaxes.
- *  For example, {print x; +y} is a syntax error.  (Java does this trick also.)
- *  If you really want something weird, wrap it in parentheses or curly braces.
- */
-//  id(a), x.id(a), (x).id(a), etc.; id{...}, x.id{...}, (x).id{...}, etc.
-expressionStatement
-                { boolean endBrackets = false; }
-        :   endBrackets=
-                head:pathExpression!
-                (       {!endBrackets}?
-                        commandArguments[#head]
-                |   assignmentTail[#head]
-                |   {#expressionStatement = #head;}  // no command arguments
-                )
-                {   // Do an error check on the following token:
-                        switch (LA(1)) {
-                        case RCURLY: case RBRACK: case RPAREN: case SEMI: case NLS: case EOF:
-                                break;
-                        default:
-                                require(false,
-                                                "command followed by garbage in f...",
-                                                "parenthesize correct argument list f(...) or whole expression (f()...)");
-                        }
-                }
-        |
-                // Prefix increment; a special case of assignment statement.
-                (INC^ | DEC^) endBrackets=pathExpression
-        |
-                branchExpression
-        ;
-
-casesGroup
-	:	(	// CONFLICT: to which case group do the statements bind?
-			// ANTLR generates proper code: it groups the
-			// many "case"/"default" labels together then
-			// follows them with the statements
-			options {
-				greedy = true;
-			}
-			:
-			aCase
-		)+
-		caseSList
-		{#casesGroup = #([CASE_GROUP, "CASE_GROUP"], #casesGroup);}
-	;
-
-aCase
-	:	("case"^ expression | "default") COLON! nls!
-	;
-
-caseSList
-	:	statement (sep! (statement)?)*
-		{#caseSList = #(#[SLIST,"SLIST"],#caseSList);}
-	;
-
-// The initializer for a for loop
-// The controlExpressionList production includes declarations as a possibility
-forInit
-        :       (controlExpressionList)?
-                {#forInit = #(#[FOR_INIT,"FOR_INIT"],#forInit);}
-        ;
-
-forCond
-	:	(expression)?
-		{#forCond = #(#[FOR_CONDITION,"FOR_CONDITION"],#forCond);}
-	;
-
-forIter
-	:	(controlExpressionList)?
-		{#forIter = #(#[FOR_ITERATOR,"FOR_ITERATOR"],#forIter);}
-	;
-
-// an exception handler try/catch block
-tryBlock
-        :       "try"^ compoundStatement
-                ( options {greedy=true;} :  nls! handler)*
-                ( options {greedy=true;} :  nls! finallyClause)?
-        ;
-
-finallyClause
-	:	"finally"^ compoundStatement
-	;
-
-// an exception handler
-handler
-	:	"catch"^ LPAREN! parameterDeclaration RPAREN! compoundStatement
-	;
-
-
-assignmentTail[AST head]
-        :
-                {#assignmentTail = head;}
-                (   ASSIGN^
-                |   PLUS_ASSIGN^
-                |   MINUS_ASSIGN^
-                |   STAR_ASSIGN^
-                |   DIV_ASSIGN^
-                |   MOD_ASSIGN^
-                |   SR_ASSIGN^
-                |   BSR_ASSIGN^
-                |   SL_ASSIGN^
-                |   BAND_ASSIGN^
-                |   BXOR_ASSIGN^
-                |   BOR_ASSIGN^
-                //|   USEROP_13^  //DECIDE: This is how user-define ops would show up.
-                )
-                nls!
-                assignmentExpression
-        |
-                {#assignmentTail = head;}
-                in:INC^ {#in.setType(POST_INC);}
-        |
-                {#assignmentTail = head;}
-                de:DEC^ {#de.setType(POST_DEC);}
-        ;
-
-/** A member name (x.y) or element name (x[y]) can serve as a command name,
- *  which may be followed by a list of arguments.
- */
-commandArguments[AST head]
-        :   {   #commandArguments = head;
-                        switch (LA(1)) {
-                        case PLUS: case MINUS: case INC: case DEC:
-                        case STAR: case DIV: case MOD:
-                        case SR: case BSR: case SL:
-                        case BAND: case BXOR: case BOR:
-                        require(false,
-                                        "garbage infix or prefix operator after command name f +x",
-                                        "parenthesize either the whole expression (f+x) or the command arguments f(+x)");
-                        }
-                }
-                expression (options { greedy=true; } : COMMA! nls! expression)*
-                // println 2+2 //BAD
-                // println(2+2) //OK
-                // println (2)+2 //BAD
-                // println((2)+2) //OK
-                // (println(2)+2) //OK
-                // compare (2), 2 //BAD
-                // compare( (2), 2 ) //OK
-                // foo.bar baz{bat}, bang{boz} //OK?!
-                {
-                        AST headid = getASTFactory().dup(#head);
-                        headid.setType(METHOD_CALL);
-                        headid.setText("<command>");
-                        #commandArguments = #(headid, #commandArguments);
-                }
-        ;
-
-assignmentOp
-        :
-        (   ASSIGN^
-        |   PLUS_ASSIGN^
-        |   MINUS_ASSIGN^
-        |   STAR_ASSIGN^
-        |   DIV_ASSIGN^
-        |   MOD_ASSIGN^
-        |   SR_ASSIGN^
-        |   BSR_ASSIGN^
-        |   SL_ASSIGN^
-        |   BAND_ASSIGN^
-        |   BXOR_ASSIGN^
-        |   BOR_ASSIGN^
-        )
-        ;
-
-// expressions
-// Note that most of these expressions follow the pattern
-//   thisLevelExpression :
-//	   nextHigherPrecedenceExpression
-//		   (OPERATOR nextHigherPrecedenceExpression)*
-// which is a standard recursive definition for a parsing an expression.
-// The operators in java have the following precedences:
-//	lowest  (13)  = *= /= %= += -= <<= >>= >>>= &= ^= |=
-//			(12)  ?:
-//			(11)  ||
-//			(10)  &&
-//			( 9)  |
-//			( 8)  ^
-//			( 7)  &
-//			( 6)  == !=
-//			( 5)  < <= > >=
-//			( 4)  << >>
-//			( 3)  +(binary) -(binary)
-//			( 2)  * / %
-//			( 1)  ++ -- +(unary) -(unary)  ~  !  (type)
-//				  []   () (method call)  . (dot -- identifier qualification)
-//				  new   ()  (explicit parenthesis)
-//
-// the last two are not usually on a precedence chart; I put them in
-// to point out that new has a higher precedence than '.', so you
-// can validy use
-//	 new Frame().show()
-//
-// Note that the above precedence levels map to the rules below...
-// Once you have a precedence chart, writing the appropriate rules as below
-//   is usually very straightfoward
-
-
-
-// the mother of all expressions
-// This nonterminal is not used for expression statements, which have a more restricted syntax
-// due to possible ambiguities with other kinds of statements.  This nonterminal is used only
-// in contexts where we know we have an expression.  It allows general Java-type expressions.
-expression
-        :   (declarationStart)=> singleDeclaration
-        |   branchExpression
-        |       assignmentExpression
-                {#expression = #(#[EXPR,"EXPR"],#expression);}
-        ;
-// This is a list of expressions.
-controlExpressionList
-        :       controlExpression (COMMA! nls! controlExpression)*
-                {#controlExpressionList = #(#[ELIST,"ELIST"], controlExpressionList);}
-        ;
-
-/** Used for backward compatibility, in a few places where
- *  Java expresion statements and declarations are required.
- */
-controlExpression
-                {boolean zz; /*ignore*/ }
-        :       // if it looks like a declaration, it is
-                (declarationStart)=> singleDeclaration
-        |   // otherwise it's a plain statement expression
-                zz=head:pathExpression!
-                (       assignmentTail[#head]
-                |   {#controlExpression = #head;}  // no command syntax in this context
-                )
-        |
-                // Prefix increment; a special case of assignment statement.
-                (INC^ | DEC^) zz=pathExpression
-        ;
-
-/** A "path expression" is a name which can be used for value, assigned to, or called.
- *  Uses include assignment targets, commands, and types in declarations.
- *  It is called a "path" because it looks like a linear path through a data structure.
- *  Example:  a.b[n].c(x).d{s}
- *  (Compare to a C lvalue, or LeftHandSide in the JLS section 15.26.)
- *  General expressions are built up from path expressions, using operators like '+' and '='.
- *  Note:  A path expression cannot begin with a block or closure.
- */
-pathExpression
-returns [boolean endBrackets = false]
-        :   pe:primaryExpression!
-                endBrackets=
-                pathExpressionTail[#pe]
-        ;
-
-pathExpressionTail[AST result]
-returns [boolean endBrackets = false]
-        :
-                // The primary can then be followed by a chain of .id, (a), [a], and {...}
-                (
-                        // Parsing of this chain is greedy.  For example, a pathExpression may be a command name
-                        // followed by a command argument, but that command argument cannot begin with an LPAREN,
-                        // since a parenthesized expression is greedily attached to the pathExpression as a method argument.
-                        options { greedy=true; }
-                        :
-
-                        endBrackets=
-                        pe:pathElement[result]!
-                        { result = #pe; }
-                )*
-                {   #pathExpressionTail = result;  }
-        ;
-
-pathExpressionFromBrackets
-                {boolean zz; /*ignore*/ }
-        :   pe:expressionBlock!
-                zz=pathExpressionTail[#pe]
-        |   pe2:listOrMapConstructorExpression!
-                zz=pathExpressionTail[#pe2]
-        ;
-
-pathElement[AST prefix]
-returns [boolean endBrackets = false]
-                {boolean zz; /*ignore*/ }
-        :
-                {   #pathElement = prefix;  }
-                // Stuff which can precede a DOT:
-                (   // Spread operator:  x*.y  ===  x?.collect{it.y}
-                        sp:STAR^                                {#sp.setType(SPREAD_ARG);}
-                |   // Optional-null operator:  x?.y  === (x==null)?null:x.y
-                        op:QUESTION^                    {#op.setType(OPTIONAL_ARG);}
-                )?
-                // The all-powerful dot.
-                DOT^ nls! namePart
-                {   endBrackets = false; }
-        |
-                mca:methodCallArgs[prefix]
-                {   #pathElement = #mca; endBrackets = true;  }
-        |
-                // Element selection is always an option, too.
-                // In Groovy, the stuff between brackets is a general argument list,
-                // since the bracket operator is transformed into a method call.
-                // This can also be a declaration head; square brackets are used to parameterize array types.
-                ata:arrayOrTypeArgs[prefix]
-                {   #pathElement = #ata; endBrackets = false;  }
-
-/*NYI*
-        |       DOT^ nls! "this"
-
-        |       DOT^ nls! "super"
-                (   // (new Outer()).super()  (create enclosing instance)
-                        lp3:LPAREN^ argList RPAREN!
-                        {#lp3.setType(SUPER_CTOR_CALL);}
-                |   DOT^ IDENT
-                        (       lps:LPAREN^ {#lps.setType(METHOD_CALL);}
-                                argList
-                                RPAREN!
-                        )?
-                )
-        |       DOT^ nls! newExpression
-*NYI*/
-        ;
-
-/** Lookahead pattern for pathElement. */
-pathElementStart!
-        :   (LPAREN | LBRACE | LBRACK | DOT | (STAR|QUESTION) DOT)
-        ;
-
-/** This is the grammar for what can follow a dot:  x.a, x.@a, x.&a, x.'a', etc.
- *  <p>The alternative for "in" is there just for error processing; it raises an error.
- */
-namePart
-        :
-                (   amp:LAND^   {#amp.setType(REFLECT_MEMBER);} // foo.&bar reflects the 'bar' member of foo
-                |       ats:ATSIGN^ {#amp.setType(SELECT_SLOT);}        // foo.@bar selects the field (or attribute), not property
-                )?
-
-            (   IDENT
-                |   sl:STRING_LITERAL {#sl.setType(IDENT);}
-                        // foo.'bar' is in all ways same as foo.bar, except that bar can have an arbitrary spelling
-                |   dn:dynamicMemberName!
-                        {   #namePart = #(#[DYNAMIC_MEMBER, "DYNAMIC_MEMBER"], #dn);  }
-                        // DECIDE PROPOSAL:  foo.(bar), x.(p?'a':'b') means dynamic lookup on a dynamic name
-                |
-                        openBlock
-                        // PROPOSAL, DECIDE:  Is this inline form of the 'with' statement useful?
-                        // Definition:  a.{foo} === {with(a) {foo}}
-                        // May cover some path expression use-cases previously handled by dynamic scoping (closure delegates).
-                // Recover with a good diagnostic from a common error:
-                |   "in"  // poster child; the lexer makes all keywords after dot look like "in"
-                        {   String kwd = LT(1).getText();
-                                require(false,
-                                                "illegal keyword after dot in x."+kwd,
-                                                "put the keyword in quotes, as in x.'"+kwd+"'");
-                                // This helps the user recover from ruined Java identifiers, as in System.'in'.
-                                // DECIDE: Shall we just define foo.in to DTRT automagically, or do we want the syntax check?
-                        }
-                )
-
-                // (No, x.&@y is not needed; just say x.&y as Slot or some such.)
-        ;
-
-/** If a dot is followed by a parenthesized or quoted expression, the member is computed dynamically,
- *  and the member selection is done only at runtime.  This forces a statically unchecked member access.
- */
-dynamicMemberName
-        :   (   parenthesizedExpression
-                |   stringConstructorExpression
-                )
-        {   #dynamicMemberName = #(#[DYNAMIC_MEMBER, "DYNAMIC_MEMBER"], #dynamicMemberName);  }
-        ;
-
-/** An expression may be followed by one or both of (...) and {...}.
- *  Note: If either is (...) or {...} present, it is a method call.
- *  The {...} is appended to the argument list, and matches a formal of type Closure.
- *  If there is no method member, a property (or field) is used instead, and must itself be callable.
- *  <p>
- *  If the methodCallArgs are absent, it is a property (or field) reference, if possible.
- *  If there is no property or field, it is treated as a method call (nullary) after all.
- *  <p>
- *  Arguments in the (...) can be labeled, and the appended block can be labeled also.
- *  If there is a mix of unlabeled and labeled arguments,
- *  all the labeled arguments must follow the unlabeled arguments,
- *  except that the closure (labeled or not) is always a separate final argument.
- *  Labeled arguments are collected up and passed as a single argument to a formal of type Map.
- *  <p>
- *  Therefore, f(x,y, a:p, b:q) {s} is equivalent in all ways to f(x,y, [a:p,b:q], {s}).
- *  Spread arguments of sequence type count as unlabeled arguments,
- *  while spread arguments of map type count as labeled arguments.
- *  (This distinction must sometimes be checked dynamically.)
- *
- *  A plain unlabeled argument is allowed to match a trailing Map or Closure argument:
- *  f(x, a:p) {s}  ===  f(*[ x, [a:p], {s} ])
- *  <p>
- *  Returned AST is [METHOD_CALL, callee, ELIST?, CLOSED_BLOCK?].
- */
-methodCallArgs[AST callee]
-        {boolean zz; /*ignore*/ }
-        :
-                {#methodCallArgs = callee;}
-                lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-                zz=argList
-                RPAREN!
-                ( options {greedy=true;} : appendedBlock )?             // maybe append a closure
-        |
-                // else use a closure alone
-                {#methodCallArgs = callee;}
-                cb:appendedBlock
-                {   AST lbrace = getASTFactory().dup(#cb);
-                        lbrace.setType(METHOD_CALL);
-                        #methodCallArgs = #(lbrace, #methodCallArgs);
-                }
-        ;
-
-/** An expression may be followed by [...].
- *  Unlike Java, these brackets may contain a general argument list,
- *  which is passed to the array element operator, which can make of it what it wants.
- *  The brackets may also be empty, as in T[].  This is how Groovy names array types.
- *  <p>Returned AST is [INDEX_OP, indexee, ELIST].
- *
- * *TODO* (The arrayOrTypeArgs thing in 1.4 groovy.g is a placeholder which
- * anticipates the trouble of integrating Java 5 type arguments.)
- */
-arrayOrTypeArgs[AST indexee]
-        {boolean zz; /*ignore*/ }
-        :
-                {#arrayOrTypeArgs = indexee;}
-                (
-                        // it's convenient to be greedy here, though it doesn't affect correctness
-                        options { greedy = true; } :
-                        lb:LBRACK^ {#lb.setType(INDEX_OP);}
-                        zz=argList
-                        RBRACK!
-                )+
-        ;
-
-
-// assignment expression (level 13)
-assignmentExpression
-        :       conditionalExpression
-                (       
-                        (   ASSIGN^
-                        |   PLUS_ASSIGN^
-                        |   MINUS_ASSIGN^
-                        |   STAR_ASSIGN^
-                        |   DIV_ASSIGN^
-                        |   MOD_ASSIGN^
-                        |   SR_ASSIGN^
-                        |   BSR_ASSIGN^
-                        |   SL_ASSIGN^
-                        |   BAND_ASSIGN^
-                        |   BXOR_ASSIGN^
-                        |   BOR_ASSIGN^
-                        )
-                        nls!
-                        assignmentExpression
-                )?
-        ;
-
-// conditional test (level 12)
-conditionalExpression
-        :       logicalOrExpression
-                ( QUESTION^ nls! assignmentExpression COLON! nls! conditionalExpression )?
-        ;
-
-
-// logical or (||)  (level 11)
-logicalOrExpression
-        :       logicalAndExpression (LOR^ nls! logicalAndExpression)*
-        ;
-
-
-// logical and (&&)  (level 10)
-logicalAndExpression
-        :       inclusiveOrExpression (LAND^ nls! inclusiveOrExpression)*
-        ;
-
-
-// bitwise or non-short-circuiting or (|)  (level 9)
-inclusiveOrExpression
-        :       exclusiveOrExpression (BOR^ nls! exclusiveOrExpression)*
-        ;
-
-
-// exclusive or (^)  (level 8)
-exclusiveOrExpression
-        :       andExpression (BXOR^ nls! andExpression)*
-        ;
-
-
-// bitwise or non-short-circuiting and (&)  (level 7)
-andExpression
-        :       equalityExpression (BAND^ nls! equalityExpression)*
-        ;
-
-
-// equality/inequality (==/!=) (level 6)
-equalityExpression
-        :       relationalExpression ((NOT_EQUAL^ | EQUAL^) nls! relationalExpression)*
-        ;
-
-
-// boolean relational expressions (level 5)
-relationalExpression
-        :       shiftExpression
-                (       (       (       LT^
-                                |       GT^
-                                |       LE^
-                                |       GE^
-                                |       "in"^
-                                )
-                                nls!
-                                shiftExpression
-                        )?
-                |       "instanceof"^ nls! typeSpec[true]
-                |       "as"^         nls! typeSpec[true] //TO DO: Rework to allow type expression?
-                )
-        ;
-
-
-
-// bit shift expressions (level 4)
-shiftExpression
-        :       additiveExpression
-                (   ((SL^ | SR^ | BSR^) nls!
-                        |   RANGE_INCLUSIVE^
-                        |   DEC^ {#DEC.setType(RANGE_EXCLUSIVE);}
-                                // DECIDE: Maybe use a--b to denote C/Java-style index range ("exclusive")
-                        )
-                        additiveExpression
-                )*
-        ;
-
-
-// binary addition/subtraction (level 3)
-additiveExpression
-        :       multiplicativeExpression ((PLUS^ | MINUS^) nls! multiplicativeExpression)*
-        ;
-
-
-// multiplication/division/modulo (level 2)
-multiplicativeExpression
-        :       unaryExpression ((STAR^ | DIV^ | MOD^ ) nls! unaryExpression)*
-        ;
-
-unaryExpression
-        :       INC^ nls! unaryExpression
-        |       DEC^ nls! unaryExpression
-        |       MINUS^ {#MINUS.setType(UNARY_MINUS);} nls! unaryExpression
-        |       PLUS^  {#PLUS.setType(UNARY_PLUS);} nls! unaryExpression
-        |       DOLLAR^  {#DOLLAR.setType(SCOPE_ESCAPE);} nls! unaryExpression
-        |       unaryExpressionNotPlusMinus
-        ;
-
-// The SCOPE_ESCAPE operator pops its operand out of the scope of a "with" block.
-// If not within a "with" block, it pops the operand out of the static global scope,
-// into whatever dynamic (unchecked) global scope is available when the script is run,
-// regardless of package and imports.
-// Example of SCOPE_ESCAPE:  def x=1; with ([x:2,y:-1]) { def y=3; println [$x, x, y] }  =>  "[1, 2, 3]"
-
-unaryExpressionNotPlusMinus
-	:	BNOT^ nls! unaryExpression
-	|	LNOT^ nls! unaryExpression
-	|	(	// subrule allows option to shut off warnings
-			options {
-				// "(int" ambig with postfixExpr due to lack of sequence
-				// info in linear approximate LL(k). It's ok. Shut up.
-				generateAmbigWarnings=false;
-			}
-		:	// If typecast is built in type, must be numeric operand
-			// Have to backtrack to see if operator follows
-		(LPAREN builtInTypeSpec[true] RPAREN unaryExpression)=>
-		lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN!
-		unaryExpression
-
-		// Have to backtrack to see if operator follows. If no operator
-		// follows, it's a typecast. No semantic checking needed to parse.
-		// if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)"
-		// TO DO:  Rework this mess for Groovy.
-	|	(LPAREN classTypeSpec[true] RPAREN unaryExpressionNotPlusMinus)=>
-		lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN!
-		unaryExpressionNotPlusMinus
-
-	|	postfixExpression
-	)
-	;
-
-// qualified names, array expressions, method invocation, post inc/dec
-postfixExpression
-		{boolean zz; /*ignored*/}
-	:
-		(   zz=pathExpression                           // x, x.f, x(), x{}, etc.
-                |   pathExpressionFromBrackets          // {c}, {c}(), [x].f, etc.
-                )
-
-                (
-                        options {greedy=true;} :
-                        // possibly add on a post-increment or post-decrement.
-			// allows INC/DEC on too much, but semantics can check
-			in:INC^ {#in.setType(POST_INC);}
-	 	|	de:DEC^ {#de.setType(POST_DEC);}
-		)?
- 	;
-
-// the basic element of an expression
-primaryExpression
-        :       IDENT
-        /*OBS*  //class names work fine as expressions, no need for T.class in Groovy
-                ( options {greedy=true;} : DOT^ "class" )?
-        *OBS*/
-    |   constant
-        |       "true"
-        |       "false"
-        |       "null"
-    |   newExpression
-        |       "it"                                                    // implicit or explicit closure parameter (or method parameter)
-        |       "this"
-        |       "super"
-        |       parenthesizedExpression                 // (general stuff..,.)
-        |   stringConstructorExpression         // "foo $bar baz"; presented as multiple tokens
-        |   builtInType                                         // type expressions work in Groovy
-        /*OBS*  //class names work fine as expressions
-                // look for int.class and int[].class
-        |       builtInType
-                ( lbt:LBRACK^ {#lbt.setType(ARRAY_DECLARATOR);} RBRACK! )*
-                DOT^ nls! "class"
-        *OBS*/
-        ;
-
-parenthesizedExpression
-        :   lp:LPAREN^ expression RPAREN!                       { #lp.setType(EXPR); }
-        ;
-
-// Groovy syntax for "$x $y".
-stringConstructorExpression
-        :   cs:STRING_CTOR_START
-                { #cs.setType(STRING_LITERAL); }
-
-                stringConstructorValuePart
-
-                (   cm:STRING_CTOR_MIDDLE
-                        { #cm.setType(STRING_LITERAL); }
-                        stringConstructorValuePart
-                )*
-
-                ce:STRING_CTOR_END
-                { #ce.setType(STRING_LITERAL);
-                  #stringConstructorExpression =
-                        #(#[STRING_CONSTRUCTOR,"STRING_CONSTRUCTOR"], stringConstructorExpression);
-                }
-        ;
-
-stringConstructorValuePart
-        :   identifier          // aka, pathExpression
-        |   openBlock
-        ;
-
-/**
- * A list constructor is a argument list enclosed in square brackets, without labels.
- * Any argument can be decorated with a spread or optional operator (*x, ?x), but not a label (a:x).
- * Examples:  [], [1], [1,2], [1,*l1,2], [*l1,*l2], [1,?x,2].
- * (The l1, l2 must be a sequence or null.)
- * <p>
- * A map constructor is an argument list enclosed in square brackets, with labels everywhere,
- * except possibly on spread arguments, which stand for whole maps spliced in.
- * A colon immediately after the left bracket also forces the expression to be a map constructor.
- * Examples: [:], [a:1], [: a:1], [a:1,b:2], [a:1,*m1,b:2], [:*m1,*m2], [a:1,q:?x,b:2], [a:1,a:*x,b:2]
- * (The m1, m2 must be a map or null.)
- * Values associated with identical keys overwrite from left to right:
- * [a:1,a:2]  ===  [a:2]
- * <p>
- * Some malformed constructor expressions are not detected in the parser, but in a post-pass.
- * Bad examples: [1,b:2], [a:1,2], [:1], [a:1,?x], [a:1, b:*x].
- * (Note that method call arguments, by contrast, can be a mix of keyworded and non-keyworded arguments.)
- */
-listOrMapConstructorExpression
-                { boolean hasLabels = false, hal; }
-        :   lcon:LBRACK^
-                (  COLON!               { hasLabels |= true; }  )?  // [:], [:*x], [:*x,*y] are map constructors
-                hal=argList             { hasLabels |= hal;  }      // any argument label implies a map
-                RBRACK!
-                {   #lcon.setType(hasLabels ? MAP_CONSTRUCTOR : LIST_CONSTRUCTOR);  }
-        ;
-
-/*OBS*
-/** Match a, a.b.c refs, a.b.c(...) refs, a.b.c[], a.b.c[].class,
- *  and a.b.c.class refs. Also this(...) and super(...). Match
- *  this or super.
- */
-/*OBS*
-identPrimary
-	:	(ta1:typeArguments!)?
-		IDENT
-		// Syntax for method invocation with type arguments is
-		// <String>foo("blah")
-		(
-			options {
-				// .ident could match here or in postfixExpression.
-				// We do want to match here. Turn off warning.
-				greedy=true;
-				// This turns the ambiguity warning of the second alternative
-				// off. See below. (The "false" predicate makes it non-issue)
-				warnWhenFollowAmbig=false;
-			}
-			// we have a new nondeterminism because of
-			// typeArguments... only a syntactic predicate will help...
-			// The problem is that this loop here conflicts with
-			// DOT typeArguments "super" in postfixExpression (k=2)
-			// A proper solution would require a lot of refactoring...
-		:	(DOT (typeArguments)? IDENT) =>
-				DOT^ (ta2:typeArguments!)? IDENT
-		|	{false}?	// FIXME: this is very ugly but it seems to work...
-						// this will also produce an ANTLR warning!
-				// Unfortunately a syntactic predicate can only select one of
-				// multiple alternatives on the same level, not break out of
-				// an enclosing loop, which is why this ugly hack (a fake
-				// empty alternative with always-false semantic predicate)
-				// is necessary.
-		)*
-		(
-			options {
-				// ARRAY_DECLARATOR here conflicts with INDEX_OP in
-				// postfixExpression on LBRACK RBRACK.
-				// We want to match [] here, so greedy. This overcomes
-				// limitation of linear approximate lookahead.
-				greedy=true;
-			}
-		:	(	lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-				// if the input is valid, only the last IDENT may
-				// have preceding typeArguments... rather hacky, this is...
-				{if (#ta2 != null) astFactory.addASTChild(currentAST, #ta2);}
-				{if (#ta2 == null) astFactory.addASTChild(currentAST, #ta1);}
-				argList RPAREN!
-			)
-		|	( options {greedy=true;} :
-				lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK!
-			)+
-		)?
-	;
-*OBS*/
-
-/** object instantiation.
- *  Trees are built as illustrated by the following input/tree pairs:
- *
- *  new T()
- *
- *  new
- *   |
- *   T --  ELIST
- *		   |
- *		  arg1 -- arg2 -- .. -- argn
- *
- *  new int[]
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *
- *  new int[] {1,2}
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR -- ARRAY_INIT
- *								  |
- *								EXPR -- EXPR
- *								  |	  |
- *								  1	  2
- *
- *  new int[3]
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *				|
- *			  EXPR
- *				|
- *				3
- *
- *  new int[1][2]
- *
- *  new
- *   |
- *  int -- ARRAY_DECLARATOR
- *			   |
- *		 ARRAY_DECLARATOR -- EXPR
- *			   |			  |
- *			 EXPR			 1
- *			   |
- *			   2
- *
- */
-newExpression
-		{boolean zz; /*ignored*/}
-	:	"new"^ (typeArguments)? type
-		(	LPAREN! zz=argList RPAREN! 
-			/*TODO - NYI* (anonymousInnerClassBlock)? *NYI*/
-
-/*OBS*
-			//java 1.1
-			// Note: This will allow bad constructs like
-			//	new int[4][][3] {exp,exp}.
-			//	There needs to be a semantic check here...
-			// to make sure:
-			//   a) [ expr ] and [ ] are not mixed
-			//   b) [ expr ] and an init are not used together
-
-		|	newArrayDeclarator (arrayInitializer)?
-			// Groovy does not support Java syntax for initialized new arrays.
-                        // Use sequence constructors instead.
-
-*OBS*/
-		)
-	// DECIDE:  Keep 'new x()' syntax?
-	;
-
-/*NYI*
-anonymousInnerClassBlock
-        :   classBlock
-        ;
-*NYI*/
-
-argList
-returns [boolean hasLabels = false]
-{ boolean hl2; }
-        :       (
-                        hasLabels=argument
-                        (
-                                options { greedy=true; }:
-                                COMMA! hl2=argument             { hasLabels |= hl2; }
-                        )*
-                        {#argList = #(#[ELIST,"ELIST"], argList);}
-                |       /*nothing*/
-                        {#argList = #[ELIST,"ELIST"];}
-                )
-
-                // DECIDE: Allow an extra trailing comma, for easy editing of long lists.
-                // This applies uniformly to [x,y,] and (x,y,).  It is inspired by Java's a[] = {x,y,}.
-                (   COMMA!  )?
-        ;
-
-/** A single argument in (...) or [...].  Corresponds to to a method or closure parameter.
- *  May be labeled.  May be modified by the spread or optionality operators *, ?.
- */
-argument
-returns [boolean hasLabel = false]
-        :
-                // Optional argument label.
-                // Usage:  Specifies a map key, or a keyworded argument.
-                (   (argumentLabelStart) =>
-                        argumentLabel c:COLON^                  {#c.setType(LABELED_ARG);}
-                )?
-
-                (       // Spread operator:  f(*[a,b,c])  ===  f(a,b,c);  f(1,*null,2)  ===  f(1,2).
-                        sp:STAR^                                {#sp.setType(SPREAD_ARG);}
-                |       // Optional-null operator:  f(1,?x,2)  ===  (x==null)?f(1,2):f(1,x,2)
-                        op:QUESTION^                    {#op.setType(OPTIONAL_ARG);}
-                )?
-
-                expression
-        ;
-
-/** A label for an argument is of the form a:b, 'a':b, "a":b, or (a):b.
- *      The labels in (a:b), ('a':b), and ("a":b) are in all ways equivalent,
- *      except that the quotes allow more spellings.
- *  Equivalent dynamically computed labels are (('a'):b) and ("${'a'}":b)
- *  but not ((a):b) or "$a":b, since the latter cases evaluate (a) as a normal identifier.
- *      Bottom line:  If you want a truly variable label, use parens and say ((a):b).
- */
-argumentLabel
-        :   STRING_LITERAL
-        |   id:IDENT                    {#id.setType(STRING_LITERAL);}  // identifiers are self-quoting in this context
-        |   stringConstructorExpression                                                 // dynamic expression
-        |   parenthesizedExpression                                                             // dynamic expression
-        ;
-
-/** For lookahead only.  Fast approximate parse of a statementLabel followed by a colon. */
-argumentLabelStart!
-        :   ( IDENT | STRING_LITERAL | (LPAREN | STRING_CTOR_START)=> balancedBrackets ) COLON
-        ;
-
-/*OBS*
-newArrayDeclarator
-	:	(
-			// CONFLICT:
-			// newExpression is a primaryExpression which can be
-			// followed by an array index reference. This is ok,
-			// as the generated code will stay in this loop as
-			// long as it sees an LBRACK (proper behavior)
-			options {
-				warnWhenFollowAmbig = false;
-			}
-		:
-			lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);}
-				(expression)?
-			RBRACK!
-		)+
-	;
-*OBS*/
-
-constant
-        :       NUM_INT
-        |       STRING_LITERAL
-        |       NUM_FLOAT
-        |       NUM_LONG
-        |       NUM_DOUBLE
-        |   NUM_BIG_INT
-        |   NUM_BIG_DECIMAL
-        ;
-
-/** Fast lookahead across balanced brackets of all sorts. */
-balancedBrackets!
-        :   LPAREN balancedTokens RPAREN
-        |   LBRACK balancedTokens RBRACK
-        |   LCURLY balancedTokens RCURLY
-        |   STRING_CTOR_START balancedTokens STRING_CTOR_END
-        ;
-
-balancedTokens!
-        :   (   balancedBrackets
-                |   ~(LPAREN|LBRACK|LCURLY | STRING_CTOR_START
-                     |RPAREN|RBRACK|RCURLY | STRING_CTOR_END)
-                )*
-        ;
-
-balancedTokensNoSep!
-        :   (   balancedBrackets
-                |   ~(LPAREN|LBRACK|LCURLY | STRING_CTOR_START
-                     |RPAREN|RBRACK|RCURLY | STRING_CTOR_END     | SEMI|NLS)
-                )*
-        ;
-
-/** A statement separator is either a semicolon or a significant newline. 
- *  Any number of additional (insignificant) newlines may accompany it.
- *  (All the '!' signs simply suppress the default AST building.)
- */
-sep!
-        :   SEMI! nls!
-        |   NLS!                // this newline is significant!
-                (
-                        options { greedy=true; }:
-                        SEMI! nls!      // this superfluous semicolon is gobbled
-                )?
-        ;
-
-/** Zero or more insignificant newlines, all gobbled up and thrown away. */
-nls!    :
-                (options { greedy=true; }: NLS!)?
-        ;
-
-
-// TO DO: declarations in expression position
-
-//----------------------------------------------------------------------------
-// The Groovy scanner
-//----------------------------------------------------------------------------
-class GroovyLexer extends Lexer;
-
-options {
-	exportVocab=Groovy;		// call the vocabulary "Groovy"
-	testLiterals=false;		// don't automatically test for literals
-	k=4;					// four characters of lookahead
-	charVocabulary='\u0003'..'\uFFFF';
-	// without inlining some bitset tests, couldn't do unicode;
-	// I need to make ANTLR generate smaller bitsets; see
-	// bottom of GroovyLexer.java
-	codeGenBitsetTestThreshold=20;
-}
-
-{
-	/** flag for enabling the "assert" keyword */
-	private boolean assertEnabled = true;
-	/** flag for enabling the "enum" keyword */
-	private boolean enumEnabled = true;
-
-	/** Enable the "assert" keyword */
-	public void enableAssert(boolean shouldEnable) { assertEnabled = shouldEnable; }
-	/** Query the "assert" keyword state */
-	public boolean isAssertEnabled() { return assertEnabled; }
-	/** Enable the "enum" keyword */
-	public void enableEnum(boolean shouldEnable) { enumEnabled = shouldEnable; }
-	/** Query the "enum" keyword state */
-	public boolean isEnumEnabled() { return enumEnabled; }
-
-
-/** Bumped when inside '[x]' or '(x)', reset inside '{x}'.  See ONE_NL.  */
-	protected int parenLevel = 0;
-	protected int suppressNewline = 0;  // be really mean to newlines inside strings
-	protected static final int SCS_TRIPLE = 1, SCS_VAL = 2, SCS_LIT = 4, SCS_LIMIT = 8;
-	protected int stringCtorState = 0;  // hack string constructor boundaries
-	/** Push parenLevel here and reset whenever inside '{x}'. */
-	protected ArrayList parenLevelStack = new ArrayList();
-	protected Token lastToken = Token.badToken;
-
-	protected void pushParenLevel() {
-		parenLevelStack.add(new Integer(parenLevel*8 + stringCtorState));
-		parenLevel = 0;
-		stringCtorState = 0;
-	}
-	protected void popParenLevel() {
-		int npl = parenLevelStack.size();
-		if (npl == 0)  return;
-		int i = ((Integer) parenLevelStack.remove(--npl)).intValue();
-		parenLevel      = i / SCS_LIMIT;
-		stringCtorState = i % SCS_LIMIT;
-	}
-	
-	protected void restartStringCtor(boolean expectLiteral) {
-		if (stringCtorState != 0) {
-			stringCtorState = (expectLiteral? SCS_LIT: SCS_VAL) + (stringCtorState & SCS_TRIPLE);
-		}
-	}
-
-	void newlineCheck() throws RecognitionException {
-		if (suppressNewline > 0) {
-			suppressNewline = 0;
-			require(suppressNewline == 0,
-				"end of line reached within a simple string 'x' or \"x\"",
-				"for multi-line literals, use triple quotes '''x''' or \"\"\"x\"\"\"");
-		}
-		newline();
-	}
-	
-	/** This is a bit of plumbing which resumes collection of string constructor bodies,
-	 *  after an embedded expression has been parsed.
-	 *  Usage:  new GroovyRecognizer(new GroovyLexer(in).plumb()).
-	 */
-	public TokenStream plumb() {
-		return new TokenStream() {
-			public Token nextToken() throws TokenStreamException {
-				if (stringCtorState >= SCS_LIT) {
-					// This goo is modeled upon the ANTLR code for nextToken:
-					boolean tripleQuote = (stringCtorState & SCS_TRIPLE) != 0;
-					stringCtorState = 0;  // get out of this mode, now
-					resetText();
-					try {
-						mSTRING_CTOR_END(true, /*fromStart:*/false, tripleQuote);
-						return lastToken = _returnToken;
-					} catch (RecognitionException e) {
-						throw new TokenStreamRecognitionException(e);
-					} catch (CharStreamException cse) {
-						if ( cse instanceof CharStreamIOException ) {
-							throw new TokenStreamIOException(((CharStreamIOException)cse).io);
-						}
-						else {
-							throw new TokenStreamException(cse.getMessage());
-						}
-					}
-				}
-				return lastToken = GroovyLexer.this.nextToken();
-			}
-		};
-	}
-
-	// stuff to adjust ANTLR's tracing machinery
-    public static boolean tracing = false;  // only effective if antlr.Tool is run with -traceLexer
-    public void traceIn(String rname) throws CharStreamException {
-        if (!GroovyLexer.tracing)  return;
-        super.traceIn(rname);
-    }
-    public void traceOut(String rname) throws CharStreamException {
-        if (!GroovyLexer.tracing)  return;
-        if (_returnToken != null)  rname += tokenStringOf(_returnToken);
-        super.traceOut(rname);
-    }
-	private static java.util.HashMap ttypes;
-	private static String tokenStringOf(Token t) {
-		if (ttypes == null) {
-			java.util.HashMap map = new java.util.HashMap();
-			java.lang.reflect.Field[] fields = GroovyTokenTypes.class.getDeclaredFields();
-			for (int i = 0; i < fields.length; i++) {
-				if (fields[i].getType() != int.class)  continue;
-				try {
-					map.put(fields[i].get(null), fields[i].getName());
-				} catch (IllegalAccessException ee) {
-				}
-			}
-			ttypes = map;
-		}
-		Integer tt = new Integer(t.getType());
-		Object ttn = ttypes.get(tt);
-		if (ttn == null)  ttn = "<"+tt+">";
-		return "["+ttn+",\""+t.getText()+"\"]";
-	}
-
-	protected GroovyRecognizer parser;  // little-used link; TO DO: get rid of
-	private void require(boolean z, String problem, String solution) throws SemanticException {
-		// TO DO: Direct to a common error handler, rather than through the parser.
-		if (!z)  parser.requireFailed(problem, solution);
-	}
-}
-
-// TO DO:  Regexp ops, range ops, Borneo-style ops.
-
-/* *TODO*
-DOT (with double and triple dot) is an ordinary operator
-token; it doesn't need to be commented out.
-*/
-
-// OPERATORS
-QUESTION		:	'?'		;
-LPAREN			:	'('		{++parenLevel;};
-RPAREN			:	')'		{--parenLevel;};
-LBRACK			:	'['		{++parenLevel;};
-RBRACK			:	']'		{--parenLevel;};
-LCURLY			:	'{'		{pushParenLevel();};
-RCURLY			:	'}'		{popParenLevel(); if(stringCtorState!=0) restartStringCtor(true);};
-COLON			:	':'		;
-COMMA			:	','		;
-DOT			:	'.'		;
-ASSIGN			:	'='		;
-EQUAL			:	"=="	;
-LNOT			:	'!'		;
-BNOT			:	'~'		;
-NOT_EQUAL		:	"!="	;
-DIV				:	'/'		;
-DIV_ASSIGN		:	"/="	;
-PLUS			:	'+'		;
-PLUS_ASSIGN		:	"+="	;
-INC				:	"++"	;
-MINUS			:	'-'		;
-MINUS_ASSIGN	:	"-="	;
-DEC				:	"--"	;
-STAR			:	'*'		;
-STAR_ASSIGN		:	"*="	;
-MOD				:	'%'		;
-MOD_ASSIGN		:	"%="	;
-SR				:	">>"	;
-SR_ASSIGN		:	">>="	;
-BSR				:	">>>"	;
-BSR_ASSIGN		:	">>>="	;
-GE				:	">="	;
-GT				:	">"		;
-SL				:	"<<"	;
-SL_ASSIGN		:	"<<="	;
-LE				:	"<="	;
-LT				:	'<'		;
-BXOR			:	'^'		;
-BXOR_ASSIGN		:	"^="	;
-BOR				:	'|'		;
-BOR_ASSIGN		:	"|="	;
-LOR				:	"||"	;
-BAND			:	'&'		;
-BAND_ASSIGN		:	"&="	;
-LAND			:	"&&"	;
-SEMI			:	';'		;
-DOLLAR                  :       '$'             ;
-RANGE_INCLUSIVE		:       ".."    ;
-
-// Whitespace -- ignored
-WS      :       (
-                options { greedy=true; }:
-                        ' '
-                |       '\t'
-                |       '\f'
-                )+
-                { _ttype = Token.SKIP; }
-        ;
-
-protected
-ONE_NL! :       // handle newlines, which are significant in Groovy
-                (       options {generateAmbigWarnings=false;}
-                :       "\r\n"  // Evil DOS
-                |       '\r'    // Macintosh
-                |       '\n'    // Unix (the right way)
-                )
-                {
-                        // update current line number for error reporting
-                        newlineCheck();
-                }
-        ;
-        
-// Group any number of newlines (with comments and whitespace) into a single token.
-// This reduces the amount of parser lookahead required to parse around newlines.
-// It is an invariant that the parser never sees NLS tokens back-to-back.
-NLS     :       
-                (       ONE_NL
-                        (WS | SL_COMMENT | ML_COMMENT)*
-                        // (gobble, gobble)*
-                )+
-                // Inside (...) and [...] but not {...}, ignore newlines.
-                {   if (parenLevel != 0) {
-                                $setType(Token.SKIP);
-                        } else {
-                                $setText("<lineterm>");
-                        }
-                }
-        ;
-
-// Single-line comments
-SL_COMMENT
-        :       "//"
-                (~('\n'|'\r'))*
-                {$setType(Token.SKIP);}
-                ONE_NL
-        ;
-
-// multiple-line comments
-ML_COMMENT
-	:	"/*"
-		(	/*	'\r' '\n' can be matched in one alternative or by matching
-				'\r' in one iteration and '\n' in another. I am trying to
-				handle any flavor of newline that comes in, but the language
-				that allows both "\r\n" and "\r" and "\n" to all be valid
-				newline is ambiguous. Consequently, the resulting grammar
-				must be ambiguous. I'm shutting this warning off.
-			 */
-			options {
-				generateAmbigWarnings=false;
-			}
-		:
-			( '*' ~'/' ) => '*'
-		|	'\r' '\n'		{newlineCheck();}
-		|	'\r'			{newlineCheck();}
-		|	'\n'			{newlineCheck();}
-		|	~('*'|'\n'|'\r')
-		)*
-		"*/"
-		{$setType(Token.SKIP);}
-	;
-
-
-// string literals
-STRING_LITERAL
-                {int tt=0;}
-        :   ("'''") =>  //...shut off ambiguity warning
-                "'''"!
-                (   STRING_CH | ESC | '"' | '$'
-                |       ('\'' (~'\'' | '\'' ~'\'')) => '\''  // allow 1 or 2 close quotes
-                )*
-                "'''"!
-        |       '\''!
-                                        {++suppressNewline;}
-                (   STRING_CH | ESC | '"' | '$'  )*
-                                        {--suppressNewline;}
-                '\''!
-        |   ("\"\"\"") =>  //...shut off ambiguity warning
-                "\"\"\""!
-                tt=STRING_CTOR_END[true, /*tripleQuote:*/ true]
-                {$setType(tt);}
-        |       '"'!
-                                        {++suppressNewline;}
-                tt=STRING_CTOR_END[true, /*tripleQuote:*/ false]
-                {$setType(tt);}
-        ;
-
-protected
-STRING_CTOR_END[boolean fromStart, boolean tripleQuote]
-returns [int tt=STRING_CTOR_END]
-        :
-                (
-                        options {  greedy = true;  }:
-                    STRING_CH | ESC | '\''
-                |   ('"' (~'"' | '"' ~'"'))=> {tripleQuote}? '"'  // allow 1 or 2 close quotes
-                )*
-                (       (   { !tripleQuote }? "\""!
-                        |   {  tripleQuote }? "\"\"\""!
-                        )
-                        {
-                                if (fromStart)      tt = STRING_LITERAL;  // plain string literal!
-                                if (!tripleQuote)       {--suppressNewline;}
-                                // done with string constructor!
-                                //assert(stringCtorState == 0);
-                        }
-                |   '$'!
-                        {
-                                // (('*')? ('{' | LETTER)) =>
-                                int k = 1;
-                                char lc = LA(k);
-                                if (lc == '*')  lc = LA(++k);
-                                require(lc == '{' || (lc != '$' && Character.isJavaIdentifierStart(lc)),
-                                                "illegal string body character after dollar sign",
-                                                "either escape a literal dollar sign \"\\$5\" or bracket the value expression \"${5}\"");
-                                // Yes, it's a string constructor, and we've got a value part.
-                                tt = (fromStart ? STRING_CTOR_START : STRING_CTOR_MIDDLE);
-                                stringCtorState = SCS_VAL + (tripleQuote? SCS_TRIPLE: 0);
-                        }
-                )
-                {   $setType(tt);  }
-        ;
-
-protected
-STRING_CH
-        :   ~('"'|'\''|'\\'|'$'|'\n'|'\r')
-        ;
-
-// escape sequence -- note that this is protected; it can only be called
-// from another lexer rule -- it will not ever directly return a token to
-// the parser
-// There are various ambiguities hushed in this rule. The optional
-// '0'...'9' digit matches should be matched here rather than letting
-// them go back to STRING_LITERAL to be matched. ANTLR does the
-// right thing by matching immediately; hence, it's ok to shut off
-// the FOLLOW ambig warnings.
-protected
-ESC
-	:	'\\'!
-		(	'n'     {$setText("\n");}
-		|	'r'     {$setText("\r");}
-		|	't'     {$setText("\t");}
-		|	'b'     {$setText("\b");}
-		|	'f'     {$setText("\f");}
-		|	'"'
-		|	'\''
-		|	'\\'
-		|	'$'	//escape Groovy $ operator uniformly also
-		|	('u')+ {$setText("");}
-					HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
-					{char ch = (char)Integer.parseInt($getText,16); $setText(ch);}
-		|	'0'..'3'
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	'0'..'7'
-				(
-					options {
-						warnWhenFollowAmbig = false;
-					}
-				:	'0'..'7'
-				)?
-			)?
-					{char ch = (char)Integer.parseInt($getText.substring(1),8); $setText(ch);}
-		|	'4'..'7'
-			(
-				options {
-					warnWhenFollowAmbig = false;
-				}
-			:	'0'..'7'
-			)?
-				{char ch = (char)Integer.parseInt($getText.substring(1),8); $setText(ch);}
-		)
-	|!      '\\' ONE_NL
-        |!      ONE_NL          { $setText('\n'); }             // always normalize to newline
-	;
-
-
-// hexadecimal digit (again, note it's protected!)
-protected
-HEX_DIGIT
-	:	('0'..'9'|'A'..'F'|'a'..'f')
-	;
-
-
-// a dummy rule to force vocabulary to be all characters (except special
-// ones that ANTLR uses internally (0 to 2)
-protected
-VOCAB
-	:	'\3'..'\377'
-	;
-
-
-// an identifier. Note that testLiterals is set to true! This means
-// that after we match the rule, we look in the literals table to see
-// if it's a literal or really an identifer
-IDENT
-	options {testLiterals=true;}
-	:	LETTER(LETTER|DIGIT)*
-		{
-			if (stringCtorState != 0) {
-                                if (LA(1) == '.' && LA(2) != '$' &&
-                                                Character.isJavaIdentifierStart(LA(2))) {
-                                        // pick up another name component before going literal again:
-                                        restartStringCtor(false);
-                                } else {
-                                        // go back to the string
-                                        restartStringCtor(true);
-                                }
-                        }
-                        int ttype = testLiteralsTable(IDENT);
-                        if (ttype != IDENT && lastToken.getType() == DOT) {
-                                // A few keywords can follow a dot:
-                                switch (ttype) {
-                                case LITERAL_this: case LITERAL_super: case LITERAL_class:
-                                        break;
-                                default:
-                                        ttype = LITERAL_in;  // the poster child for bad dotted names
-                                }
-                        }
-                        $setType(ttype);
-
-			// check if "assert" keyword is enabled
-			if (assertEnabled && "assert".equals($getText)) {
-				$setType(LITERAL_assert); // set token type for the rule in the parser
-			}
-			// check if "enum" keyword is enabled
-			if (enumEnabled && "enum".equals($getText)) {
-				$setType(LITERAL_enum); // set token type for the rule in the parser
-			}
-		}
-	;
-
-protected
-LETTER
-        :   'a'..'z'|'A'..'Z'|'_'
-        // TO DO:  Recognize all the Java identifier starts here (except '$').
-        ;
-
-protected
-DIGIT
-        :   '0'..'9'
-        // TO DO:  Recognize all the Java identifier parts here (except '$').
-        ;
-
-// a numeric literal
-NUM_INT
-	{boolean isDecimal=false; Token t=null;}
-	:
-/*OBS*
-		'.' {_ttype = DOT;}
-			(
-				(('0'..'9')+ (EXPONENT)? (f1:FLOAT_SUFFIX {t=f1;})?
-				{
-				if (t != null && t.getText().toUpperCase().indexOf('F')>=0) {
-					_ttype = NUM_FLOAT;
-				}
-				else {
-					_ttype = NUM_DOUBLE; // assume double
-				}
-				})
-				|
-				// JDK 1.5 token for variable length arguments
-				(".." {_ttype = TRIPLE_DOT;})
-			)?
-	|
-*OBS*/
-	// TO DO:  This complex pattern seems wrong.  Verify or fix.
-	(	'0' {isDecimal = true;} // special case for just '0'
-			(	('x'|'X')
-				(											// hex
-					// the 'e'|'E' and float suffix stuff look
-					// like hex digits, hence the (...)+ doesn't
-					// know when to stop: ambig. ANTLR resolves
-					// it correctly by matching immediately. It
-					// is therefor ok to hush warning.
-					options {
-						warnWhenFollowAmbig=false;
-					}
-				:	HEX_DIGIT
-				)+
-
-			|	//float or double with leading zero
-				(('0'..'9')+ ('.'|EXPONENT|FLOAT_SUFFIX)) => ('0'..'9')+
-				{isDecimal=true;}
-
-			|	('0'..'7')+									// octal
-			)?
-		|	('1'..'9') ('0'..'9')*  {isDecimal=true;}		// non-zero decimal
-		)
-		(	('l'|'L') { _ttype = NUM_LONG; }
-		|	BIG_SUFFIX { _ttype = NUM_BIG_INT; }
-
-		// only check to see if it's a float if looks like decimal so far
-		|	{isDecimal}?
-			(	'.' ('0'..'9')+ (EXPONENT)? (f2:FLOAT_SUFFIX {t=f2;} | g2:BIG_SUFFIX {t=g2;})?
-			|	EXPONENT (f3:FLOAT_SUFFIX {t=f3;} | g3:BIG_SUFFIX {t=g3;})?
-			|	f4:FLOAT_SUFFIX {t=f4;}
-			)
-			{
-                                String txt = (t == null ? "" : t.getText().toUpperCase());
-                                if (txt.indexOf('F') >= 0) {
-                                        _ttype = NUM_FLOAT;
-                                } else if (txt.indexOf('G') >= 0) {
-                                        _ttype = NUM_BIG_DECIMAL;
-                                } else {
-                                        _ttype = NUM_DOUBLE; // assume double
-                                }
-                        }
-		)?
-	;
-
-// JDK 1.5 token for annotations and their declarations
-// also a groovy operator for actual field access e.g. 'telson.@age' 
-AT
-	:	'@'
-	;
-
-// a couple protected methods to assist in matching floating point numbers
-protected
-EXPONENT
-	:	('e'|'E') ('+'|'-')? ('0'..'9')+
-	;
-
-
-protected
-FLOAT_SUFFIX
-	:	'f'|'F'|'d'|'D'
-	;
-
-protected
-BIG_SUFFIX
-        :       'g'|'G'
-        ;
-
-// Here's a little hint for you, Emacs:
-// Local Variables:
-// mode: java
-// tab-width: 4
-// End:
diff --git a/groovy/jsr/ideas/parsers/antlr/misc/syndiag-0.0.1.jar b/groovy/jsr/ideas/parsers/antlr/misc/syndiag-0.0.1.jar
deleted file mode 100644
index a1738aa..0000000
--- a/groovy/jsr/ideas/parsers/antlr/misc/syndiag-0.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/antlr/run.sh b/groovy/jsr/ideas/parsers/antlr/run.sh
deleted file mode 100644
index b441a6f..0000000
--- a/groovy/jsr/ideas/parsers/antlr/run.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#/bin/sh
-
-export CLASSPATH=lib/antlr-2.7.4.jar:dist/groovyc-0.0.2.jar
-java org.codehaus.groovy.antlr.Main -showtree ../../../tck/test/misc/HelloWorld.groovy
diff --git a/groovy/jsr/ideas/parsers/antlr/src/manifest.txt b/groovy/jsr/ideas/parsers/antlr/src/manifest.txt
deleted file mode 100644
index 042f335..0000000
--- a/groovy/jsr/ideas/parsers/antlr/src/manifest.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: org.codehaus.groovy.antlr.Main
diff --git a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/AllTests.java b/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/AllTests.java
deleted file mode 100644
index bfc1da4..0000000
--- a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/AllTests.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.antlr;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.io.File;
-
-/**
- * A test suite which recurses through all of the available test case in
- * the test-new area
- *
- * @version $Revision$
- */
-public class AllTests extends TestSuiteSupport {
-
-    static String[] excludedTests = {
-
-        "LeftShiftTest.groovy",                 // TODO: can't parse foo.bar << something
-        "StreamingMarkupTest.groovy",           // TODO: can't parse foo.bar <<
-        "BuilderSupportTest.groovy",            // TODO: can't parse foo.bar <<
-        "bugs/ForAndSqlBug.groovy",             // TODO: can't parse foo.bar <<
-        "PrintTest.groovy",                     // TODO: can't parse foo.bar <<
-        "Groovy308_Bug.groovy",                 // TODO: can't parse foo.bar <<
-
-
-        "EscapedUnicodeTest.groovy",            // TODO: parser unicode handling
-
-        "ClosureTest.groovy",                   // TODO: need method pointers syntax
-
-
-        // TODO: Parser decisions to make
-        "DoWhileLoopTest.groovy",               // TODO: do { } while () not supported yet
-        "LoopBreakTest.groovy",                 // TODO: do { } while () not supported yet
-        "SafeNavigationTest.groovy",            // TODO: should we support -> safe navigation token?
-
-
-        // Ignored test cases which can't easily be run in this harness
-        // due to classpath issues
-        // (run them when we migrate New Groovy into groovy/groovy-core)
-        //-------------------------------------------------------------------------
-        "SqlCompleteTest.groovy",                   // not easy to run from in IDE...
-        "SqlCompleteWithoutDataSourceTest.groovy",  // not easy to run from in IDE...
-        "SqlWithBuilderTest.groovy",                // not easy to run from in IDE...
-        "SqlWithTypedResultsTest.groovy",           // not easy to run from in IDE...
-        "SerializeTest.groovy",                     // not easy to run from in IDE...
-        "SubscriptTest.groovy",
-        "ConstructorBug.groovy",
-        "PropertyTest.groovy",
-        "PrintlnWithNewBug.groovy",
-        "dom/DOMTest.groovy",
-        "SuperMethod2Bug.groovy",
-        "SuperMethodBug.groovy",
-    };
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        addTests(suite, new File("../../../../groovy-core/src/test-new/groovy"), excludedTests);
-        return suite;
-    }
-
-}
diff --git a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyMainTestSupport.java b/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyMainTestSupport.java
deleted file mode 100644
index 51d6c73..0000000
--- a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyMainTestSupport.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.antlr;
-
-import junit.framework.TestCase;
-import groovy.ui.GroovyMain;
-
-/**
- * @version $Revision$
- */
-public class GroovyMainTestSupport extends TestCase {
-    public GroovyMainTestSupport(String name) {
-        super(name);
-    }
-
-    public int countTestCases() {
-        return 1;
-    }
-
-
-    protected void runTest() throws Throwable {
-        String fullName = getName();
-        System.out.println("Running test: " + fullName);
-        GroovyMain.main(new String[]{fullName});
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyRecognizerTest.java b/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyRecognizerTest.java
deleted file mode 100644
index a83c0da..0000000
--- a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/GroovyRecognizerTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.codehaus.groovy.antlr;
-import junit.framework.*;
-
-import java.io.Reader;
-import java.io.StringReader;
-
-public class GroovyRecognizerTest extends TestCase {
-    private GroovyRecognizer g;
-
-    public GroovyRecognizerTest(String name) {
-        super(name);
-    }
-
-    public static void main(String args[]) {
-        junit.textui.TestRunner.run(GroovyRecognizerTest.class);
-    }
-
-    protected void setUp() {
-        Reader r = new StringReader("public class Foo {}");
-        GroovyLexer lexer = new GroovyLexer(r);
-        g = new GroovyRecognizer(lexer);
-    }
-
-    public void testInstatiation() {
-        assertNotNull("groovy recognizer should exist",g);
-    }
-
-    public void testParse() {
-	try {
-	    g.compilationUnit();
-	} catch (Exception e) {
-        fail(e.getMessage());
-	}
-    }
-
-    protected void tearDown() {
-        g = null;
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/TestSuiteSupport.java b/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/TestSuiteSupport.java
deleted file mode 100644
index bf4b4bd..0000000
--- a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/TestSuiteSupport.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.antlr;
-
-import groovy.ui.GroovyMain;
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-import junit.framework.AssertionFailedError;
-import junit.framework.Protectable;
-
-import java.io.File;
-
-/**
- * A helper class for making a test suite of a group of Groovy script names
- *
- * @version $Revision$
- */
-public class TestSuiteSupport implements Test, Protectable {
-    private String fullName;
-
-    public int countTestCases() {
-        return 1;
-    }
-
-    public void run(TestResult result) {
-        result.startTest(this);
-        result.runProtected(this, this);
-        result.endTest(this);
-    }
-
-    public void protect() throws Throwable {
-        System.out.println("Running test: " + fullName);
-        GroovyMain.main(new String[]{fullName});
-
-        // TODO how do we extract any JUnit test failures?
-    }
-
-    public String toString() {
-        return "testCase for: " + fullName;
-    }
-
-    /**
-     * Adds the named test scripts within the given directory to the suite
-     */
-    protected static void addTests(TestSuite suite, String directory, String[] names) {
-        for (int i = 0; i < names.length; i++) {
-            String name = names[i];
-            String fullName = directory + name;
-
-            addTest(suite, fullName);
-        }
-    }
-
-    /**
-     * Adds a single test case or recurses into a directory adding all the test cases
-     */
-    protected static void addTests(TestSuite suite, File file, String[] excludedTests) {
-        if (file.isDirectory()) {
-            File[] files = file.listFiles();
-            for (int i = 0; i < files.length; i++) {
-                File child = files[i];
-                addTests(suite, child, excludedTests);
-            }
-        }
-        else {
-            String path = file.getPath();
-            if (path.endsWith("Test.groovy") || path.endsWith("Bug.groovy") ) {
-                // lets check it doesn't end with any of the excluded tests
-                for (int i = 0; i < excludedTests.length; i++) {
-                    String excludedTest = excludedTests[i];
-                    if (path.endsWith(excludedTest)) {
-                        return;
-                    }
-                }
-                addTest(suite, path);
-            }
-        }
-    }
-
-    protected static void addTest(TestSuite suite, String fullName) {
-        suite.addTest(new GroovyMainTestSupport(fullName));
-        /*
-        TestSuiteSupport childTest = new TestSuiteSupport();
-        childTest.fullName = fullName;
-        TestSuite childSuite = new TestSuite(fullName);
-
-        childSuite.addTest(childTest);
-        suite.addTest(childSuite);
-        */
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/UberTests.java b/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/UberTests.java
deleted file mode 100644
index 19b4106..0000000
--- a/groovy/jsr/ideas/parsers/antlr/test/org/codehaus/groovy/antlr/UberTests.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.antlr;
-
-import groovy.ui.GroovyMain;
-import junit.framework.Test;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-/**
- * A simpler test runner to run multiple test cases straight from the groovy scripts
- *
- * @version $Revision$
- */
-public class UberTests extends TestSuiteSupport {
-
-    static String[] classicTests = {
-        // "AmbiguousInvocationTest.groovy",  - requires classpath stuff
-        "AssertNumberTest.groovy",
-        "AssertTest.groovy",
-        "Bar.groovy",
-        "BindingTest.groovy",
-        "BooleanOperationTest.groovy",
-        //"CastTest.groovy",                    TODO parser bug: ${foo.class} in GStrings
-        "ChainedAssignment.groovy",
-        "ClassLoaderBug.groovy",
-        //"ClosureCloneTest.groovy",            TODO parser bug: doesn't like 'it * foo' expressions
-        "ClosureInClosureTest.groovy",
-        "CompilerErrorTest.groovy",
-        "DateTest.groovy",
-        "Foo.groovy",
-        "ForLoopTest.groovy",
-        "ForLoopWithLocalVariablesTest.groovy",
-        "GStringTest.groovy",
-        "HeredocsTest.groovy",
-        "IfElseCompactTest.groovy",
-        "IfElseTest.groovy",
-        "IfTest.groovy",
-        "ImportTest.groovy",
-        "InstanceofTest.groovy",
-        //"ListTest.groovy",                   TODO parser bugs
-        "LogicTest.groovy",
-        "MethodCallTest.groovy",
-        "MultilineStringTest.groovy",
-        "MultiplyDivideEqualsTest.groovy",
-        "NegationTests.groovy",
-        // "OptionalReturnTest.groovy",         TODO parser currently requires mandatory return for last exp = booleanExpr
-        // "PrimitiveTypeFieldTest.groovy",     TODO when parser can do closure arguments
-        "PostfixTest.groovy",
-        "PrimitiveTypesTest.groovy",
-        "PrefixTest.groovy",
-        // "ReturnTest.groovy",                 TODO parser bug
-        "RangeTest.groovy",
-        "StringOperationTest.groovy",
-        //"SubscriptTest.groovy",               TODO array initialisers
-        "ThrowTest.groovy",
-        "UnaryMinusTest.groovy",
-        //"WhileLoopTest.groovy",               TODO parser bug
-    };
-
-    static String[] tckTests = {
-        "misc/AnnotationTest.groovy",
-        "misc/FieldPropertyMethodDisambiguationTest.groovy",
-        "misc/PropertyCalledNameTest.groovy",
-        "misc/PropertyTest.groovy",
-        "misc/SampleTest.groovy",
-    };
-
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        addTests(suite, "../../../../groovy-core/src/test-new/groovy/", classicTests);
-        addTests(suite, "../../../tck/test/", tckTests);
-        return suite;
-    }
-
-}
diff --git a/groovy/jsr/ideas/parsers/antlr/treewalker/build.xml b/groovy/jsr/ideas/parsers/antlr/treewalker/build.xml
deleted file mode 100644
index 335504f..0000000
--- a/groovy/jsr/ideas/parsers/antlr/treewalker/build.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<project name="groovy-treewalker" default="default">
-
-  <target name="default" 
-          depends="genTreeWalker" 
-          description="default: build everything" />
-
-  <target name="genTreeGrammar" description="regenerates GroovyRecognizerTree.g (requires antlr2.8.x)">
-    <mkdir dir="gensrc"/>
-    <copy file="../../../../../groovy-core/src/main/org/codehaus/groovy/antlr/groovy.g" todir="gensrc"/>
-
-    <exec executable="patch">
-      <arg value="gensrc/groovy.g"/>
-      <arg value="tree.construction.patch"/>
-    </exec>
-
-    <java classname="antlr.Tool" dir="gensrc" fork="yes">
-      <arg value="-tree"/>
-      <arg value="groovy.g"/>
-      <classpath>
-        <pathelement location="lib/antlr.jar"/>
-      </classpath>
-    </java>
-
-    <copy file="gensrc/GroovyRecognizerTree.g" todir="src"/>
-  </target>
-
-  <target name="genTreeWalker" description="generate tree walker">
-    <mkdir dir="gensrc"/>
-    <copy file="src/GroovyRecognizerTree.g" todir="gensrc"/>
-
-    <exec executable="patch">
-      <arg value="gensrc/GroovyRecognizerTree.g"/>
-      <arg value="tree.fixes.patch"/>
-    </exec>
-
-    <java classname="antlr.Tool" dir="gensrc" fork="yes">
-      <arg value="GroovyRecognizerTree.g"/>
-      <classpath>
-        <pathelement location="lib/antlr.jar"/>
-      </classpath>
-    </java>    
-  </target>
-
-  <target name="clean" description="clean generated files">
-    <delete dir="gensrc"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/groovy/jsr/ideas/parsers/antlr/treewalker/lib/antlr.jar b/groovy/jsr/ideas/parsers/antlr/treewalker/lib/antlr.jar
deleted file mode 100644
index fbe5e3c..0000000
--- a/groovy/jsr/ideas/parsers/antlr/treewalker/lib/antlr.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/antlr/treewalker/src/GroovyRecognizerTree.g b/groovy/jsr/ideas/parsers/antlr/treewalker/src/GroovyRecognizerTree.g
deleted file mode 100644
index 6e36a4f..0000000
--- a/groovy/jsr/ideas/parsers/antlr/treewalker/src/GroovyRecognizerTree.g
+++ /dev/null
@@ -1,2263 +0,0 @@
-// ANTLR generated tree grammar
-
-
-
-
-header {
-}
-
-class GroovyRecognizerTree extends TreeParser;
-options {
-	buildAST = false;
-}
-
-
-compilationUnit
-	:
-	(
-		packageDefinition
-		|
-			(
-				statement
-			)?
-	)
-	(
-		(
-			statement
-		)?
-	)*
-	;
-
-snippetUnit
-	:
-	blockBody
-	;
-
-packageDefinition
-	:
-	#( 
-		PACKAGE_DEF
-		annotationsOpt
-		identifier
-	)
-	;
-
-importStatement
-	:
-	#( 
-		"import"
-		identifierStar
-	)
-	;
-
-typeDefinitionInternal
-	:
-	classDefinition
-	|
-		interfaceDefinition
-	|
-		enumDefinition
-	|
-		annotationDefinition
-	;
-
-singleDeclaration
-	:
-	(
-		varInitializer
-	)?
-	;
-
-upperCaseIdent
-	:
-	IDENT
-	;
-
-typeSpec
-	:
-	classTypeSpec
-	|
-		builtInTypeSpec
-	;
-
-classTypeSpec
-	:
-	declaratorBrackets
-	;
-
-classOrInterfaceType0a
-	:
-	#( 
-		IDENT
-		(
-			typeArguments
-		)?
-	)
-	|
-		#( 
-			DOT
-			classOrInterfaceType0a
-			IDENT
-			(
-				typeArguments
-			)?
-		)
-	;
-
-classOrInterfaceType
-	:
-	#( 
-		DOT
-		classOrInterfaceType0a
-		IDENT
-		(
-			typeArguments
-		)?
-	)
-	|
-		#( 
-			IDENT
-			(
-				typeArguments
-			)?
-		)
-	;
-
-typeArgumentSpec
-	:
-	classTypeSpec
-	|
-		builtInTypeArraySpec
-	;
-
-typeArgument
-	:
-	(
-		typeArgumentSpec
-		|
-			wildcardType
-	)
-	;
-
-wildcardType
-	:
-	#( 
-		WILDCARD_TYPE
-		(
-			typeArgumentBounds
-		)?
-	)
-	;
-
-typeArguments
-	:
-	typeArgument
-	(
-		typeArgument
-	)*
-	(
-		typeArgumentsOrParametersEnd
-	)?
-	;
-
-typeArgumentBounds
-	:
-	classOrInterfaceType
-	;
-
-builtInTypeArraySpec
-	:
-	(
-		declaratorBrackets
-		|
-	)
-	;
-
-builtInTypeSpec
-	:
-	declaratorBrackets
-	;
-
-type
-	:
-	classOrInterfaceType
-	|
-		builtInType
-	;
-
-builtInType
-	:
-	"void"
-	|
-		"boolean"
-	|
-		"byte"
-	|
-		"char"
-	|
-		"short"
-	|
-		"int"
-	|
-		"float"
-	|
-		"long"
-	|
-		"double"
-	|
-		"any"
-	;
-
-identifier0a
-	:
-	IDENT
-	|
-		#( 
-			DOT
-			identifier0a
-			IDENT
-		)
-	;
-
-identifier
-	:
-	#( 
-		DOT
-		identifier0a
-		IDENT
-	)
-	|
-		IDENT
-	;
-
-identifierStar0a
-	:
-	IDENT
-	|
-		#( 
-			DOT
-			identifierStar0a
-			IDENT
-		)
-	;
-
-identifierStar
-	:
-	#( 
-		DOT
-		#( 
-			DOT
-			identifierStar0a
-			IDENT
-		)
-		STAR
-	)
-	|
-		#( 
-			"as"
-			#( 
-				DOT
-				identifierStar0a
-				IDENT
-			)
-			IDENT
-		)
-	|
-		#( 
-			DOT
-			identifierStar0a
-			IDENT
-		)
-	|
-		#( 
-			DOT
-			IDENT
-			STAR
-		)
-	|
-		#( 
-			"as"
-			IDENT
-			IDENT
-		)
-	|
-		IDENT
-	;
-
-modifiersInternal
-	:
-	(
-		modifier
-		|
-			annotation
-		|
-	)+
-	;
-
-modifiers
-	:
-	modifiersInternal
-	;
-
-modifiersOpt
-	:
-	(
-		modifiersInternal
-	)?
-	;
-
-modifier
-	:
-	"private"
-	|
-		"public"
-	|
-		"protected"
-	|
-		"static"
-	|
-		"transient"
-	|
-		"final"
-	|
-		"abstract"
-	|
-		"native"
-	|
-		"threadsafe"
-	|
-		"synchronized"
-	|
-		"volatile"
-	|
-		"strictfp"
-	;
-
-annotationsOpt
-	:
-	(
-		annotation
-	)*
-	;
-
-annotationArguments
-	:
-	annotationMemberValueInitializer
-	|
-		anntotationMemberValuePairs
-	;
-
-anntotationMemberValuePairs
-	:
-	annotationMemberValuePair
-	(
-		annotationMemberValuePair
-	)*
-	;
-
-annotationMemberValueInitializer
-	:
-	conditionalExpression
-	|
-		annotation
-	;
-
-annotationMemberArrayValueInitializer
-	:
-	conditionalExpression
-	|
-		annotation
-	;
-
-typeParameters
-	:
-	typeParameter
-	(
-		typeParameter
-	)*
-	(
-		typeArgumentsOrParametersEnd
-	)?
-	;
-
-typeParameter
-	:
-	(
-		IDENT
-	)
-	(
-		typeParameterBounds
-	)?
-	;
-
-typeParameterBounds
-	:
-	classOrInterfaceType
-	(
-		classOrInterfaceType
-	)*
-	;
-
-classBlock
-	:
-	(
-		classField
-	)?
-	(
-		(
-			classField
-		)?
-	)*
-	;
-
-interfaceBlock
-	:
-	(
-		interfaceField
-	)?
-	(
-		(
-			interfaceField
-		)?
-	)*
-	;
-
-annotationBlock
-	:
-	(
-		annotationField
-	)?
-	(
-		(
-			annotationField
-		)?
-	)*
-	;
-
-enumBlock
-	:
-	(
-		enumConstants
-		|
-			(
-				classField
-			)?
-	)
-	(
-		(
-			classField
-		)?
-	)*
-	;
-
-enumConstantsStart
-	:
-	enumConstant
-	(
-		COMMA
-		|
-			SEMI
-		|
-			NLS
-		|
-			RCURLY
-	)
-	;
-
-enumConstants
-	:
-	enumConstant
-	(
-		enumConstant
-	)*
-	;
-
-enumConstantBlock
-	:
-	(
-		enumConstantField
-	)?
-	(
-		(
-			enumConstantField
-		)?
-	)*
-	;
-
-interfaceExtends
-	:
-	(
-		classOrInterfaceType
-		(
-			classOrInterfaceType
-		)*
-	)?
-	;
-
-implementsClause
-	:
-	(
-		classOrInterfaceType
-		(
-			classOrInterfaceType
-		)*
-	)?
-	;
-
-constructorBody
-	:
-	#( 
-		SLIST
-		(
-			explicitConstructorInvocation
-			(
-				blockBody
-			)?
-			|
-				blockBody
-		)
-	)
-	;
-
-explicitConstructorInvocation
-	:
-	#( 
-		CTOR_CALL
-		(
-			typeArguments
-		)?
-		argList
-	)
-	|
-		#( 
-			SUPER_CTOR_CALL
-			(
-				typeArguments
-			)?
-			argList
-		)
-	;
-
-variableDefinitions
-	:
-	variableDeclarator
-	(
-		variableDeclarator
-	)*
-	|
-		(
-			IDENT
-			|
-				STRING_LITERAL
-		)
-	;
-
-constructorDefinition
-	:
-	IDENT
-	;
-
-variableName
-	:
-	IDENT
-	;
-
-declaratorBrackets0a
-	:
-	#( 
-		ARRAY_DECLARATOR
-		declaratorBrackets0a
-	)
-	|
-	;
-
-declaratorBrackets
-	:
-	#( 
-		ARRAY_DECLARATOR
-		declaratorBrackets0a
-	)
-	|
-	;
-
-varInitializer
-	:
-	#( 
-		ASSIGN
-		expression
-	)
-	;
-
-throwsClause
-	:
-	#( 
-		"throws"
-		identifier
-		(
-			identifier
-		)*
-	)
-	;
-
-parameterDeclarationList
-	:
-	(
-		parameterDeclaration
-		(
-			parameterDeclaration
-		)*
-	)?
-	;
-
-simpleParameterDeclarationList
-	:
-	simpleParameterDeclaration
-	(
-		simpleParameterDeclaration
-	)*
-	;
-
-parameterModifiersOpt
-	:
-	(
-		"final"
-		|
-			annotation
-		|
-	)*
-	;
-
-closureParametersOpt
-	:
-	parameterDeclarationList
-	|
-		oldClosureParameters
-	|
-		implicitParameters
-	|
-	;
-
-oldClosureParameters
-	:
-	parameterDeclarationList
-	|
-		simpleParameterDeclarationList
-	|
-	;
-
-compoundStatement
-	:
-	openBlock
-	;
-
-openBlock
-	:
-	#( 
-		SLIST
-		blockBody
-	)
-	;
-
-blockBody
-	:
-	(
-		statement
-	)?
-	(
-		(
-			statement
-		)?
-	)*
-	;
-
-closedBlock
-	:
-	#( 
-		CLOSED_BLOCK
-		closureParametersOpt
-		blockBody
-	)
-	;
-
-openOrClosedBlock
-	:
-	#( 
-		LCURLY
-		closureParametersOpt
-		blockBody
-	)
-	;
-
-statement
-	:
-	(
-		openOrClosedBlock
-		|
-			statement
-	)
-	|
-		expressionStatement
-	|
-		typeDefinitionInternal
-	|
-		forStatement
-	|
-		#( 
-			"while"
-			strictContextExpression
-			compatibleBodyStatement
-		)
-	|
-		#( 
-			"with"
-			strictContextExpression
-			compoundStatement
-		)
-	|
-		#( 
-			SPREAD_ARG
-			expressionStatement
-		)
-	|
-		importStatement
-	|
-		tryBlock
-	|
-		#( 
-			"synchronized"
-			strictContextExpression
-			compoundStatement
-		)
-	|
-		branchStatement
-	|
-		declaration
-	;
-
-forStatement
-	:
-	#( 
-		"for"
-		(
-			traditionalForClause
-			|
-				forInClause
-		)
-		compatibleBodyStatement
-	)
-	;
-
-traditionalForClause
-	:
-	forInit
-	forCond
-	forIter
-	;
-
-forInClause
-	:
-	#( 
-		"in"
-		(
-			singleDeclarationNoInit
-			|
-				IDENT
-		)
-		shiftExpression
-	)
-	|
-		#( 
-			COLON
-			(
-				singleDeclarationNoInit
-				|
-					IDENT
-			)
-			expression
-		)
-	;
-
-compatibleBodyStatement
-	:
-	compoundStatement
-	|
-		statement
-	;
-
-branchStatement
-	:
-	#( 
-		"break"
-		(
-			statementLabelPrefix
-		)?
-		(
-			expression
-		)?
-	)
-	|
-		#( 
-			"continue"
-			(
-				statementLabelPrefix
-			)?
-			(
-				expression
-			)?
-		)
-	|
-		#( 
-			"throw"
-			expression
-		)
-	|
-		#( 
-			"assert"
-			expression
-			(
-				expression
-			)?
-		)
-	|
-		#( 
-			"return"
-			(
-				expression
-			)?
-		)
-	;
-
-statementLabelPrefix
-	:
-	#( 
-		LABELED_STAT
-		IDENT
-	)
-	;
-
-expressionStatement
-	:
-	(
-		checkSuspiciousExpressionStatement
-	)?
-	expression
-	;
-
-suspiciousExpressionStatementStart
-	:
-	(
-		(
-			PLUS
-			|
-				MINUS
-		)
-		|
-			(
-				LBRACK
-				|
-					LPAREN
-				|
-					LCURLY
-			)
-	)
-	;
-
-casesGroup
-	:
-	(
-		aCase
-	)+
-	caseSList
-	;
-
-aCase
-	:
-	#( 
-		"case"
-		expression
-	)
-	|
-		(
-			"default"
-		)
-	;
-
-caseSList
-	:
-	statement
-	(
-		(
-			statement
-		)?
-	)*
-	;
-
-forInit
-	:
-	declaration
-	|
-		(
-			controlExpressionList
-		)?
-	;
-
-forCond
-	:
-	(
-		strictContextExpression
-	)?
-	;
-
-forIter
-	:
-	(
-		controlExpressionList
-	)?
-	;
-
-tryBlock
-	:
-	#( 
-		"try"
-		compoundStatement
-		(
-			handler
-		)*
-		(
-			finallyClause
-		)?
-	)
-	;
-
-finallyClause
-	:
-	#( 
-		"finally"
-		compoundStatement
-	)
-	;
-
-handler
-	:
-	#( 
-		"catch"
-		parameterDeclaration
-		compoundStatement
-	)
-	;
-
-commandArguments
-	:
-	expression
-	(
-		expression
-	)*
-	;
-
-expression
-	:
-	assignmentExpression
-	;
-
-controlExpressionList
-	:
-	strictContextExpression
-	(
-		strictContextExpression
-	)*
-	;
-
-pathElement
-	:
-	#( 
-		SPREAD_DOT
-		(
-			typeArguments
-		)?
-		namePart
-	)
-	|
-		#( 
-			OPTIONAL_DOT
-			(
-				typeArguments
-			)?
-			namePart
-		)
-	|
-		#( 
-			MEMBER_POINTER
-			(
-				typeArguments
-			)?
-			namePart
-		)
-	|
-		#( 
-			DOT
-			(
-				typeArguments
-			)?
-			namePart
-		)
-	|
-	;
-
-namePart
-	:
-	#( 
-		AT
-		(
-			IDENT
-			|
-				STRING_LITERAL
-			|
-				openBlock
-			|
-				keywordPropertyNames
-			|
-		)
-	)
-	|
-		(
-			IDENT
-			|
-				STRING_LITERAL
-			|
-				openBlock
-			|
-				keywordPropertyNames
-			|
-		)
-	;
-
-keywordPropertyNames
-	:
-	(
-		"class"
-		|
-			"in"
-		|
-			"as"
-		|
-			"def"
-		|
-			"if"
-		|
-			"else"
-		|
-			"for"
-		|
-			"while"
-		|
-			"do"
-		|
-			"switch"
-		|
-			"try"
-		|
-			"catch"
-		|
-			"finally"
-		|
-			builtInType
-	)
-	;
-
-dynamicMemberName
-	:
-	(
-		parenthesizedExpression
-		|
-			stringConstructorExpression
-	)
-	;
-
-methodCallArgs
-	:
-	#( 
-		METHOD_CALL
-		argList
-	)
-	;
-
-appendedBlock
-	:
-	closedBlock
-	;
-
-indexPropertyArgs
-	:
-	#( 
-		INDEX_OP
-		argList
-	)
-	;
-
-assignmentExpression
-	:
-	#( 
-		ASSIGN
-		conditionalExpression
-		assignmentExpression
-	)
-	|
-		#( 
-			PLUS_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			MINUS_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			STAR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			DIV_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			MOD_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			SR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			BSR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			SL_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			BAND_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			BXOR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			BOR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		#( 
-			STAR_STAR_ASSIGN
-			conditionalExpression
-			assignmentExpression
-		)
-	|
-		conditionalExpression
-	;
-
-conditionalExpression
-	:
-	#( 
-		QUESTION
-		logicalOrExpression
-		assignmentExpression
-		conditionalExpression
-	)
-	|
-		logicalOrExpression
-	;
-
-logicalOrExpression0a
-	:
-	logicalAndExpression
-	|
-		#( 
-			LOR
-			logicalOrExpression0a
-			logicalAndExpression
-		)
-	;
-
-logicalOrExpression
-	:
-	#( 
-		LOR
-		logicalOrExpression0a
-		logicalAndExpression
-	)
-	|
-		logicalAndExpression
-	;
-
-logicalAndExpression0a
-	:
-	inclusiveOrExpression
-	|
-		#( 
-			LAND
-			logicalAndExpression0a
-			inclusiveOrExpression
-		)
-	;
-
-logicalAndExpression
-	:
-	#( 
-		LAND
-		logicalAndExpression0a
-		inclusiveOrExpression
-	)
-	|
-		inclusiveOrExpression
-	;
-
-inclusiveOrExpression0a
-	:
-	exclusiveOrExpression
-	|
-		#( 
-			BOR
-			inclusiveOrExpression0a
-			exclusiveOrExpression
-		)
-	;
-
-inclusiveOrExpression
-	:
-	#( 
-		BOR
-		inclusiveOrExpression0a
-		exclusiveOrExpression
-	)
-	|
-		exclusiveOrExpression
-	;
-
-exclusiveOrExpression0a
-	:
-	andExpression
-	|
-		#( 
-			BXOR
-			exclusiveOrExpression0a
-			andExpression
-		)
-	;
-
-exclusiveOrExpression
-	:
-	#( 
-		BXOR
-		exclusiveOrExpression0a
-		andExpression
-	)
-	|
-		andExpression
-	;
-
-andExpression0a
-	:
-	regexExpression
-	|
-		#( 
-			BAND
-			andExpression0a
-			regexExpression
-		)
-	;
-
-andExpression
-	:
-	#( 
-		BAND
-		andExpression0a
-		regexExpression
-	)
-	|
-		regexExpression
-	;
-
-regexExpression0a
-	:
-	equalityExpression
-	|
-		#( 
-			REGEX_FIND
-			regexExpression0a
-			equalityExpression
-		)
-	|
-		#( 
-			REGEX_MATCH
-			regexExpression0b
-			equalityExpression
-		)
-	;
-
-regexExpression0b
-	:
-	equalityExpression
-	|
-		#( 
-			REGEX_FIND
-			regexExpression0a
-			equalityExpression
-		)
-	|
-		#( 
-			REGEX_MATCH
-			regexExpression0b
-			equalityExpression
-		)
-	;
-
-regexExpression
-	:
-	#( 
-		REGEX_FIND
-		regexExpression0a
-		equalityExpression
-	)
-	|
-		#( 
-			REGEX_MATCH
-			regexExpression0b
-			equalityExpression
-		)
-	|
-		equalityExpression
-	;
-
-equalityExpression0a
-	:
-	relationalExpression
-	|
-		#( 
-			NOT_EQUAL
-			equalityExpression0a
-			relationalExpression
-		)
-	|
-		#( 
-			EQUAL
-			equalityExpression0b
-			relationalExpression
-		)
-	|
-		#( 
-			COMPARE_TO
-			equalityExpression0c
-			relationalExpression
-		)
-	;
-
-equalityExpression0b
-	:
-	relationalExpression
-	|
-		#( 
-			NOT_EQUAL
-			equalityExpression0a
-			relationalExpression
-		)
-	|
-		#( 
-			EQUAL
-			equalityExpression0b
-			relationalExpression
-		)
-	|
-		#( 
-			COMPARE_TO
-			equalityExpression0c
-			relationalExpression
-		)
-	;
-
-equalityExpression0c
-	:
-	relationalExpression
-	|
-		#( 
-			NOT_EQUAL
-			equalityExpression0a
-			relationalExpression
-		)
-	|
-		#( 
-			EQUAL
-			equalityExpression0b
-			relationalExpression
-		)
-	|
-		#( 
-			COMPARE_TO
-			equalityExpression0c
-			relationalExpression
-		)
-	;
-
-equalityExpression
-	:
-	#( 
-		NOT_EQUAL
-		equalityExpression0a
-		relationalExpression
-	)
-	|
-		#( 
-			EQUAL
-			equalityExpression0b
-			relationalExpression
-		)
-	|
-		#( 
-			COMPARE_TO
-			equalityExpression0c
-			relationalExpression
-		)
-	|
-		relationalExpression
-	;
-
-relationalExpression
-	:
-	#( 
-		LT
-		shiftExpression
-		shiftExpression
-	)
-	|
-		#( 
-			GT
-			shiftExpression
-			shiftExpression
-		)
-	|
-		#( 
-			LE
-			shiftExpression
-			shiftExpression
-		)
-	|
-		#( 
-			GE
-			shiftExpression
-			shiftExpression
-		)
-	|
-		#( 
-			"in"
-			shiftExpression
-			shiftExpression
-		)
-	|
-		shiftExpression
-	|
-		#( 
-			"instanceof"
-			shiftExpression
-			typeSpec
-		)
-	|
-		#( 
-			"as"
-			shiftExpression
-			typeSpec
-		)
-	;
-
-shiftExpression0a
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression0b
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression0c
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression0d
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression0e
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression0f
-	:
-	additiveExpression
-	|
-		#( 
-			SL
-			shiftExpression0a
-			additiveExpression
-		)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	;
-
-shiftExpression
-	:
-	#( 
-		SL
-		shiftExpression0a
-		additiveExpression
-	)
-	|
-		#( 
-			SR
-			shiftExpression0b
-			additiveExpression
-		)
-	|
-		#( 
-			BSR
-			shiftExpression0c
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_INCLUSIVE
-			shiftExpression0d
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0e
-			additiveExpression
-		)
-	|
-		#( 
-			RANGE_EXCLUSIVE
-			shiftExpression0f
-			additiveExpression
-		)
-	|
-		additiveExpression
-	;
-
-additiveExpression0a
-	:
-	multiplicativeExpression
-	|
-		#( 
-			PLUS
-			additiveExpression0a
-			multiplicativeExpression
-		)
-	|
-		#( 
-			MINUS
-			additiveExpression0b
-			multiplicativeExpression
-		)
-	;
-
-additiveExpression0b
-	:
-	multiplicativeExpression
-	|
-		#( 
-			PLUS
-			additiveExpression0a
-			multiplicativeExpression
-		)
-	|
-		#( 
-			MINUS
-			additiveExpression0b
-			multiplicativeExpression
-		)
-	;
-
-additiveExpression
-	:
-	#( 
-		PLUS
-		additiveExpression0a
-		multiplicativeExpression
-	)
-	|
-		#( 
-			MINUS
-			additiveExpression0b
-			multiplicativeExpression
-		)
-	|
-		multiplicativeExpression
-	;
-
-multiplicativeExpression0a
-	:
-	#( 
-		INC
-		powerExpression
-	)
-	|
-		#( 
-			STAR
-			multiplicativeExpression0a
-			powerExpression
-		)
-	|
-		#( 
-			DIV
-			multiplicativeExpression0b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression0c
-			powerExpression
-		)
-	;
-
-multiplicativeExpression0b
-	:
-	#( 
-		INC
-		powerExpression
-	)
-	|
-		#( 
-			STAR
-			multiplicativeExpression0a
-			powerExpression
-		)
-	|
-		#( 
-			DIV
-			multiplicativeExpression0b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression0c
-			powerExpression
-		)
-	;
-
-multiplicativeExpression0c
-	:
-	#( 
-		INC
-		powerExpression
-	)
-	|
-		#( 
-			STAR
-			multiplicativeExpression0a
-			powerExpression
-		)
-	|
-		#( 
-			DIV
-			multiplicativeExpression0b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression0c
-			powerExpression
-		)
-	;
-
-multiplicativeExpression
-	:
-	#( 
-		STAR
-		multiplicativeExpression0a
-		powerExpression
-	)
-	|
-		#( 
-			DIV
-			multiplicativeExpression0b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression0c
-			powerExpression
-		)
-	|
-		#( 
-			STAR
-			multiplicativeExpression1a
-			powerExpression
-		)
-	|
-		#( 
-			DIV
-			multiplicativeExpression1b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression1c
-			powerExpression
-		)
-	|
-		#( 
-			STAR
-			multiplicativeExpression4a
-			powerExpression
-		)
-	|
-		#( 
-			DIV
-			multiplicativeExpression4b
-			powerExpression
-		)
-	|
-		#( 
-			MOD
-			multiplicativeExpression4c
-			powerExpression
-		)
-	|
-		#( 
-			DEC
-			powerExpression
-		)
-	|
-		powerExpression
-	|
-		#( 
-			INC
-			powerExpression
-		)
-	;
-
-powerExpression0a
-	:
-	unaryExpressionNotPlusMinus
-	|
-		#( 
-			STAR_STAR
-			powerExpression0a
-			unaryExpression
-		)
-	;
-
-powerExpression
-	:
-	#( 
-		STAR_STAR
-		powerExpression0a
-		unaryExpression
-	)
-	|
-		unaryExpressionNotPlusMinus
-	;
-
-unaryExpression
-	:
-	#( 
-		DEC
-		unaryExpression
-	)
-	|
-		#( 
-			UNARY_MINUS
-			unaryExpression
-		)
-	|
-		#( 
-			UNARY_PLUS
-			unaryExpression
-		)
-	|
-		unaryExpressionNotPlusMinus
-	|
-		#( 
-			INC
-			unaryExpression
-		)
-	;
-
-unaryExpressionNotPlusMinus
-	:
-	#( 
-		LNOT
-		unaryExpression
-	)
-	|
-		#( 
-			LPAREN
-			builtInTypeSpec
-			unaryExpression
-		)
-	|
-		#( 
-			LPAREN
-			classTypeSpec
-			unaryExpressionNotPlusMinus
-		)
-	|
-		#( 
-			BNOT
-			unaryExpression
-		)
-	;
-
-postfixExpression
-	:
-	#( 
-		POST_INC
-		pathExpression
-	)
-	|
-		#( 
-			POST_DEC
-			pathExpression
-		)
-	|
-		pathExpression
-	;
-
-primaryExpression
-	:
-	IDENT
-	|
-		constant
-	|
-		newExpression
-	|
-		"this"
-	|
-		"super"
-	|
-		parenthesizedExpression
-	|
-		closureConstructorExpression
-	|
-		listOrMapConstructorExpression
-	|
-		stringConstructorExpression
-	|
-		scopeEscapeExpression
-	|
-		builtInType
-	;
-
-parenthesizedExpression
-	:
-	strictContextExpression
-	;
-
-scopeEscapeExpression
-	:
-	#( 
-		SCOPE_ESCAPE
-		(
-			IDENT
-			|
-				scopeEscapeExpression
-		)
-	)
-	;
-
-strictContextExpression
-	:
-	(
-		singleDeclaration
-		|
-			expression
-		|
-			branchStatement
-		|
-			annotation
-	)
-	;
-
-closureConstructorExpression
-	:
-	closedBlock
-	;
-
-stringConstructorExpression
-	:
-	STRING_CTOR_START
-	stringConstructorValuePart
-	(
-		STRING_CTOR_MIDDLE
-		stringConstructorValuePart
-	)*
-	STRING_CTOR_END
-	;
-
-stringConstructorValuePart
-	:
-	#( 
-		SPREAD_ARG
-		(
-			identifier
-			|
-				openOrClosedBlock
-		)
-	)
-	|
-		(
-			identifier
-			|
-				openOrClosedBlock
-		)
-	;
-
-listOrMapConstructorExpression
-	:
-	LBRACK
-	|
-		#( 
-			LBRACK
-			argList
-		)
-	;
-
-newExpression
-	:
-	#( 
-		"new"
-		(
-			typeArguments
-		)?
-		type
-		(
-			newArrayDeclarator
-			|
-		)
-	)
-	;
-
-argList
-	:
-	(
-		argument
-		(
-			argument
-		)*
-		|
-	)
-	;
-
-argument
-	:
-	#( 
-		LABELED_ARG
-		argumentLabel
-		strictContextExpression
-	)
-	|
-		#( 
-			SPREAD_ARG
-			strictContextExpression
-		)
-	|
-		strictContextExpression
-	;
-
-argumentLabel
-	:
-	IDENT
-	|
-		keywordPropertyNames
-	|
-		primaryExpression
-	;
-
-newArrayDeclarator0a
-	:
-	#( 
-		ARRAY_DECLARATOR
-		newArrayDeclarator0a
-		(
-			expression
-		)?
-	)
-	|
-	;
-
-newArrayDeclarator
-	:
-	#( 
-		ARRAY_DECLARATOR
-		newArrayDeclarator0a
-		(
-			expression
-		)?
-	)
-	;
-
-constant
-	:
-	constantNumber
-	|
-		STRING_LITERAL
-	|
-		"true"
-	|
-		"false"
-	|
-		"null"
-	;
-
-constantNumber
-	:
-	NUM_INT
-	|
-		NUM_FLOAT
-	|
-		NUM_LONG
-	|
-		NUM_DOUBLE
-	|
-		NUM_BIG_INT
-	|
-		NUM_BIG_DECIMAL
-	;
diff --git a/groovy/jsr/ideas/parsers/antlr/treewalker/tree.construction.patch b/groovy/jsr/ideas/parsers/antlr/treewalker/tree.construction.patch
deleted file mode 100644
index 45d575d..0000000
--- a/groovy/jsr/ideas/parsers/antlr/treewalker/tree.construction.patch
+++ /dev/null
@@ -1,487 +0,0 @@
-Index: groovy.g
-===================================================================
-RCS file: /home/projects/groovy/scm/groovy/groovy-core/src/main/org/codehaus/groovy/antlr/groovy.g,v
-retrieving revision 1.24
-diff -c -r1.24 groovy.g
-*** groovy.g	13 Apr 2005 21:45:54 -0000	1.24
---- groovy.g	19 Apr 2005 21:32:05 -0000
-***************
-*** 387,393 ****
-  // Package statement: optional annotations followed by "package" then the package identifier.
-  packageDefinition
-          //TODO? options {defaultErrorHandler = true;} // let ANTLR handle errors
-!     :   annotationsOpt p:"package"^ {#p.setType(PACKAGE_DEF);} identifier
-      ;
-  
-  
---- 387,393 ----
-  // Package statement: optional annotations followed by "package" then the package identifier.
-  packageDefinition
-          //TODO? options {defaultErrorHandler = true;} // let ANTLR handle errors
-!     :   annotationsOpt "package"! ^[PACKAGE_DEF,"package"]^ identifier 
-      ;
-  
-  
-***************
-*** 602,608 ****
-  
-  // Wildcard type indicating all types (with possible constraint)
-  wildcardType
-!     :   q:QUESTION^ {#q.setType(WILDCARD_TYPE);}
-          (("extends" | "super")=> typeArgumentBounds)?
-      ;
-  
---- 602,608 ----
-  
-  // Wildcard type indicating all types (with possible constraint)
-  wildcardType
-!     :   QUESTION! ^[WILDCARD_TYPE,"?"]^
-          (("extends" | "super")=> typeArgumentBounds)?
-      ;
-  
-***************
-*** 808,814 ****
-  /*OBS*
-  // This is an initializer used to set up an annotation member array.
-  annotationMemberArrayInitializer
-!     :   lc:LCURLY^ {#lc.setType(ANNOTATION_ARRAY_INIT);}
-          (   annotationMemberArrayValueInitializer
-              (
-                  // CONFLICT: does a COMMA after an initializer start a new
---- 808,814 ----
-  /*OBS*
-  // This is an initializer used to set up an annotation member array.
-  annotationMemberArrayInitializer
-!     :   LCURLY! ^[ANNOTATION_ARRAY_INIT,"{"]^
-          (   annotationMemberArrayValueInitializer
-              (
-                  // CONFLICT: does a COMMA after an initializer start a new
-***************
-*** 1143,1149 ****
-      ;
-  
-  constructorBody
-!     :   lc:LCURLY^ nls!         {#lc.setType(SLIST);}
-          (   (explicitConstructorInvocation) =>   // Java compatibility hack
-                  explicitConstructorInvocation (sep! blockBody[sepToken])?
-              |   blockBody[EOF]
---- 1143,1149 ----
-      ;
-  
-  constructorBody
-!     :   LCURLY! ^[SLIST,"{"]^ nls!         
-          (   (explicitConstructorInvocation) =>   // Java compatibility hack
-                  explicitConstructorInvocation (sep! blockBody[sepToken])?
-              |   blockBody[EOF]
-***************
-*** 1155,1164 ****
-  /** Catch obvious constructor calls, but not the expr.super(...) calls */
-  explicitConstructorInvocation
-      :   (typeArguments)?
-!         (   "this"! lp1:LPAREN^ argList RPAREN!
-!             {#lp1.setType(CTOR_CALL);}
-!         |   "super"! lp2:LPAREN^ argList RPAREN!
-!             {#lp2.setType(SUPER_CTOR_CALL);}
-          )
-      ;
-  
---- 1155,1162 ----
-  /** Catch obvious constructor calls, but not the expr.super(...) calls */
-  explicitConstructorInvocation
-      :   (typeArguments)?
-!         (   "this"! LPAREN! ^[CTOR_CALL,"("]^ argList RPAREN!
-!         |   "super"! LPAREN! ^[SUPER_CTOR_CALL,"("]^ argList RPAREN!
-          )
-      ;
-  
-***************
-*** 1182,1187 ****
---- 1180,1186 ----
-  
-          (   id:IDENT
-          |   qid:STRING_LITERAL          {#qid.setType(IDENT);}  // use for operator defintions, etc.
-+             //todo Add ^[IDENT,????] tree construction syntax
-          )
-  
-          // parse the formal parameter declarations.
-***************
-*** 1267,1273 ****
-          (
-              // A following list constructor might conflict with index brackets; prefer the declarator.
-              options {greedy=true;} :
-!             lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!
-          )*
-      ;
-  
---- 1266,1272 ----
-          (
-              // A following list constructor might conflict with index brackets; prefer the declarator.
-              options {greedy=true;} :
-!             LBRACK! ^[ARRAY_DECLARATOR,"("]^ RBRACK!
-          )*
-      ;
-  
-***************
-*** 1280,1286 ****
-  /*OBS*
-  // This is an initializer used to set up an array.
-  arrayInitializer
-!     :   lc:LCURLY^ {#lc.setType(ARRAY_INIT);}
-          (   initializer
-              (
-                  // CONFLICT: does a COMMA after an initializer start a new
---- 1279,1285 ----
-  /*OBS*
-  // This is an initializer used to set up an array.
-  arrayInitializer
-!     :   LCURLY! ^[ARRAY_INIT,"{"]^
-          (   initializer
-              (
-                  // CONFLICT: does a COMMA after an initializer start a new
-***************
-*** 1494,1500 ****
-  
-  /** An open block is not allowed to have closure arguments. */
-  openBlock
-!     :   lc:LCURLY^ nls!     {#lc.setType(SLIST);}
-          // AST type of SLIST means "never gonna be a closure"
-          blockBody[EOF]
-          RCURLY!
---- 1493,1499 ----
-  
-  /** An open block is not allowed to have closure arguments. */
-  openBlock
-!     :   LCURLY! ^[SLIST,"{"]^ nls!     
-          // AST type of SLIST means "never gonna be a closure"
-          blockBody[EOF]
-          RCURLY!
-***************
-*** 1511,1517 ****
-   *  Only labeled, unparameterized blocks which occur directly as substatements are kept open.
-   */
-  closedBlock
-!     :   lc:LCURLY^ nls!     {#lc.setType(CLOSED_BLOCK);}
-          closureParametersOpt[true]
-          blockBody[EOF]
-          RCURLY!
---- 1510,1516 ----
-   *  Only labeled, unparameterized blocks which occur directly as substatements are kept open.
-   */
-  closedBlock
-!     :   LCURLY! ^[CLOSED_BLOCK,"{"]^ nls!     
-          closureParametersOpt[true]
-          blockBody[EOF]
-          RCURLY!
-***************
-*** 1533,1538 ****
---- 1532,1538 ----
-  openOrClosedBlock
-      :   lc:LCURLY^ nls!
-          cp:closureParametersOpt[false]
-+         // todo use ^[SLIST,???] or ^[CLOSED_BLOCK,???] tree construction syntax
-          {   if (#cp == null)    #lc.setType(SLIST);
-              else                #lc.setType(CLOSED_BLOCK);
-          }
-***************
-*** 1604,1610 ****
-  
-      // Splice statement, meaningful only inside a "with" expression.
-      // PROPOSED, DECIDE.  Prevents the namespace pollution of a "text" method or some such.
-!     |   sp:STAR^ nls!                       {#sp.setType(SPREAD_ARG);}
-          expressionStatement[EOF]
-      // Example:  with(htmlbuilder) { head{} body{ *"some text" } }
-      // Equivalent to:  { htmlbuilder.head{} htmlbuilder.body{ (htmlbuilder as Collection).add("some text") } }
---- 1604,1610 ----
-  
-      // Splice statement, meaningful only inside a "with" expression.
-      // PROPOSED, DECIDE.  Prevents the namespace pollution of a "text" method or some such.
-!     |   STAR! ^[SPREAD_ARG,"*"]^ nls!                       
-          expressionStatement[EOF]
-      // Example:  with(htmlbuilder) { head{} body{ *"some text" } }
-      // Equivalent to:  { htmlbuilder.head{} htmlbuilder.body{ (htmlbuilder as Collection).add("some text") } }
-***************
-*** 1626,1632 ****
-  
-      /*OBS*
-      // empty statement
-!     |   s:SEMI {#s.setType(EMPTY_STAT);}
-      *OBS*/
-  
-      |   branchStatement
---- 1626,1632 ----
-  
-      /*OBS*
-      // empty statement
-!     |   SEMI ^[EMPTY_STAT,";"]
-      *OBS*/
-  
-      |   branchStatement
-***************
-*** 1738,1744 ****
-  /** A labeled statement, consisting of a vanilla identifier followed by a colon. */
-  // Note:  Always use this lookahead, to keep antlr from panicking: (IDENT COLON)=>
-  statementLabelPrefix
-!     :   IDENT c:COLON^ {#c.setType(LABELED_STAT);}
-      ;
-  
-  /** An expression statement can be any general expression.
---- 1738,1744 ----
-  /** A labeled statement, consisting of a vanilla identifier followed by a colon. */
-  // Note:  Always use this lookahead, to keep antlr from panicking: (IDENT COLON)=>
-  statementLabelPrefix
-!     :   IDENT COLON! ^[LABELED_STAT,":"]^
-      ;
-  
-  /** An expression statement can be any general expression.
-***************
-*** 1910,1915 ****
---- 1910,1916 ----
-          {
-              AST elist = #(#[ELIST,"ELIST"], #commandArguments);
-              AST headid = getASTFactory().dup(#head);
-+             //todo possibly use ^[METHOD_CALL,???] tree construction here
-              headid.setType(METHOD_CALL);
-              headid.setText("<command>");
-              #commandArguments = #(headid, head, elist);
-***************
-*** 2048,2057 ****
-  
-      |   DOT^ nls! "super"
-          (   // (new Outer()).super()  (create enclosing instance)
-!             lp3:LPAREN^ argList RPAREN!
-!             {#lp3.setType(SUPER_CTOR_CALL);}
-          |   DOT^ IDENT
-!             (   lps:LPAREN^ {#lps.setType(METHOD_CALL);}
-                  argList
-                  RPAREN!
-              )?
---- 2049,2057 ----
-  
-      |   DOT^ nls! "super"
-          (   // (new Outer()).super()  (create enclosing instance)
-!             LPAREN! ^[SUPER_CTOR_CALL,"("]^ argList RPAREN!
-          |   DOT^ IDENT
-!             (   LPAREN! ^[METHOD_CALL,"("]^
-                  argList
-                  RPAREN!
-              )?
-***************
-*** 2160,2166 ****
-  methodCallArgs[AST callee]
-      :
-          {#methodCallArgs = callee;}
-!         lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-          argList
-          RPAREN!
-      ;
---- 2160,2166 ----
-  methodCallArgs[AST callee]
-      :
-          {#methodCallArgs = callee;}
-!         LPAREN! ^[METHOD_CALL,"("]^
-          argList
-          RPAREN!
-      ;
-***************
-*** 2197,2203 ****
-  indexPropertyArgs[AST indexee]
-      :
-          {#indexPropertyArgs = indexee;}
-!         lb:LBRACK^ {#lb.setType(INDEX_OP);}
-          argList
-          RBRACK!
-      ;
---- 2197,2203 ----
-  indexPropertyArgs[AST indexee]
-      :
-          {#indexPropertyArgs = indexee;}
-!         LBRACK! ^[INDEX_OP,"("]^
-          argList
-          RBRACK!
-      ;
-***************
-*** 2301,2307 ****
-              ((SL^ | SR^ | BSR^)
-              |   RANGE_INCLUSIVE^
-              |   RANGE_EXCLUSIVE^
-!             |   td:TRIPLE_DOT^ {#td.setType(RANGE_EXCLUSIVE);} /* backward compat: FIXME REMOVE */
-              )
-              nls!
-              additiveExpression[0]
---- 2301,2307 ----
-              ((SL^ | SR^ | BSR^)
-              |   RANGE_INCLUSIVE^
-              |   RANGE_EXCLUSIVE^
-!             |   TRIPLE_DOT! ^[RANGE_EXCLUSIVE,"..."]^ /* backward compat: FIXME REMOVE */
-              )
-              nls!
-              additiveExpression[0]
-***************
-*** 2325,2332 ****
-  multiplicativeExpression[int lc_stmt]
-      :    ( INC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      |    ( DEC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-!     |    ( MINUS^ {#MINUS.setType(UNARY_MINUS);} nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-!     |    ( PLUS^ {#PLUS.setType(UNARY_PLUS);} nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      |    (  powerExpression[lc_stmt] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      ;
-  
---- 2325,2332 ----
-  multiplicativeExpression[int lc_stmt]
-      :    ( INC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      |    ( DEC^ nls!  powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-!     |    ( MINUS! ^[UNARY_MINUS,"-"]^ nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-!     |    ( PLUS! ^[UNARY_PLUS,"+"]^ nls!   powerExpression[0] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      |    (  powerExpression[lc_stmt] ((STAR^ | DIV^ | MOD^ )  nls!  powerExpression[0])* )
-      ;
-  
-***************
-*** 2339,2346 ****
-  unaryExpression[int lc_stmt]
-      :   INC^ nls! unaryExpression[0]
-      |   DEC^ nls! unaryExpression[0]
-!     |   MINUS^   {#MINUS.setType(UNARY_MINUS);}   nls! unaryExpression[0]
-!     |   PLUS^    {#PLUS.setType(UNARY_PLUS);}     nls! unaryExpression[0]
-      |   unaryExpressionNotPlusMinus[lc_stmt]
-      ;
-  
---- 2339,2346 ----
-  unaryExpression[int lc_stmt]
-      :   INC^ nls! unaryExpression[0]
-      |   DEC^ nls! unaryExpression[0]
-!     |   MINUS!   ^[UNARY_MINUS,"-"]^   nls! unaryExpression[0]
-!     |   PLUS!    ^[UNARY_PLUS,"+"]^     nls! unaryExpression[0]
-      |   unaryExpressionNotPlusMinus[lc_stmt]
-      ;
-  
-***************
-*** 2382,2389 ****
-              options {greedy=true;} :
-              // possibly add on a post-increment or post-decrement.
-              // allows INC/DEC on too much, but semantics can check
-!             in:INC^ {#in.setType(POST_INC);}
-!         |   de:DEC^ {#de.setType(POST_DEC);}
-          )?
-      ;
-      
---- 2382,2389 ----
-              options {greedy=true;} :
-              // possibly add on a post-increment or post-decrement.
-              // allows INC/DEC on too much, but semantics can check
-!             INC! ^[POST_INC,"++"]^
-!         |   DEC! ^[POST_DEC,"--"]^
-          )?
-      ;
-      
-***************
-*** 2421,2427 ****
-      ;
-  
-  scopeEscapeExpression
-!     :   DOLLAR^  {#DOLLAR.setType(SCOPE_ESCAPE);} (IDENT | scopeEscapeExpression)
-          // PROPOSE: The SCOPE_ESCAPE operator pops its operand out of the scope of a "with" block.
-          // If not within a "with" block, it pops the operand out of the static global scope,
-          // into whatever dynamic (unchecked) global scope is available when the script is run,
---- 2421,2427 ----
-      ;
-  
-  scopeEscapeExpression
-!     :   DOLLAR!  ^[SCOPE_ESCAPE,"$"]^ (IDENT | scopeEscapeExpression)
-          // PROPOSE: The SCOPE_ESCAPE operator pops its operand out of the scope of a "with" block.
-          // If not within a "with" block, it pops the operand out of the static global scope,
-          // into whatever dynamic (unchecked) global scope is available when the script is run,
-***************
-*** 2471,2477 ****
-      :
-      (
-          // PROPOSE: allow spread markers on string constructor arguments
-!         sp:STAR^                        {#sp.setType(SPREAD_ARG);}
-      )?
-      (   identifier
-      |   openOrClosedBlock
---- 2471,2477 ----
-      :
-      (
-          // PROPOSE: allow spread markers on string constructor arguments
-!         STAR!                        ^[SPREAD_ARG,"*"]^
-      )?
-      (   identifier
-      |   openOrClosedBlock
-***************
-*** 2546,2552 ****
-                  // limitation of linear approximate lookahead.
-                  greedy=true;
-              }
-!         :   (   lp:LPAREN^ {#lp.setType(METHOD_CALL);}
-                  // if the input is valid, only the last IDENT may
-                  // have preceding typeArguments... rather hacky, this is...
-                  {if (#ta2 != null) astFactory.addASTChild(currentAST, #ta2);}
---- 2546,2552 ----
-                  // limitation of linear approximate lookahead.
-                  greedy=true;
-              }
-!         :   (   LPAREN! ^[METHOD_CALL,"("]^
-                  // if the input is valid, only the last IDENT may
-                  // have preceding typeArguments... rather hacky, this is...
-                  {if (#ta2 != null) astFactory.addASTChild(currentAST, #ta2);}
-***************
-*** 2554,2560 ****
-                  argList RPAREN!
-              )
-          |   (    options {greedy=true;} :
-!                 lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK!
-              )+
-          )?
-      ;
---- 2554,2560 ----
-                  argList RPAREN!
-              )
-          |   (    options {greedy=true;} :
-!                 LBRACK! ^[ARRAY_DECLARATOR,"["]^ RBRACK!
-              )+
-          )?
-      ;
-***************
-*** 2680,2691 ****
-          // Optional argument label.
-          // Usage:  Specifies a map key, or a keyworded argument.
-          (   (argumentLabelStart) =>
-!             argumentLabel c:COLON^          {#c.setType(LABELED_ARG);}
-  
-              {   hasLabel = true;  }  // signal to caller the presence of a label
-  
-          |   // Spread operator:  f(*[a,b,c])  ===  f(a,b,c);  f(1,*null,2)  ===  f(1,2).
-!             sp:STAR^                        {#sp.setType(SPREAD_ARG);}
-              // spread maps are marked, as f(*:m) for f(a:x, b:y) if m==[a:x, b:y]
-              (
-                  COLON!                      {#sp.setType(SPREAD_MAP_ARG);}
---- 2680,2691 ----
-          // Optional argument label.
-          // Usage:  Specifies a map key, or a keyworded argument.
-          (   (argumentLabelStart) =>
-!             argumentLabel COLON!          ^[LABELED_ARG,":"]^
-  
-              {   hasLabel = true;  }  // signal to caller the presence of a label
-  
-          |   // Spread operator:  f(*[a,b,c])  ===  f(a,b,c);  f(1,*null,2)  ===  f(1,2).
-!             STAR!                        ^[SPREAD_ARG,"*"]^
-              // spread maps are marked, as f(*:m) for f(a:x, b:y) if m==[a:x, b:y]
-              (
-                  COLON!                      {#sp.setType(SPREAD_MAP_ARG);}
-***************
-*** 2733,2739 ****
-                  warnWhenFollowAmbig = false;
-              }
-          :
-!             lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);}
-                  (expression[0])?
-              RBRACK!
-          )+
---- 2733,2739 ----
-                  warnWhenFollowAmbig = false;
-              }
-          :
-!             LBRACK! ^[ARRAY_DECLARATOR,"("]^
-                  (expression[0])?
-              RBRACK!
-          )+
diff --git a/groovy/jsr/ideas/parsers/antlr/treewalker/tree.fixes.patch b/groovy/jsr/ideas/parsers/antlr/treewalker/tree.fixes.patch
deleted file mode 100644
index 28b4548..0000000
--- a/groovy/jsr/ideas/parsers/antlr/treewalker/tree.fixes.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Index: GroovyRecognizerTree.g
-===================================================================
-RCS file: /home/projects/groovy/scm/groovy/jsr/ideas/parsers/antlr/treewalker/src/GroovyRecognizerTree.g,v
-retrieving revision 1.1
-diff -c -r1.1 GroovyRecognizerTree.g
-*** GroovyRecognizerTree.g	19 Apr 2005 22:14:04 -0000	1.1
---- GroovyRecognizerTree.g	19 Apr 2005 22:42:47 -0000
-***************
-*** 689,700 ****
-  	;
-  
-  statement
-! 	:
-! 	(
-! 		openOrClosedBlock
-! 		|
-! 			statement
-! 	)
-  	|
-  		expressionStatement
-  	|
---- 689,695 ----
-  	;
-  
-  statement
-! 	:   openOrClosedBlock
-  	|
-  		expressionStatement
-  	|
diff --git a/groovy/jsr/ideas/parsers/bpwj/README.txt b/groovy/jsr/ideas/parsers/bpwj/README.txt
deleted file mode 100644
index 796d85e..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/README.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-A Java 1.5 parser 
-
-29 Nov 2004 - NOTE: This will not run correctly at moment...
-
-
-based upon JLSv3 (draft on website at Nov2004)
-
-using http://bpwj.javanicus.com toolkit from Steve Metsker (Apache2.0 license)
-
-by Jeremy Rayner, Nov 2004
diff --git a/groovy/jsr/ideas/parsers/bpwj/build.xml b/groovy/jsr/ideas/parsers/bpwj/build.xml
deleted file mode 100644
index d677b08..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/build.xml
+++ /dev/null
@@ -1,200 +0,0 @@
-<?xml version="1.0"?>
-<project name="parser" default="default">
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   compile settings                -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="build.debug" value="on"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="src.dir" value="src"/>
-  <property name="build.dir" value="build"/>
-  <property name="build.classes.dir" value="${build.dir}/classes"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="lib.dir" value="lib"/>
-  		
-  <!-- javadoc properties -->
-  <property name="javadoc.dir" value="doc"/>
-  <property name="javadoc.packages" value="com.*"/>
-
-  <!-- junit properties -->
-  <property name="test.src.dir"	value="test"/>
-  <property name="test.classes.dir" value="${build.dir}/test/classes"/>
-  <property name="test.reports.dir" value="reports"/>
-
-  <property name="standalone.working.dir" value="temp"/>
-
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                     datatypes                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <path id="compile.classpath">
-    <pathelement location="${build.classes.dir}"/>
-    <fileset dir="${lib.dir}">
-      <include name="**/*.jar" />
-      <include name="**/*.zip" />
-    </fileset>
-  </path>
-  
-  <path id="test.classpath">
-    <path refid="compile.classpath"/>
-    <pathelement location="${test.classes.dir}"/>  
-  </path>
-  
-<!--  <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpathref="test.classpath"/> -->
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="run" 
-          description="default: run this groovy stuff"
-  />
-  
-  <target name="all" 
-          depends="test,dist" 
-          description="build and test everything"
-  />
-
-  <target name="clean" description="remove all built files">
-    <delete dir="${javadoc.dir}" />
-    <delete dir="${build.dir}" />
-    <delete dir="${dist.dir}" />
-    <delete dir="${test.reports.dir}" />
-  </target>
-
-  <target name="dist" 
-          depends="compile" 
-          description="create distributables (jars etc)">
-    <mkdir dir="${dist.dir}" />
-    <jar jarfile="${dist.dir}/parser.jar" 
-         manifest="${src.dir}/manifest.txt">
-      <fileset dir="${build.classes.dir}"/>
-    </jar>
-  </target>
-
-    <target name="standalone" depends="dist" description="merge all jars together">
-      <mkdir dir="${standalone.working.dir}"/>
-      <unzip dest="${standalone.working.dir}">
-        <fileset dir="${lib.dir}">
-          <include name="*.jar"/>
-        </fileset>
-        <fileset dir="${dist.dir}">
-          <include name="*.jar"/>
-        </fileset>
-      </unzip>
-      <copy todir="${standalone.working.dir}">
-          <fileset dir="licenses"/>
-      </copy>
-      <mkdir dir="standalone"/>
-      <jar jarfile="standalone/parser.jar"
-           manifest="${src.dir}/manifest.txt">
-      <fileset dir="${standalone.working.dir}"/>
-    </jar>
-    <delete dir="${standalone.working.dir}"/>
-    </target>
-
-
-  <target name="docs" depends="init" description="generate documentation">
-    <mkdir dir="${javadoc.dir}" />
-    <javadoc sourcepath="${src.dir}" 
-             destdir="${javadoc.dir}" 
-             packagenames="${javadoc.packages}"
-             use="true"
-             windowtitle="parser"
-             private="true"/>
-  </target>
-
-  <target name="run" depends="compile" description="compile and run">
-    <java classname="com.javanicus.bpwj.ParserMain"
-          fork="yes"
-          classpathref="compile.classpath">
-        <arg value="src/com/javanicus/bpwj/ParserMain.java"/>
-    </java>
-  </target>
-
-  <target name="beautify" 
-          depends="init" 
-          description="apply jacobe beautifier to the java sources">
-    <apply executable="jacobe">
-      <arg value="-nobackup"/>
-      <arg value="-overwrite"/>
-      <srcfile/>
-      <fileset dir="." includes = "**/*.java"/>
-    </apply>
-  </target>
-
-  <target name="test" 
-          depends="test-compile" 
-          description="run all test cases">
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="plain" usefile="false"/>
-      <batchtest>
-        <fileset dir="${test.classes.dir}">
-          <include name="**/*Test.class" />
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-        
-  <target name="pretty-test" 
-          depends="test-compile" 
-          description="HTML output of test cases">
-    <mkdir dir="${test.reports.dir}"/>
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="xml" usefile="true"/>
-
-      <batchtest todir="${test.reports.dir}">
-        <fileset dir="${test.classes.dir}">
-          <include name="**/*Test.class" />
-        </fileset>
-      </batchtest>
-
-    </junit>
-
-    <junitreport todir="${test.reports.dir}">
-      <fileset dir="${test.reports.dir}">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report format="frames" todir="${test.reports.dir}"/>
-    </junitreport>
-  </target>
-  
-  <target name="compile" depends="init" description="compile java and groovy sources">
-    <mkdir dir="${build.classes.dir}" />
-    <!-- <groovyc destdir="${build.classes.dir}" 
-             srcdir="${src.dir}"
-             listfiles="true">          
-        <classpath refid="test.classpath"/>
-    </groovyc> -->
-    <javac srcdir="${src.dir}" 
-           destdir="${build.classes.dir}" 
-           classpathref="compile.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-  
-  <target name="test-compile" depends="compile" description="compile tests">
-    <mkdir dir="${test.classes.dir}" />
-    <!-- <groovyc destdir="${test.classes.dir}" 
-             srcdir="${test.src.dir}"
-             listfiles="true">          
-        <classpath refid="test.classpath"/>
-    </groovyc> -->
-    <javac srcdir="${test.src.dir}" 
-           destdir="${test.classes.dir}" 
-           classpathref="test.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-
-  <target name="init">
-    <tstamp />
-    <mkdir dir="${lib.dir}"/>
-  </target>
-       
-</project>
diff --git a/groovy/jsr/ideas/parsers/bpwj/lib/bpwj-1.0.jar b/groovy/jsr/ideas/parsers/bpwj/lib/bpwj-1.0.jar
deleted file mode 100644
index 9fa1049..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/lib/bpwj-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/ideas/parsers/bpwj/licenses/LICENSE.txt b/groovy/jsr/ideas/parsers/bpwj/licenses/LICENSE.txt
deleted file mode 100644
index 53447fa..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/licenses/LICENSE.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-From: Steve Metsker
-Date: Mon, 15 Nov 2004 10:17:03 GMT
-Subject: RE: BPWJ
-
-Hi Jeremy,
-  I'd love to see the bpwj code grow and get used in other work.
-My intention is for this code to be completely free. I am supportive
-of any work that moves it in that direction. For example, if
-you'd like to produce a version of the code that has a different copyright
-notice, I'd be happy to post the revised code on my site.
-
-> So, even if you dual license (Apache + GPL), at least a statement
-> declaring Apache2.0 license
-> of BPWJ would be really useful.
-
-I declare it now, in this email, and I'd be happy to make similar
-declarations anywhere you like.
-
-- Steve
-
-
-
-
-
-
-                                 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
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright [yyyy] [name of copyright owner]
-
-   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.
-
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/JavaParser.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/JavaParser.java
deleted file mode 100644
index 411150a..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/JavaParser.java
+++ /dev/null
@@ -1,2671 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 2004 Jeremy Rayner. All Rights Reserved.
-
-   Jeremy Rayner makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import sjm.parse.*;
-import sjm.parse.tokens.*;
-
-/**
- * This class provides a Java parser as specified in JLSv3.
- *
- * @author Jeremy Rayner
- *
- */
-class JavaParser {
-
-    public Parser start() {
-        return compilationUnit();
-    }
-
-    // -----  utility methods  ---------
-    protected void log(String s) {
-        //System.out.println(s);
-    }
-
-    protected Alternation alternation(String name) {
-        return new Alternation(name);
-    }
-
-    protected Sequence sequence(String name) {
-        return new TrackSequence(name);
-    }
-
-    protected Repetition repetition(Parser parser1) {
-        return new Repetition(parser1);
-    }
-
-    protected Parser zeroOrOne(Parser parser1) {
-        return alternation("zero or one")
-                .add(new Empty())
-                .add(parser1)
-            ;
-    }
-
-    protected Parser oneOrMore(Parser parser1) {
-        return sequence("one or more " + parser1.getName())
-            .add(parser1)
-            .add(repetition(parser1));
-    }
-
-
-    // ------------------ Main Grammar -------------------------
-
-    /** Identifier:
-     *      IDENTIFIER
-     */
-    public Parser identifier() {
-        log("identifier");
-        //@todo
-        Parser p = new Word();
-        return p;
-    }
-
-    /** QualifiedIdentifier:
-     *      Identifier {. Identifier }
-     */
-    public Parser qualifiedIdentifier() {
-        log("qualifierIdentifier");
-        if (qualifiedIdentifier != null) return qualifiedIdentifier;
-        qualifiedIdentifier = sequence("<qualifiedIdentifier>");
-        qualifiedIdentifier.add(identifier());
-        qualifiedIdentifier.add(repetition(
-                    sequence("<qualifiedIdentifier$1>")
-                        .add(new Symbol('.'))
-                        .add(identifier())
-            ));
-        return qualifiedIdentifier;
-    }
-
-    /** Literal:
-     *      IntegerLiteral
-     *      FloatingPointLiteral
-     *      CharacterLiteral
-     *      StringLiteral
-     *      BooleanLiteral
-     *      NullLiteral
-     */
-    public Parser literal() {
-        log("literal");
-        if (literal != null) return literal;
-        literal = alternation("<literal>");
-        literal.add(integerLiteral());
-        literal.add(floatingPointLiteral());
-        literal.add(characterLiteral());
-        literal.add(stringLiteral());
-        literal.add(booleanLiteral());
-        literal.add(nullLiteral());
-        return literal;
-    }
-
-    /** Expression:
-     *      Expression1 [AssignmentOperator Expression1]
-     */
-    public Parser expression() {
-        log("expression");
-        if (expression != null) return expression;
-        expression = sequence("<expression>");
-        expression.add(expression1());
-        expression.add(zeroOrOne(
-                sequence("<expression$1>")
-                    .add(assignmentOperator())
-                    .add(expression1())
-            ));
-        return expression;
-    }
-
-
-    /** AssignmentOperator:
-     *      =
-     *      +=
-     *      -=
-     *      *=
-     *      /=
-     *      &=
-     *      |=
-     *      ^=
-     *      %=
-     *      <<=
-     *      >>=
-     *      >>>=
-     */
-    public Parser assignmentOperator() {
-        log("assignmentOperator");
-        if (assignmentOperator != null) return assignmentOperator;
-        assignmentOperator = alternation("<assignmentOperator>");
-        assignmentOperator.add(new Symbol("="));
-        assignmentOperator.add(new Symbol("+="));
-        assignmentOperator.add(new Symbol("-="));
-        assignmentOperator.add(new Symbol("*="));
-        assignmentOperator.add(new Symbol("/="));
-        assignmentOperator.add(new Symbol("&="));
-        assignmentOperator.add(new Symbol("|="));
-        assignmentOperator.add(new Symbol("^="));
-        assignmentOperator.add(new Symbol("%="));
-        assignmentOperator.add(new Symbol("<<="));
-        assignmentOperator.add(new Symbol(">>="));
-        assignmentOperator.add(new Symbol(">>>="));
-        return assignmentOperator;
-    }
-
-    /** Type:
-     *      Identifier [TypeArguments]{ .   Identifier [TypeArguments]} BracketsOpt
-     *      BasicType
-     */
-    public Parser type() {
-        log("type");
-        if (type != null) return type;
-        type = alternation("<type>");
-        type.add(sequence("<type$1>")
-                .add(identifier())
-                .add(zeroOrOne(typeArguments()))
-                .add(repetition(
-                    sequence("<type$2>")
-                        .add(new Symbol("."))
-                        .add(identifier())
-                        .add(zeroOrOne(typeArguments()))
-                ))
-                .add(bracketsOpt())
-            );
-        type.add(basicType());
-        return type;
-    }
-
-    /** TypeArguments:
-     *      < TypeArgument {, TypeArgument}>
-     */
-    public Parser typeArguments() {
-        log("typeArguments");
-        if (typeArguments != null) return typeArguments;
-        typeArguments = sequence("<typeArguments>");
-        typeArguments.add(new Symbol("<"));
-        typeArguments.add(typeArgument());
-        typeArguments.add(repetition(
-                sequence("<typeArguments$1>")
-                    .add(new Symbol(","))
-                    .add(typeArgument())
-            ));
-        return typeArguments;
-    }
-
-    /** TypeArgument:
-     *      Type
-     *      ? [(extends |super ) Type]
-     */
-    public Parser typeArgument() {
-        log("typeArgument");
-        if (typeArgument != null) return typeArgument;
-        typeArgument = alternation("<typeArgument>");
-        typeArgument.add(type());
-        typeArgument.add(sequence("<typeArgument$1>")
-                .add(new Symbol("?"))
-                .add(zeroOrOne(
-                    sequence("<typeArgument$2>")
-                        .add(alternation("<typeArgument$a>")
-                            .add(new Literal("extends"))
-                            .add(new Literal("super"))
-                        )
-                        .add(type())
-                ))
-            )
-        ;
-        return typeArgument;
-    }
-
-    /** RawType:
-     *      Identifier { .   Identifier } BracketsOpt
-     */
-    public Parser rawType() {
-        log("rawType");
-        if (rawType != null) return rawType;
-        rawType = sequence("<rawType>");
-        rawType.add(identifier());
-        rawType.add(repetition(
-                sequence("<rawType$1>")
-                    .add(new Symbol("."))
-                    .add(identifier())
-            ));
-        rawType.add(bracketsOpt());
-        return rawType;
-    }
-
-    /** StatementExpression:
-     *      Expression
-     */
-    public Parser statementExpression() {
-        log("statementExpression");
-        if (statementExpression != null) return statementExpression;
-        statementExpression = expression();
-        return statementExpression;
-    }
-
-    /** ConstantExpression:
-     *      Expression
-     */
-    public Parser constantExpression() {
-        log("constantExpression");
-        if (constantExpression != null) return constantExpression;
-        constantExpression = expression();
-        return constantExpression;
-    }
-
-    /** Expression1:
-     *      Expression2 [Expression1Rest]
-     */
-    public Parser expression1() {
-        log("expression1");
-        if (expression1 != null) return expression1;
-        expression1 = sequence("<expression1>");
-        expression1.add(expression2());
-        expression1.add(zeroOrOne(expression1Rest()));
-        return expression1;
-    }
-
-    /** Expression1Rest:
-     *      [ ?   Expression :   Expression1]
-     */
-    public Parser expression1Rest() {
-        log("expression1Rest");
-        if (expression1Rest != null) return expression1Rest;
-        expression1Rest = zeroOrOne(
-            sequence("<expression1Rest$1>")
-                .add(new Symbol("?"))
-                .add(expression())
-                .add(new Symbol(":"))
-                .add(expression1())
-        );
-        return expression1Rest;
-    }
-
-    /** Expression2 :
-     *      Expression3 [Expression2Rest]
-     */
-    public Parser expression2() {
-        log("expression2");
-        if (expression2 != null) return expression2;
-        expression2 = sequence("<expression2>");
-        expression2.add(expression3());
-        expression2.add(zeroOrOne(expression2Rest()));
-        return expression2;
-    }
-
-    /** Expression2Rest:
-     *      {Infixop Expression3}
-     *      Expression3 instanceof Type
-     */
-    public Parser expression2Rest() {
-        log("expression2Rest");
-        if (expression2Rest != null) return expression2Rest;
-        expression2Rest = alternation("<expression2Rest$a>");
-        expression2Rest.add(repetition(
-                sequence("<expression2Rest$1>")
-                    .add(infixOp())
-                    .add(expression3())
-            ));
-        expression2Rest.add(sequence("<expression2Rest$2>")
-                .add(expression3())
-                .add(new Literal("instanceof"))
-                .add(type())
-            );
-        return expression2Rest;
-    }
-
-    /** Infixop:
-     *      ||
-     *      &&
-     *      |
-     *      ^
-     *      &
-     *      ==
-     *      !=
-     *      <
-     *      >
-     *      <=
-     *      >=
-     *      <<
-     *      >>
-     *      >>>
-     *      +
-     *      *
-     *      /
-     *      %
-     */
-    public Parser infixOp() {
-        log("infixOp");
-        if (infixOp != null) return infixOp;
-        infixOp = alternation("<infixOp>");
-        infixOp.add(new Symbol("||"));
-        infixOp.add(new Symbol("&&"));
-        infixOp.add(new Symbol("|"));
-        infixOp.add(new Symbol("^"));
-        infixOp.add(new Symbol("&"));
-        infixOp.add(new Symbol("=="));
-        infixOp.add(new Symbol("!="));
-        infixOp.add(new Symbol("<"));
-        infixOp.add(new Symbol(">"));
-        infixOp.add(new Symbol("<="));
-        infixOp.add(new Symbol(">="));
-        infixOp.add(new Symbol("<<"));
-        infixOp.add(new Symbol(">>"));
-        infixOp.add(new Symbol(">>>"));
-        infixOp.add(new Symbol("+"));
-        infixOp.add(new Symbol("*"));
-        infixOp.add(new Symbol("/"));
-        infixOp.add(new Symbol("%"));
-        return infixOp;
-    }
-
-    /** Expression3:
-     *      PrefixOp Expression3
-     *      (   (Expr|Type) )   Expression3
-     *      Primary {Selector} {PostfixOp}
-     */
-    public Parser expression3() {
-        log("expression3");
-        if (expression3 != null) return expression3;
-        expression3 = alternation("<expression3>");
-        expression3.add(sequence("<expression3$1>")
-                .add(prefixOp())
-                .add(expression3())
-            );
-        expression3.add(sequence("<expression3$2>")
-                .add(new Symbol("("))
-                .add(alternation("<expression3$a")
-                    .add(expr())
-                    .add(type())
-                )
-                .add(new Symbol(")"))
-                .add(expression3())
-            );
-        expression3.add(sequence("<expression3$3>")
-                .add(primary())
-                .add(repetition(selector()))
-                .add(repetition(postfixOp()))
-            );
-        return expression3;
-    }
-
-    /** Primary:
-     *      ( Expression)
-     *      NonWildcardTypeArguments (ExplicitGenericInvocationSuffix |this Arguments)
-     *      this [Arguments]
-     *      super SuperSuffix
-     *      Literal
-     *      new Creator
-     *      Identifier {. Identifier }[ IdentifierSuffix]
-     *      BasicType BracketsOpt.class
-     *      void.class
-     */
-    public Parser primary() {
-        log("primary");
-        if (primary != null) return primary;
-        primary = alternation("<primary>");
-            // ( Expression)
-            primary.add(sequence("<primary$1>")
-                .add(new Symbol("("))
-                .add(expression())
-                .add(new Symbol(")"))
-            );
-            // NonWildcardTypeArguments (ExplicitGenericInvocationSuffix |this Arguments)
-            primary.add(sequence("<primary$2>")
-                .add(nonWildcardTypeArguments())
-                .add(alternation("<primary$a>")
-                    .add(explicitGenericInvocationSuffix())
-                    .add(new Literal("this"))
-                )
-            );
-            // this [Arguments]
-            primary.add(sequence("<primary$3>")
-                .add(new Literal("this"))
-                .add(zeroOrOne(arguments()))
-            );
-            // super SuperSuffix
-            primary.add(sequence("<primary$4>")
-                .add(new Literal("this"))
-                .add(superSuffix())
-            );
-            // Literal
-            primary.add(literal());
-            // new Creator
-            primary.add(sequence("<primary$5>")
-                .add(new Literal("new"))
-                .add(creator())
-            );
-            // Identifier {. Identifier }[ IdentifierSuffix]
-            primary.add(sequence("<primary$6>")
-                .add(identifier())
-                .add(repetition(sequence("<primary$7>")
-                    .add(new Symbol('.'))
-                    .add(identifier())
-                ))
-                .add(zeroOrOne(identifierSuffix()))
-            );
-            // BasicType BracketsOpt.class
-            primary.add(sequence("<primary$8>")
-                .add(basicType())
-                .add(bracketsOpt())
-                .add(new Symbol('.'))
-                .add(new Literal("class"))
-            );
-            // void.class
-            primary.add(sequence("<primary$9>")
-                .add(new Literal("void"))
-                .add(new Symbol("."))
-                .add(new Literal("class"))
-            );
-        return primary;
-    }
-
-    /** IdentifierSuffix:
-     *      [ (] BracketsOpt   . class | Expression])
-     *      Arguments
-     *      .   (class | ExplicitGenericInvocation |this |super Arguments |new [NonWildcardTypeArguments] InnerCreator )
-     */
-    public Parser identifierSuffix() {
-        log("identifierSuffix");
-        if (identifierSuffix != null) return identifierSuffix;
-        identifierSuffix = alternation("<identifierSuffix>");
-
-                // [ (] BracketsOpt   . class | Expression])
-                identifierSuffix.add(sequence("<identifierSuffix$1>")
-                        .add(new Symbol('['))
-                        .add(alternation("<identifierSuffix$a")
-                            .add(sequence("<identifierSuffix$1>")
-                                .add(new Symbol(']'))
-                                .add(bracketsOpt())
-                                .add(new Symbol('.'))
-                                .add(new Literal("class"))
-                            )
-                            .add(sequence("<identifierSuffix$2>")
-                                .add(expression())
-                                .add(new Symbol(']'))
-                            )
-                        )
-                );
-
-                // Arguments
-                identifierSuffix.add(arguments());
-
-                // .   (class | ExplicitGenericInvocation |this |super Arguments |new [NonWildcardTypeArguments] InnerCreator )
-                identifierSuffix.add(sequence("<identifierSuffix$3>")
-                    .add(new Symbol('.'))
-                    .add(alternation("<identifierySuffix$a>")
-                        .add(new Literal("class"))
-                        .add(explicitGenericInvocation())
-                        .add(new Literal("this"))
-                        .add(sequence("<identifierSuffix$4>")
-                            .add(new Literal("super"))
-                            .add(arguments())
-                        )
-                        .add(sequence("<identifierSuffix$5>")
-                            .add(new Literal("new"))
-                            .add(zeroOrOne(nonWildcardTypeArguments()))
-                            .add(innerCreator())
-                        )
-                    )
-                );
-        return identifierSuffix;
-    }
-
-    /** ExplicitGenericInvocation:
-     *      NonWildcardTypeArguments ExplicitGenericInvocationSuffix
-     */
-    public Parser explicitGenericInvocation() {
-        log("explicitGenericInvocation");
-        if (explicitGenericInvocation != null) return explicitGenericInvocation;
-        explicitGenericInvocation = sequence("<explicitGenericInvocation>");
-        explicitGenericInvocation.add(nonWildcardTypeArguments());
-        explicitGenericInvocation.add(explicitGenericInvocationSuffix());
-        return explicitGenericInvocation;
-    }
-
-    /** NonWildcardTypeArguments:
-     *      < TypeList>
-     */
-    public Parser nonWildcardTypeArguments() {
-        log("nonWildcardTypeArguments");
-        if (nonWildcardTypeArguments != null) return nonWildcardTypeArguments;
-        nonWildcardTypeArguments = sequence("<nonWildcardTypeArguments>");
-        nonWildcardTypeArguments.add(new Symbol("<"));
-        nonWildcardTypeArguments.add(typeList());
-        nonWildcardTypeArguments.add(new Symbol(">"));
-        return nonWildcardTypeArguments;
-    }
-
-    /** ExplicitGenericInvocationSuffix:
-     *      super SuperSuffix
-     *      Identifier Arguments
-     */
-    public Parser explicitGenericInvocationSuffix() {
-        log("explicitGenericInvocationSuffix");
-        if (explicitGenericInvocationSuffix != null) return explicitGenericInvocationSuffix;
-        explicitGenericInvocationSuffix = alternation("<explicitGenericInvocationSuffix$a>");
-            explicitGenericInvocationSuffix.add(sequence("<explicitGenericInvocationSuffix$1>")
-                .add(new Literal("super"))
-                .add(superSuffix()));
-            explicitGenericInvocationSuffix.add(sequence("<explicitGenericInvocationSuffix$2>")
-                .add(identifier())
-                .add(arguments())
-            );
-        return explicitGenericInvocationSuffix;
-    }
-
-    /** PrefixOp:
-     *      ++
-     *      --
-     *      !
-     *      ~
-     *      +
-     *      -
-     */
-    public Parser prefixOp() {
-        log("prefixOp");
-        if (prefixOp != null) return prefixOp;
-        prefixOp = alternation("<prefixOp>");
-        prefixOp.add(new Symbol("++"));
-        prefixOp.add(new Symbol("--"));
-        prefixOp.add(new Symbol('!'));
-        prefixOp.add(new Symbol('~'));
-        prefixOp.add(new Symbol('+'));
-        prefixOp.add(new Symbol('-'));
-        return prefixOp;
-    }
-
-    /** PostfixOp:
-     *      ++
-     *      --
-     */
-    public Parser postfixOp() {
-        log("postfixOp");
-        if (postfixOp != null) return postfixOp;
-        postfixOp = alternation("<postfixOp>");
-        postfixOp.add(new Symbol("++"));
-        postfixOp.add(new Symbol("--"));
-        return postfixOp;
-    }
-
-    /** Selector:
-     *      . Identifier [Arguments]
-     *      . ExplicitGenericInvocation
-     *      .this
-     *      .super SuperSuffix
-     *      .new [NonWildcardTypeArguments] InnerCreator
-     *      [ Expression]
-     */
-    public Parser selector() {
-        log("selector");
-        if (selector != null) return selector;
-        selector = alternation("<selector>");
-            selector.add(sequence("<selector$1>")
-                .add(new Symbol('.'))
-                .add(identifier())
-                .add(zeroOrOne(arguments()))
-            );
-            selector.add(sequence("<selector$2>")
-                .add(new Symbol('.'))
-                .add(explicitGenericInvocation())
-            );
-            selector.add(sequence("<selector$3>")
-                .add(new Symbol('.'))
-                .add(new Literal("this"))
-            );
-            selector.add(sequence("<selector$4>")
-                .add(new Symbol('.'))
-                .add(new Literal("super"))
-                .add(superSuffix())
-            );
-            selector.add(sequence("<selector$5>")
-                .add(new Symbol('.'))
-                .add(new Literal("new"))
-                .add(zeroOrOne(nonWildcardTypeArguments()))
-                .add(innerCreator())
-            );
-            selector.add(sequence("<selector$6>")
-                .add(new Symbol('['))
-                .add(expression())
-                .add(new Symbol(']'))
-            );
-        return selector;
-    }
-
-    /** SuperSuffix:
-     *      Arguments
-     *      . Identifier [Arguments]
-     */
-    public Parser superSuffix() {
-        log("superSuffix");
-        if (superSuffix != null) return superSuffix;
-        superSuffix = alternation("<superSuffix>");
-            superSuffix.add(arguments());
-            superSuffix.add(sequence("<superSuffix$1>")
-                .add(new Symbol('.'))
-                .add(identifier())
-                .add(zeroOrOne(arguments()))
-            );
-        return superSuffix;
-    }
-
-    /** BasicType:
-     *      byte
-     *      short
-     *      char
-     *      int
-     *      long
-     *      float
-     *      double
-     *      boolean
-     */
-    public Parser basicType() {
-        log("basicType");
-        if (basicType != null) return basicType;
-        basicType = alternation("<basicType>");
-            basicType.add(new Literal("byte"));
-            basicType.add(new Literal("short"));
-            basicType.add(new Literal("char"));
-            basicType.add(new Literal("int"));
-            basicType.add(new Literal("long"));
-            basicType.add(new Literal("float"));
-            basicType.add(new Literal("double"));
-            basicType.add(new Literal("boolean"));
-        return basicType;
-    }
-
-    /** ArgumentsOpt:
-     *      [ Arguments ]
-     */
-    public Parser argumentsOpt() {
-        log("argumentsOpt");
-        if (argumentsOpt != null) return argumentsOpt;
-        argumentsOpt = zeroOrOne(arguments());
-        return argumentsOpt;
-    }
-
-    /** Arguments:
-     *      ( [Expression {, Expression }])
-     */
-    public Parser arguments() {
-        log("arguments");
-        if (arguments != null) return arguments;
-        arguments = sequence("<arguments>");
-            arguments.add(new Symbol('('));
-            arguments.add(zeroOrOne(sequence("<arguments$1>")
-                .add(expression())
-                .add(repetition(sequence("<arguments$2>")
-                    .add(new Symbol(','))
-                    .add(expression())
-                ))
-            ));
-            arguments.add(new Symbol(')'));
-        return arguments;
-    }
-
-    /** BracketsOpt:
-     *      {[]}
-     */
-    public Parser bracketsOpt() {
-        log("bracketsOpt");
-        if (bracketsOpt != null) return bracketsOpt;
-        bracketsOpt = repetition(sequence("<bracketsOpt$1>")
-            .add(new Symbol('['))
-            .add(new Symbol(']'))
-        );
-        return bracketsOpt;
-    }
-
-    /** Creator:
-     *      [NonWildcardTypeArguments] CreatedName ( ArrayCreatorRest  | ClassCreatorRest )
-     */
-    public Parser creator() {
-        log("creator");
-        if (creator != null) return creator;
-        creator = sequence("<creator>");
-            creator.add(zeroOrOne(nonWildcardTypeArguments()));
-            creator.add(createdName());
-            creator.add(alternation("<creator$a>")
-                .add(arrayCreatorRest())
-                .add(classCreatorRest())
-            );
-        return creator;
-    }
-
-    /** CreatedName:
-     *      Identifier [NonWildcardTypeArguments] {. Identifier [NonWildcardTypeArguments]}
-     */
-    public Parser createdName() {
-        log("createdName");
-        if (createdName != null) return createdName;
-        createdName = sequence("<createdName>");
-            createdName.add(identifier());
-            createdName.add(zeroOrOne(nonWildcardTypeArguments()));
-            createdName.add(repetition(sequence("<createdName$1>")
-                .add(new Symbol('.'))
-                .add(identifier())
-                .add(zeroOrOne(nonWildcardTypeArguments()))
-            ));
-        return createdName;
-    }
-
-    /** InnerCreator:
-     *      Identifier ClassCreatorRest
-     */
-    public Parser innerCreator() {
-        log("innerCreator");
-        if (innerCreator != null) return innerCreator;
-        innerCreator = sequence("<innerCreator>");
-            innerCreator.add(identifier());
-            innerCreator.add(classCreatorRest());
-        return innerCreator;
-    }
-
-    /** ArrayCreatorRest:
-     *      [ (] BracketsOpt ArrayInitializer | Expression] {[ Expression]} BracketsOpt )
-     */
-    public Parser arrayCreatorRest() {
-        log("arrayCreatorRest");
-        if (arrayCreatorRest != null) return arrayCreatorRest;
-        arrayCreatorRest = sequence("<arrayCreatorRest>");
-            arrayCreatorRest.add(new Symbol('['));
-            arrayCreatorRest.add(alternation("<arrayCreatorRest$a>")
-                .add(sequence("<arrayCreatorRest$1>")
-                    .add(new Symbol(']'))
-                    .add(bracketsOpt())
-                    .add(arrayInitializer())
-                )
-                .add(sequence("<arrayCreator$2>")
-                    .add(expression())
-                    .add(new Symbol(']'))
-                    .add(repetition(sequence("<arrayCreator$3>")
-                        .add(new Symbol('['))
-                        .add(expression())
-                        .add(new Symbol(']'))
-                    ))
-                    .add(bracketsOpt())
-                )
-            );
-        return arrayCreatorRest;
-    }
-
-    /** ClassCreatorRest:
-     *      Arguments [ClassBody]
-     */
-    public Parser classCreatorRest() {
-        log("classCreatorRest");
-        if (classCreatorRest != null) return classCreatorRest;
-        classCreatorRest = sequence("<classCreatorRest>");
-            classCreatorRest.add(arguments());
-            classCreatorRest.add(zeroOrOne(classBody()));
-        return classCreatorRest;
-    }
-
-    /** ArrayInitializer:
-     *      { [VariableInitializer {, VariableInitializer} [,]]}
-     */
-    public Parser arrayInitializer() {
-        log("arrayInitializer");
-        if (arrayInitializer != null) return arrayInitializer;
-        arrayInitializer = sequence("<arrayInitializer>");
-        arrayInitializer.add(new Symbol("{"));
-        arrayInitializer.add(zeroOrOne(sequence("<arrayInitializer$1>")
-                .add(variableInitializer())
-                .add(repetition(sequence("<arrayInitializer$2>")
-                    .add(new Symbol(","))
-                    .add(variableInitializer())
-                ))
-                .add(zeroOrOne(new Symbol(',')))
-            ));
-        arrayInitializer.add(new Symbol("}"));
-        return arrayInitializer;
-    }
-
-    /** VariableInitializer:
-     *      ArrayInitializer
-     *      Expression
-     */
-    public Parser variableInitializer() {
-        log("variableInitializer");
-        if (variableInitializer != null) return variableInitializer;
-        variableInitializer = alternation("<variableInitializer>");
-            variableInitializer.add(arrayInitializer());
-            variableInitializer.add(expression());
-        return variableInitializer;
-    }
-
-    /** ParExpression:
-     *      ( Expression)
-     */
-    public Parser parExpression() {
-        log("parExpression");
-        if (parExpression != null) return parExpression;
-        parExpression = sequence("<parExpression>");
-            parExpression.add(new Symbol('('));
-            parExpression.add(expression());
-            parExpression.add(new Symbol(')'));
-        return parExpression;
-    }
-
-    /** Block:
-     *      { BlockStatements}
-     */
-    public Parser block() {
-        log("block");
-        if (block != null) return block;
-        block = sequence("<block>");
-        block.add(new Symbol('{'));
-        block.add(blockStatements());
-        block.add(new Symbol('}'));
-        return block;
-    }
-
-    /** BlockStatements:
-     *      { BlockStatement }
-     */
-    public Parser blockStatements() {
-        log("blockStatements");
-        if (blockStatements != null) return blockStatements;
-        blockStatements = repetition(blockStatement());
-        return blockStatements;
-    }
-
-    /** BlockStatement:
-     *      LocalVariableDeclarationStatement
-     *      ClassOrInterfaceDeclaration
-     *      [Identifier:] Statement
-     */
-    public Parser blockStatement() {
-        log("blockStatement");
-        if (blockStatement != null) return blockStatement;
-        blockStatement = alternation("<blockStatement>");
-            blockStatement.add(localVariableDeclarationStatement());
-            blockStatement.add(classOrInterfaceDeclaration());
-            blockStatement.add(sequence("<blockStatement$1>")
-                .add(zeroOrOne(sequence("<blockStatement$2>")
-                    .add(identifier())
-                    .add(new Symbol(":"))
-                ))
-                .add(statement())
-            );
-        return blockStatement;
-    }
-
-    /** LocalVariableDeclarationStatement:
-     *      [final] Type VariableDeclarators;
-     */
-    public Parser localVariableDeclarationStatement() {
-        log("localVariableDeclarationStatement");
-        if (localVariableDeclarationStatement != null) return localVariableDeclarationStatement;
-        localVariableDeclarationStatement = sequence("<localVariableDeclarationStatement>");
-            localVariableDeclarationStatement.add(zeroOrOne(new Literal("final")));
-            localVariableDeclarationStatement.add(type());
-            localVariableDeclarationStatement.add(variableDeclarators());
-            localVariableDeclarationStatement.add(new Symbol(';'));
-        return localVariableDeclarationStatement;
-    }
-
-    /** Statement:
-     *      Block
-     *      assert Expression [: Expression];
-     *      if ParExpression Statement [else Statement]
-     *      for(ForControl) Statement
-     *      while ParExpression Statement
-     *      do Statement while ParExpression ;
-     *      try Block ( Catches | [Catches] finally Block )
-     *      switch ParExpression{ SwitchBlockStatementGroups}
-     *      synchronized ParExpression Block
-     *      return [Expression];
-     *      throw Expression ;
-     *      break [Identifier]
-     *      continue [Identifier]
-     *      ;
-     *      ExpressionStatement
-     *      Identifier :   Statement
-     */
-    public Parser statement() {
-        log("statement");
-        if (statement != null) return statement;
-        statement = alternation("<statement>");
-            //Block
-             statement.add(block());
-            //assert Expression [: Expression];
-            statement.add(sequence("<statement$1>")
-                .add(new Literal("assert"))
-                .add(expression())
-                .add(zeroOrOne(
-                    sequence("<statement$2>")
-                        .add(new Symbol(':'))
-                        .add(expression())
-                ))
-                .add(new Symbol(';'))
-            );
-            //if ParExpression Statement [else Statement]
-            statement.add(sequence("<statement$3>")
-                .add(new Literal("if"))
-                .add(parExpression())
-                .add(statement())
-                .add(zeroOrOne(
-                    sequence("<statement$4>")
-                        .add(new Literal("else"))
-                        .add(statement())
-                ))
-            );
-            //for (ForControl) Statement
-            statement.add(sequence("<statement$5>")
-                .add(new Literal("for"))
-                .add(new Symbol('('))
-                .add(forControl())
-                .add(new Symbol(')'))
-                .add(statement())
-            );
-            //while ParExpression Statement
-            statement.add(sequence("<statement$6>")
-                .add(new Literal("while"))
-                .add(parExpression())
-                .add(statement())
-            );
-            //do Statement while ParExpression ;
-            statement.add(sequence("<statement$7>")
-                .add(new Literal("do"))
-                .add(statement())
-                .add(new Literal("while"))
-                .add(parExpression())
-                .add(new Symbol(';'))
-            );
-            //try Block ( Catches | [Catches] finally Block )
-            statement.add(sequence("<statement$8>")
-                .add(new Literal("try"))
-                .add(block())
-                .add(alternation("<statement$a>")
-                    .add(catches())
-                    .add(sequence("<statement$9>")
-                        .add(zeroOrOne(catches()))
-                        .add(new Literal("finally"))
-                        .add(block())
-                    )
-                )
-            );
-            //switch ParExpression{ SwitchBlockStatementGroups}
-            statement.add(sequence("<statement$10>")
-                .add(new Literal("switch"))
-                .add(parExpression())
-                .add(new Symbol('{'))
-                .add(switchBlockStatementGroups())
-                .add(new Symbol('}'))
-            );
-            //synchronized ParExpression Block
-            statement.add(sequence("<statement$11>")
-                .add(new Literal("synchronized"))
-                .add(parExpression())
-                .add(block())
-            );
-            //return [Expression];
-            statement.add(sequence("<statement$12>")
-                .add(new Literal("return"))
-                .add(zeroOrOne(expression()))
-                .add(new Symbol(';'))
-            );
-            //throw Expression ;
-            statement.add(sequence("<statement$13>")
-                .add(new Literal("throw"))
-                .add(expression())
-                .add(new Symbol(';'))
-            );
-            //break [Identifier]
-            statement.add(sequence("<statement$14>")
-                .add(new Literal("break"))
-                .add(zeroOrOne(identifier()))
-            );
-            //continue [Identifier]
-            statement.add(sequence("<statement$15>")
-                .add(new Literal("continue"))
-                .add(zeroOrOne(identifier()))
-            );
-            //;
-            statement.add(new Symbol(';'));
-            //ExpressionStatement
-            statement.add(expressionStatement());
-            //Identifier :   Statement
-            statement.add(sequence("<statement$16>")
-                .add(identifier())
-                .add(new Symbol(':'))
-                .add(statement())
-            );
-        return statement;
-    }
-
-    /** Catches:
-     *      CatchClause {CatchClause}
-     */
-    public Parser catches() {
-        log("catches");
-        if (catches != null) return catches;
-        catches = sequence("<catches>");
-            catches.add(catchClause());
-            catches.add(repetition(catchClause()));
-        return catches;
-    }
-
-    /** CatchClause:
-     *      catch( FormalParameter) Block
-     */
-    public Parser catchClause() {
-        log("catchClause");
-        if (catchClause != null) return catchClause;
-        catchClause = sequence("<catchClause>");
-            catchClause.add(new Literal("catch"));
-            catchClause.add(new Symbol('('));
-            catchClause.add(formalParameter());
-            catchClause.add(new Symbol(')'));
-            catchClause.add(block());
-        return catchClause;
-    }
-
-    /** SwitchBlockStatementGroups:
-     *      { SwitchBlockStatementGroup }
-     */
-    public Parser switchBlockStatementGroups() {
-        log("switchBlockStatementGroups");
-        if (switchBlockStatementGroups != null) return switchBlockStatementGroups;
-        switchBlockStatementGroups = repetition(switchBlockStatementGroup());
-        return switchBlockStatementGroups;
-    }
-
-    /** SwitchBlockStatementGroup:
-     *      SwitchLabel BlockStatements
-     */
-    public Parser switchBlockStatementGroup() {
-        log("switchBlockStatementGroup");
-        if (switchBlockStatementGroup != null) return switchBlockStatementGroup;
-        switchBlockStatementGroup = sequence("<switchBlockStatementGroup>");
-            switchBlockStatementGroup.add(switchLabel());
-            switchBlockStatementGroup.add(blockStatements());
-        return switchBlockStatementGroup;
-    }
-
-    /** SwitchLabel:
-     *      case ConstantExpression :
-     *      default:
-     */
-    public Parser switchLabel() {
-        log("switchLabel");
-        if (switchLabel != null) return switchLabel;
-        switchLabel = alternation("<switchLabel>");
-            switchLabel.add(sequence("<switchLabel$1>")
-                .add(new Literal("case"))
-                .add(constantExpression())
-                .add(new Symbol(":"))
-            );
-            switchLabel.add(new Literal("default"));
-            switchLabel.add(new Symbol(":"));
-        return switchLabel;
-    }
-
-    /** MoreStatementExpressions:
-     *      {, StatementExpression }
-     */
-    public Parser moreStatementExpressions() {
-        log("moreStatementExpressions");
-        if (moreStatementExpressions != null) return moreStatementExpressions;
-        moreStatementExpressions = repetition(sequence("<moreStatementExpressions$1>")
-            .add(new Symbol(','))
-            .add(statementExpression())
-        );
-        return moreStatementExpressions;
-    }
-
-    /** ForControl:
-     *      ;   [Expression] ;   ForUpdateOpt
-     *      StatementExpression MoreStatementExpressions;   [Expression]; ForUpdateOpt
-     *      [final] [Annotations] Type Identifier ForControlRest
-     */
-    public Parser forControl() {
-        log("forControl");
-        if (forControl != null) return forControl;
-        forControl = alternation("<forControl>");
-            forControl.add(sequence("<forControl$1>")
-                .add(new Symbol(';'))
-                .add(zeroOrOne(expression()))
-                .add(new Symbol(';'))
-                .add(zeroOrOne(forUpdate()))
-            );
-            forControl.add(sequence("<forControl$2>")
-                .add(statementExpression())
-                .add(moreStatementExpressions())
-                .add(new Symbol(';'))
-                .add(zeroOrOne(expression()))
-                .add(new Symbol(';'))
-                .add(zeroOrOne(forUpdate()))
-            );
-            forControl.add(sequence("<forControl$3>")
-                .add(zeroOrOne(new Literal("final")))
-                .add(zeroOrOne(annotations()))
-                .add(type())
-                .add(identifier())
-                .add(forControlRest())
-            );
-        return forControl;
-    }
-
-    /** ForControlRest:
-     *      VariableDeclaratorsRest;   [Expression] ;   ForUpdateOpt
-     *      : Expression
-     */
-    public Parser forControlRest() {
-        log("forControlRest");
-        if (forControlRest != null) return forControlRest;
-        forControlRest = alternation("<forControlRest>");
-            forControlRest.add(sequence("<forControlRest$1>")
-                .add(variableDeclaratorsRest())
-                .add(new Symbol(';'))
-                .add(zeroOrOne(expression()))
-                .add(new Symbol(';'))
-                .add(zeroOrOne(forUpdate()))
-            );
-            forControlRest.add(sequence("<forControlRest$2>")
-                .add(new Symbol(':'))
-                .add(expression())
-            );
-        return forControlRest;
-    }
-
-    /** ForUpdate:
-     *      StatementExpression MoreStatementExpressions
-     */
-    public Parser forUpdate() {
-        log("forUpdate");
-        if (forUpdate != null) return forUpdate;
-        forUpdate = sequence("<forUpdate>");
-            forUpdate.add(statementExpression());
-            forUpdate.add(moreStatementExpressions());
-        return forUpdate;
-    }
-
-
-    /** ModifiersOpt:
-     *      { Modifier }
-     */
-    public Parser modifiersOpt() {
-        log("modifiersOpt");
-        if (modifiersOpt != null) return modifiersOpt;
-        modifiersOpt = repetition(modifier());
-        return modifiersOpt;
-    }
-
-    /** Modifier:
-     *      Annotation
-     *      public
-     *      protected
-     *      private
-     *      static
-     *      abstract
-     *      final
-     *      native
-     *      synchronized
-     *      transient
-     *      volatile
-     *      strictfp
-     */
-    public Parser modifier() {
-        log("modifier");
-        if (modifier != null) return modifier;
-        modifier = alternation("<modifier>");
-            modifier.add(annotation());
-            modifier.add(new Literal("public"));
-            modifier.add(new Literal("protected"));
-            modifier.add(new Literal("private"));
-            modifier.add(new Literal("static"));
-            modifier.add(new Literal("abstract"));
-            modifier.add(new Literal("final"));
-            modifier.add(new Literal("native"));
-            modifier.add(new Literal("synchronized"));
-            modifier.add(new Literal("transient"));
-            modifier.add(new Literal("volatile"));
-            modifier.add(new Literal("strictfp"));
-        return modifier;
-    }
-
-    /** VariableDeclarators:
-     *      VariableDeclarator {,   VariableDeclarator }
-     */
-    public Parser variableDeclarators() {
-        log("variableDeclarators");
-        if (variableDeclarators != null) return variableDeclarators;
-        variableDeclarators = sequence("<variableDeclarators>");
-            variableDeclarators.add(variableDeclarator());
-            variableDeclarators.add(repetition(sequence("<variableDeclarators$1>")
-                .add(new Symbol(','))
-                .add(variableDeclarator())
-            ));
-        return variableDeclarators;
-    }
-
-    /** VariableDeclaratorsRest:
-     *      VariableDeclaratorRest {,   VariableDeclarator }
-     */
-    public Parser variableDeclaratorsRest() {
-        log("variableDeclaratorsRest");
-        if (variableDeclaratorsRest != null) return variableDeclaratorsRest;
-        variableDeclaratorsRest = sequence("<variableDeclaratorsRest>");
-            variableDeclaratorsRest.add(variableDeclaratorRest());
-            variableDeclaratorsRest.add(repetition(sequence("<variableDeclaratorsRest$1>")
-                .add(new Symbol(','))
-                .add(variableDeclarator())
-            ));
-        return variableDeclaratorsRest;
-    }
-
-    /** ConstantDeclaratorsRest:
-     *      ConstantDeclaratorRest {,   ConstantDeclarator }
-     */
-    public Parser constantDeclaratorsRest() {
-        log("constantDeclaratorsRest");
-        if (constantDeclaratorsRest != null) return constantDeclaratorsRest;
-        constantDeclaratorsRest = sequence("<constantDeclaratorsRest>");
-            constantDeclaratorsRest.add(constantDeclaratorRest());
-            constantDeclaratorsRest.add(repetition(sequence("<constantDeclaratorsRest$1>")
-                .add(new Symbol(','))
-                .add(constantDeclarator())
-            ));
-        return constantDeclaratorsRest;
-    }
-
-    /** VariableDeclarator:
-     *      Identifier VariableDeclaratorRest
-     */
-    public Parser variableDeclarator() {
-        log("variableDeclarator");
-        if (variableDeclarator != null) return variableDeclarator;
-        variableDeclarator = sequence("<variableDeclarator>");
-        variableDeclarator.add(identifier());
-        variableDeclarator.add(variableDeclaratorRest());
-        return variableDeclarator;
-    }
-
-    /** ConstantDeclarator:
-     *      Identifier ConstantDeclaratorRest
-     */
-    public Parser constantDeclarator() {
-        log("constantDeclarator");
-        if (constantDeclarator != null) return constantDeclarator;
-        constantDeclarator = sequence("<constantDeclarator>");
-            constantDeclarator.add(identifier());
-            constantDeclarator.add(constantDeclaratorRest());
-        return constantDeclarator;
-    }
-
-    /** VariableDeclaratorRest:
-     *      BracketsOpt [ =   VariableInitializer]
-     */
-    public Parser variableDeclaratorRest() {
-        log("variableDeclaratorRest");
-        if (variableDeclaratorRest != null) return variableDeclaratorRest;
-        variableDeclaratorRest = sequence("<variableDeclaratorRest>");
-            variableDeclaratorRest.add(bracketsOpt());
-            variableDeclaratorRest.add(zeroOrOne(sequence("<variableDeclaratorRest$1>")
-                .add(new Symbol('='))
-                .add(variableInitializer())
-            ));
-        return variableDeclaratorRest;
-    }
-
-    /** ConstantDeclaratorRest:
-     *      BracketsOpt =   VariableInitializer
-     */
-    public Parser constantDeclaratorRest() {
-        log("constantDeclaratorRest");
-        if (constantDeclaratorRest != null) return constantDeclaratorRest;
-        constantDeclaratorRest = sequence("<constantDeclaratorRest>");
-            constantDeclaratorRest.add(bracketsOpt());
-            constantDeclaratorRest.add(new Symbol('='));
-            constantDeclaratorRest.add(variableInitializer());
-        return constantDeclaratorRest;
-    }
-
-    /** VariableDeclaratorId:
-     *      Identifier BracketsOpt
-     */
-    public Parser variableDeclaratorId() {
-        log("variableDeclaratorId");
-        if (variableDeclaratorId != null) return variableDeclaratorId;
-        variableDeclaratorId =  sequence("<variableDeclaratorId>");
-            variableDeclaratorId.add(identifier());
-            variableDeclaratorId.add(bracketsOpt());
-        return variableDeclaratorId;
-    }
-
-    /** CompilationUnit:
-     *      [Annotations opt package QualifiedIdentifier ;  ] {ImportDeclaration} {TypeDeclaration}
-     */
-    public Parser compilationUnit() {
-        log("compilationUnit");
-        if (compilationUnit != null) return compilationUnit;
-        compilationUnit = sequence("<compilationUnit>");
-            compilationUnit.add(zeroOrOne(
-                sequence("<compilationUnit$1>")
-                    //todo .add(zeroOrOne(annotations()))
-                    .add(new Literal("package"))
-                    .add(qualifiedIdentifier())
-                    .add(new Symbol(';'))
-            ));
-            compilationUnit.add(repetition(importDeclaration()));
-            compilationUnit.add(repetition(typeDeclaration()));
-        return compilationUnit;
-    }
-
-    /** ImportDeclaration:
-     *      import [static] Identifier { .   Identifier } [  .*   ];
-     */
-    public Parser importDeclaration() {
-        log("importDeclaration");
-        if (importDeclaration != null) return importDeclaration;
-        importDeclaration = sequence("<importDeclaration>");
-            importDeclaration.add(new Literal("import"));
-            importDeclaration.add(zeroOrOne(new Literal("static")));
-            importDeclaration.add(identifier());
-            importDeclaration.add(repetition(sequence("<importDeclaration$1>")
-                .add(new Symbol('.'))
-                .add(identifier())
-            ));
-            importDeclaration.add(zeroOrOne(new Symbol(".*")));
-            importDeclaration.add(new Symbol(';'));
-        return importDeclaration;
-    }
-
-    /** TypeDeclaration:
-     *      ClassOrInterfaceDeclaration
-     *      ;
-     */
-    public Parser typeDeclaration() {
-        log("typeDeclaration");
-        if (typeDeclaration != null) return typeDeclaration;
-        typeDeclaration = alternation("<typeDeclaration>");
-            typeDeclaration.add(classOrInterfaceDeclaration());
-            typeDeclaration.add(new Symbol(';'));
-        return typeDeclaration;
-    }
-
-    /** ClassOrInterfaceDeclaration:
-     *      ModifiersOpt (ClassDeclaration | InterfaceDeclaration)
-     */
-    public Parser classOrInterfaceDeclaration() {
-        log("classOrInterfaceDeclaration");
-        if (classOrInterfaceDeclaration != null) return classOrInterfaceDeclaration;
-        classOrInterfaceDeclaration = sequence("<classOrInterfaceDeclaration>");
-        classOrInterfaceDeclaration.add(modifiersOpt());
-        classOrInterfaceDeclaration.add(alternation("<classOrInterfaceDeclaration$a>")
-                .add(classDeclaration())
-                .add(interfaceDeclaration())
-            );
-        return classOrInterfaceDeclaration;
-    }
-
-    /** ClassDeclaration:
-     *      NormalClassDeclaration           // note error in JLS¤18 makes this look like a Sequence not an Alternation
-     *      EnumDeclaration
-     */
-    public Parser classDeclaration() {
-        log("classDeclaration");
-        if (classDeclaration != null) return classDeclaration;
-        classDeclaration = alternation("<classDeclaration>");
-        classDeclaration.add(normalClassDeclaration());
-        //todo classDeclaration.add(enumDeclaration());
-        return classDeclaration;
-    }
-
-    /** NormalClassDeclaration:
-     *      class Identifier TypeParameters opt [extends Type] [implements TypeList] ClassBody
-     */
-    public Parser normalClassDeclaration() {
-        log("normalClassDeclaration");
-        if (normalClassDeclaration != null) return normalClassDeclaration;
-        normalClassDeclaration = sequence("<normalClassDeclaration>");
-            normalClassDeclaration.add(new Literal("class"));
-            normalClassDeclaration.add(identifier());
-            normalClassDeclaration.add(zeroOrOne(typeParameters()));
-            normalClassDeclaration.add(zeroOrOne(sequence("<normalClassDeclaration$1>")
-                .add(new Literal("extends"))
-                .add(type())
-            ));
-            normalClassDeclaration.add(zeroOrOne(sequence("<normalClassDeclaration$2>")
-                .add(new Literal("implements"))
-                .add(typeList())
-            ));
-            normalClassDeclaration.add(classBody());
-        return normalClassDeclaration;
-    }
-
-    /** TypeParameters:
-     *      < TypeParameter {, TypeParameter}>
-     */
-    public Parser typeParameters() {
-        log("typeParameters");
-        if (typeParameters != null) return typeParameters;
-        typeParameters = sequence("<typeParameters>");
-            typeParameters.add(new Symbol('<'));
-            typeParameters.add(typeParameter());
-            typeParameters.add(repetition(sequence("<typeParameters$1>")
-                .add(new Symbol(','))
-                .add(typeParameter())
-            ));
-            typeParameters.add(new Symbol('>'));
-        return typeParameters;
-    }
-
-    /** TypeParameter:
-     *      Identifier [extendsBound]
-     */
-    public Parser typeParameter() {
-        log("typeParameter");
-        if (typeParameter != null) return typeParameter;
-        typeParameter = sequence("<typeParameter>");
-            typeParameter.add(identifier());
-            typeParameter.add(zeroOrOne(sequence("<typeParameter$1>")
-                .add(new Literal("extends"))
-                .add(bound())
-            ));
-        return typeParameter;
-    }
-
-    /** Bound:
-     *      Type {&Type}
-     */
-    public Parser bound() {
-        log("bound");
-        if (bound != null) return bound;
-        bound = sequence("<bound>");
-            bound.add(type());
-            bound.add(repetition(sequence("<bound$1>")
-                .add(new Symbol('&'))
-                .add(type())
-            ));
-        return bound;
-    }
-
-    /** EnumDeclaration:
-     *      ClassModifiers opt enum Identifier[implements TypeList] EnumBody
-     */
-    public Parser enumDeclaration() {
-        log("enumDeclaration");
-        if (enumDeclaration != null) return enumDeclaration;
-        enumDeclaration = sequence("<enumDeclaration>");
-            enumDeclaration.add(zeroOrOne(classModifiers()));
-            enumDeclaration.add(new Literal("enum"));
-            enumDeclaration.add(identifier());
-            enumDeclaration.add(zeroOrOne(sequence("<enumDeclaration$1>")
-                .add(new Literal("implements"))
-                .add(typeList())
-            ));
-            enumDeclaration.add(enumBody());
-        return enumDeclaration;
-    }
-
-    /** EnumBody:
-     *      { EnumConstants opt ,opt EnumBodyDeclarations opt }
-     */
-    public Parser enumBody() {
-        log("enumBody");
-        if (enumBody != null) return enumBody;
-        enumBody = sequence("<enumBody>");
-            enumBody.add(new Symbol('{'));
-            enumBody.add(zeroOrOne(enumConstants()));
-            enumBody.add(zeroOrOne(new Symbol(',')));
-            enumBody.add(zeroOrOne(enumBodyDeclarations()));
-            enumBody.add(new Symbol('}'));
-        return enumBody;
-    }
-
-    /** EnumConstants:
-     *      EnumConstant
-     *      EnumConstants , EnumConstant
-     */
-    public Parser enumConstants() {
-        log("enumConstants");
-        if (enumConstants != null) return enumConstants;
-        enumConstants = alternation("<enumConstants>");
-            enumConstants.add(enumConstant());
-            enumConstants.add(sequence("<enumConstants$1>")
-                .add(enumConstants())
-                .add(new Symbol(','))
-                .add(enumConstant())
-            );
-        return enumConstants;
-    }
-
-    /** EnumConstant:
-     *      Annotations Identifier EnumArguments opt ClassBody opt
-     *
-     * N.B. JRR changed to EnumArguments - check with JLSv3 spec revisions (bug reported in grammar)
-     */
-    public Parser enumConstant() {
-        log("enumConstant");
-        if (enumConstant != null) return enumConstant;
-        enumConstant = sequence("<enumConstant>");
-            enumConstant.add(annotations());
-            enumConstant.add(identifier());
-            enumConstant.add(zeroOrOne(enumArguments()));
-            enumConstant.add(zeroOrOne(classBody()));
-        return enumConstant;
-    }
-
-    /** EnumArguments:
-     *      ( ArgumentListopt )
-     *
-     * N.B. JRR changed to EnumArguments - check with JLSv3 spec revisions (bug reported in grammar)
-     */
-    public Parser enumArguments() {
-        log("enumArguments");
-        if (enumArguments != null) return enumArguments;
-        enumArguments = sequence("<enumArguments>");
-            enumArguments.add(new Symbol('('));
-            enumArguments.add(zeroOrOne(argumentList()));
-            enumArguments.add(new Symbol(')'));
-        return enumArguments;
-    }
-
-    /** EnumBodyDeclarations:
-     *      ; ClassBodyDeclarationsopt
-     *
-     * todo that semicolon looks a bit dodgy... jez
-     */
-    public Parser enumBodyDeclarations() {
-        log("enumBodyDeclarations");
-        if (enumBodyDeclarations != null) return enumBodyDeclarations;
-        enumBodyDeclarations = sequence("<enumBodyDeclarations>");
-            enumBodyDeclarations.add(new Symbol(';'));
-            enumBodyDeclarations.add(zeroOrOne(classBodyDeclarations()));
-        return enumBodyDeclarations;
-    }
-
-    /** InterfaceDeclaration:
-     *      NormalInterfaceDeclaration
-     *      AnnotationTypeDeclaration
-     */
-    public Parser interfaceDeclaration() {
-        log("interfaceDeclaration");
-        if (interfaceDeclaration != null) return interfaceDeclaration;
-        interfaceDeclaration = alternation("<interfaceDeclaration>");
-            interfaceDeclaration.add(normalInterfaceDeclaration());
-            interfaceDeclaration.add(annotationTypeDeclaration());
-        return interfaceDeclaration;
-    }
-
-    /** NormalInterfaceDeclaration:
-     *      interface Identifier TypeParameters opt[extends TypeList] InterfaceBody
-     */
-    public Parser normalInterfaceDeclaration() {
-        log("normalInterfaceDeclaration");
-        if (normalInterfaceDeclaration != null) return normalInterfaceDeclaration;
-        normalInterfaceDeclaration = sequence("<normalInterfaceDeclaration>");
-            normalInterfaceDeclaration.add(new Literal("interface"));
-            normalInterfaceDeclaration.add(identifier());
-            normalInterfaceDeclaration.add(zeroOrOne(typeParameters()));
-            normalInterfaceDeclaration.add(zeroOrOne(sequence("<normalInterfaceDeclaration$1>")
-                .add(new Literal("extends"))
-                .add(typeList())
-            ));
-            normalInterfaceDeclaration.add(interfaceBody());
-        return normalInterfaceDeclaration;
-    }
-
-    /** TypeList:
-     *      Type { ,   Type}
-     */
-    public Parser typeList() {
-        log("typeList");
-        if (typeList != null) return typeList;
-        typeList = sequence("<typeList>");
-            typeList.add(type());
-            typeList.add(repetition(sequence("<typeList$1>")
-                .add(new Symbol(','))
-                .add(type())
-            ));
-        return typeList;
-    }
-
-    /** AnnotationTypeDeclaration:
-     *      InterfaceModifiers opt @ interface Identifier AnnotationTypeBody
-     */
-    public Parser annotationTypeDeclaration() {
-        log("annotationTypeDeclaration");
-        if (annotationTypeDeclaration != null) return annotationTypeDeclaration;
-        annotationTypeDeclaration = sequence("<annotationTypeDeclaration>");
-            annotationTypeDeclaration.add(zeroOrOne(interfaceModifiers()));
-            annotationTypeDeclaration.add(new Symbol('@'));
-            annotationTypeDeclaration.add(new Literal("interface")); // @todo is this correct?
-            annotationTypeDeclaration.add(identifier());
-            annotationTypeDeclaration.add(annotationTypeBody());
-        return annotationTypeDeclaration;
-    }
-
-    /** AnnotationTypeBody:
-     *      { AnnotationTypeElementDeclarations }
-     */
-    public Parser annotationTypeBody() {
-        log("annotationTypeBody");
-        if (annotationTypeBody != null) return annotationTypeBody;
-        annotationTypeBody = sequence("<annotationTypeBody>");
-            annotationTypeBody.add(new Symbol('{'));
-            annotationTypeBody.add(annotationTypeElementDeclarations());
-            annotationTypeBody.add(new Symbol('}'));
-        return annotationTypeBody;
-    }
-
-    /** AnnotationTypeElementDeclarations:
-     *      AnnotationTypeElementDeclaration
-     *      AnnotationTypeElementDeclarations AnnotationTypeElementDeclaration
-     */
-    public Parser annotationTypeElementDeclarations() {
-        log("annotationTypeElementDeclarations");
-        if (annotationTypeElementDeclarations != null) return annotationTypeElementDeclarations;
-        annotationTypeElementDeclarations = alternation("<annotationTypeElementDeclarations>");
-            annotationTypeElementDeclarations.add(annotationTypeElementDeclaration());
-            annotationTypeElementDeclarations.add(sequence("<annotationTypeElementDeclarations$1>")
-                .add(annotationTypeElementDeclarations())
-                .add(annotationTypeElementDeclaration())
-            );
-        return annotationTypeElementDeclarations;
-    }
-
-    /** AnnotationTypeElementDeclaration:
-     *      AbstractMethodModifiers opt Type Identifier ( ) DefaultValueopt ;
-     *      ConstantDeclaration
-     *      ClassDeclaration
-     *      InterfaceDeclaration
-     *      EnumDeclaration
-     *      AnnotationTypeDeclaration
-     *      ;
-     */
-    public Parser annotationTypeElementDeclaration() {
-        log("annotationTypeElementDeclaration");
-        if (annotationTypeElementDeclaration != null) return annotationTypeElementDeclaration;
-        annotationTypeElementDeclaration = alternation("<annotationTypeElementDeclaration>");
-            annotationTypeElementDeclaration.add(sequence("<annotationTypeElementDeclaration$1>")
-                .add(zeroOrOne(abstractMethodModifiers()))
-                .add(type())
-                .add(identifier())
-                .add(new Symbol('('))   // @todo - is this right
-                .add(new Symbol(')'))
-                .add(zeroOrOne(defaultValue()))
-                .add(new Symbol(';'))
-            );
-            annotationTypeElementDeclaration.add(constantDeclaration());
-            annotationTypeElementDeclaration.add(classDeclaration());
-            annotationTypeElementDeclaration.add(interfaceDeclaration());
-            annotationTypeElementDeclaration.add(enumDeclaration());
-            annotationTypeElementDeclaration.add(annotationTypeDeclaration());
-            annotationTypeElementDeclaration.add(new Symbol(';'));
-        return annotationTypeElementDeclaration;
-    }
-
-    /** DefaultValue:
-     *      default ElementValue
-     */
-    public Parser defaultValue() {
-        log("defaultValue");
-        if (defaultValue != null) return defaultValue;
-        defaultValue = sequence("<defaultValue>");
-            defaultValue.add(new Literal("default"));
-            defaultValue.add(elementValue());
-        return defaultValue;
-    }
-
-    /** ClassBody:
-     *      { {ClassBodyDeclaration}}
-     */
-    public Parser classBody() {
-        log("classBody");
-        if (classBody != null) return classBody;
-        classBody = sequence("<classBody>");
-            classBody.add(new Symbol('{'));
-            //todo classBody.add(repetition(classBodyDeclaration()));
-            classBody.add(new Symbol('}'));
-        return classBody;
-    }
-
-    /** InterfaceBody:
-     *      { {InterfaceBodyDeclaration}}
-     */
-    public Parser interfaceBody() {
-        log("interfaceBody");
-        if (interfaceBody != null) return interfaceBody;
-        interfaceBody = sequence("<interfaceBody>");
-            interfaceBody.add(new Symbol('{'));
-            interfaceBody.add(repetition(interfaceBodyDeclaration()));
-            interfaceBody.add(new Symbol('}'));
-        return interfaceBody;
-    }
-
-    /** ClassBodyDeclaration:
-     *      ;
-     *      [static] Block
-     *      ModifiersOpt MemberDecl
-     */
-    public Parser classBodyDeclaration() {
-        log("classBodyDeclaration");
-        if (classBodyDeclaration != null) return classBodyDeclaration;
-        classBodyDeclaration = alternation("<classBodyDeclaration>");
-            classBodyDeclaration.add(new Symbol(';'));
-            classBodyDeclaration.add(sequence("<classBodyDeclaration$1>")
-                .add(zeroOrOne(new Literal("static")))
-                .add(block())
-            );
-            classBodyDeclaration.add(sequence("<classBodyDeclaration$2>")
-                .add(modifiersOpt())
-                .add(memberDecl())
-            );
-        return classBodyDeclaration;
-    }
-
-    /** MemberDecl:
-     *      GenericMethodOrConstructorDecl
-     *      MethodOrFieldDecl
-     *      void Identifier MethodDeclaratorRest
-     *      Identifier ConstructorDeclaratorRest
-     *      ClassOrInterfaceDeclaration
-     */
-    public Parser memberDecl() {
-        log("memberDecl");
-        if (memberDecl != null) return memberDecl;
-        memberDecl = alternation("<memberDecl>");
-            memberDecl.add(genericMethodOrConstructorDecl());
-            memberDecl.add(methodOrFieldDecl());
-            memberDecl.add(sequence("<memberDecl$1>")
-                .add(new Literal("void"))
-                .add(identifier())
-                .add(methodDeclaratorRest())
-            );
-            memberDecl.add(sequence("<memberDecl$2>")
-                .add(identifier())
-                .add(constructorDeclaratorRest())
-            );
-            memberDecl.add(classOrInterfaceDeclaration());
-        return memberDecl;
-    }
-
-    /** GenericMethodOrConstructorDecl:
-     *      TypeParameters GenericMethodOrConstructorRest
-     */
-    public Parser genericMethodOrConstructorDecl() {
-        log("genericMethodOrConstructorDecl");
-        if (genericMethodOrConstructorDecl != null) return genericMethodOrConstructorDecl;
-        genericMethodOrConstructorDecl = sequence("<genericMethodOrConstructorDecl>");
-            genericMethodOrConstructorDecl.add(typeParameters());
-            genericMethodOrConstructorDecl.add(genericMethodOrConstructorRest());
-        return genericMethodOrConstructorDecl;
-    }
-
-    /** GenericMethodOrConstructorRest:
-     *      Type Identifier MethodDeclaratorRest
-     *      Identifier ConstructorDeclaratorRest
-     */
-    public Parser genericMethodOrConstructorRest() {
-        log("genericMethodOrConstructorRest");
-        if (genericMethodOrConstructorRest != null) return genericMethodOrConstructorRest;
-        genericMethodOrConstructorRest = alternation("<genericMethodOrConstructorRest>");
-            genericMethodOrConstructorRest.add(sequence("<genericMethodOrConstructorRest$1>")
-                .add(type())
-                .add(identifier())
-                .add(methodDeclaratorRest())
-            );
-            genericMethodOrConstructorRest.add(sequence("<genericMethodOrConstructorRest$2>")
-                .add(identifier())
-                .add(constructorDeclaratorRest())
-            );
-        return genericMethodOrConstructorRest;
-    }
-
-    /** MethodOrFieldDecl:
-     *      Type Identifier MethodOrFieldRest
-     */
-    public Parser methodOrFieldDecl() {
-        log("methodOrFieldDecl");
-        if (methodOrFieldDecl != null) return methodOrFieldDecl;
-        methodOrFieldDecl = sequence("<methodOrFieldDecl>");
-            methodOrFieldDecl.add(type());
-            methodOrFieldDecl.add(identifier());
-            methodOrFieldDecl.add(methodOrFieldRest());
-        return methodOrFieldDecl;
-    }
-
-    /** MethodOrFieldRest:
-     *      VariableDeclaratorRest
-     *      MethodDeclaratorRest
-     */
-    public Parser methodOrFieldRest() {
-        log("methodOrFieldRest");
-        if (methodOrFieldRest != null) return methodOrFieldRest;
-        methodOrFieldRest = alternation("<methodOrFieldRest>");
-            methodOrFieldRest.add(variableDeclaratorRest());
-            methodOrFieldRest.add(methodDeclaratorRest());
-        return methodOrFieldRest;
-    }
-
-    /** InterfaceBodyDeclaration:
-     *      ;
-     *      ModifiersOpt InterfaceMemberDecl
-     */
-    public Parser interfaceBodyDeclaration() {
-        log("interfaceBodyDeclaration");
-        if (interfaceBodyDeclaration != null) return interfaceBodyDeclaration;
-        interfaceBodyDeclaration = alternation("<interfaceBodyDeclaration>");
-            interfaceBodyDeclaration.add(new Symbol(';'));
-            interfaceBodyDeclaration.add(sequence("<interfaceBodyDeclaration$1>")
-                .add(modifiersOpt())
-                .add(interfaceMemberDecl())
-            );
-        return interfaceBodyDeclaration;
-    }
-
-    /** InterfaceMemberDecl:
-     *      InterfaceMethodOrFieldDecl
-     *      InterfaceGenericMethodDecl
-     *      void Identifier VoidInterfaceMethodDeclaratorRest
-     *      ClassOrInterfaceDeclaration
-     */
-    public Parser interfaceMemberDecl() {
-        log("interfaceMemberDecl");
-        if (interfaceMemberDecl != null) return interfaceMemberDecl;
-        interfaceMemberDecl = alternation("<interfaceMemberDecl>");
-            interfaceMemberDecl.add(interfaceMethodOrFieldDecl());
-            interfaceMemberDecl.add(interfaceGenericMethodDecl());
-            interfaceMemberDecl.add(sequence("<interfaceMemberDecl$1>")
-                .add(new Literal("void"))
-                .add(identifier())
-                .add(voidInterfaceMethodDeclaratorRest())
-            );
-            interfaceMemberDecl.add(classOrInterfaceDeclaration());
-        return interfaceMemberDecl;
-    }
-
-    /** InterfaceMethodOrFieldDecl:
-     *      Type Identifier InterfaceMethodOrFieldRest
-     */
-    public Parser interfaceMethodOrFieldDecl() {
-        log("interfaceMethodOrFieldDecl");
-        if (interfaceMethodOrFieldDecl != null) return interfaceMethodOrFieldDecl;
-        interfaceMethodOrFieldDecl = sequence("<interfaceMethodOrFieldDecl>");
-            interfaceMethodOrFieldDecl.add(type());
-            interfaceMethodOrFieldDecl.add(identifier());
-            interfaceMethodOrFieldDecl.add(interfaceMethodOrFieldRest());
-        return interfaceMethodOrFieldDecl;
-    }
-
-    /** InterfaceMethodOrFieldRest:
-     *      ConstantDeclaratorsRest;
-     *      InterfaceMethodDeclaratorRest
-     */
-    public Parser interfaceMethodOrFieldRest() {
-        log("interfaceMethodOrFieldRest");
-        if (interfaceMethodOrFieldRest != null) return interfaceMethodOrFieldRest;
-        interfaceMethodOrFieldRest = alternation("<interfaceMethodOrFieldRest>");
-            interfaceMethodOrFieldRest.add(sequence("<interfaceMethodOrFieldRest$1>")
-                .add(constantDeclaratorsRest())
-                .add(new Symbol(';'))
-            );
-            interfaceMethodOrFieldRest.add(interfaceMethodDeclaratorRest());
-        return interfaceMethodOrFieldRest;
-    }
-
-    /** MethodDeclaratorRest:
-     *      FormalParameters BracketsOpt[throwsQualifiedIdentifierList]( MethodBody |;  )
-     */
-    public Parser methodDeclaratorRest() {
-        log("methodDeclaratorRest");
-        if (methodDeclaratorRest != null) return methodDeclaratorRest;
-        methodDeclaratorRest = sequence("<methodDeclaratorRest>");
-            methodDeclaratorRest.add(formalParameters());
-            methodDeclaratorRest.add(bracketsOpt());
-            methodDeclaratorRest.add(zeroOrOne(sequence("<methodDeclaratorRest$1>")
-                .add(new Literal("throws"))
-                .add(qualifiedIdentifierList())
-            ));
-            methodDeclaratorRest.add(alternation("<methodDeclaratorRest$a>")
-                .add(methodBody())
-                .add(new Symbol(';'))
-            );
-        return methodDeclaratorRest;
-    }
-
-    /** VoidMethodDeclaratorRest:
-     *      FormalParameters [throws QualifiedIdentifierList] ( MethodBody |;  )
-     */
-    public Parser voidMethodDeclaratorRest() {
-        log("voidMethodDeclaratorRest");
-        if (voidMethodDeclaratorRest != null) return voidMethodDeclaratorRest;
-        voidMethodDeclaratorRest = sequence("<voidMethodDeclaratorRest>");
-            voidMethodDeclaratorRest.add(formalParameters());
-            voidMethodDeclaratorRest.add(zeroOrOne(sequence("<voidMethodDeclaratorRest$1>")
-                .add(new Literal("throws"))
-                .add(qualifiedIdentifierList())
-            ));
-            voidMethodDeclaratorRest.add(alternation("<voidMethodDeclaratorRest$a>")
-                .add(methodBody())
-                .add(new Symbol(';'))
-            );
-        return voidMethodDeclaratorRest;
-    }
-
-    /** InterfaceMethodDeclaratorRest:
-     *      FormalParameters BracketsOpt [throws QualifiedIdentifierList];
-     */
-    public Parser interfaceMethodDeclaratorRest() {
-        log("interfaceMethodDeclaratorRest");
-        if (interfaceMethodDeclaratorRest != null) return interfaceMethodDeclaratorRest;
-        interfaceMethodDeclaratorRest = sequence("<interfaceMethodDeclaratorRest>");
-            interfaceMethodDeclaratorRest.add(formalParameters());
-            interfaceMethodDeclaratorRest.add(bracketsOpt());
-            interfaceMethodDeclaratorRest.add(zeroOrOne(sequence("<interfaceMethodDeclaratorRest$1>")
-                .add(new Literal("throws"))
-                .add(qualifiedIdentifierList())
-            ));
-        return interfaceMethodDeclaratorRest;
-    }
-
-    /** InterfaceGenericMethodDecl:
-     *      TypeParameters Type Identifier InterfaceMethodDeclaratorRest
-     */
-    public Parser interfaceGenericMethodDecl() {
-        log("interfaceGenericMethodDecl");
-        if (interfaceGenericMethodDecl != null) return interfaceGenericMethodDecl;
-        interfaceGenericMethodDecl = sequence("<interfaceGenericMethodDecl>");
-            interfaceGenericMethodDecl.add(typeParameters());
-            interfaceGenericMethodDecl.add(type());
-            interfaceGenericMethodDecl.add(identifier());
-            interfaceGenericMethodDecl.add(interfaceMethodDeclaratorRest());
-        return interfaceGenericMethodDecl;
-    }
-
-    /** VoidInterfaceMethodDeclaratorRest:
-     *      FormalParameters [throws QualifiedIdentifierList];
-     */
-    public Parser voidInterfaceMethodDeclaratorRest() {
-        log("voidInterfaceMethodDeclaratorRest");
-        if (voidInterfaceMethodDeclaratorRest != null) return voidInterfaceMethodDeclaratorRest;
-        voidInterfaceMethodDeclaratorRest = sequence("<voidInterfaceMethodDeclaratorRest>");
-            voidInterfaceMethodDeclaratorRest.add(formalParameters());
-            voidInterfaceMethodDeclaratorRest.add(zeroOrOne(sequence("<voidInterfaceMethodDeclaratorRest$1>")
-                .add(new Literal("throws"))
-                .add(qualifiedIdentifierList())
-            ));
-            voidInterfaceMethodDeclaratorRest.add(new Symbol(';'));
-        return voidInterfaceMethodDeclaratorRest;
-    }
-
-    /** ConstructorDeclaratorRest:
-     *      FormalParameters [throws QualifiedIdentifierList] MethodBody
-     */
-    public Parser constructorDeclaratorRest() {
-        log("constructorDeclaratorRest");
-        if (constructorDeclaratorRest != null) return constructorDeclaratorRest;
-        constructorDeclaratorRest = sequence("<constructorDeclaratorRest>");
-            constructorDeclaratorRest.add(formalParameters());
-            constructorDeclaratorRest.add(zeroOrOne(sequence("<constructorDeclaratorRest$1>")
-                .add(new Literal("throws"))
-                .add(qualifiedIdentifierList())
-            ));
-            constructorDeclaratorRest.add(methodBody());
-        return constructorDeclaratorRest;
-    }
-
-    /** QualifiedIdentifierList:
-     *      QualifiedIdentifier { ,   QualifiedIdentifier}
-     */
-    public Parser qualifiedIdentifierList() {
-        log("qualifiedIdentifierList");
-        if (qualifiedIdentifierList != null) return qualifiedIdentifierList;
-        qualifiedIdentifierList = sequence("<qualifiedIdentifierList>");
-        qualifiedIdentifierList.add(qualifiedIdentifier());
-        qualifiedIdentifierList.add(repetition(sequence("<qualifiedIdentifierList$1>")
-                .add(new Symbol(','))
-                .add(qualifiedIdentifier())
-            ));
-        return qualifiedIdentifierList;
-    }
-
-    /** FormalParameters:
-     *      ( [FormalParameterDecls])
-     */
-    public Parser formalParameters() {
-        log("formalParameters");
-        if (formalParameters != null) return formalParameters;
-        formalParameters = sequence("<formalParameters>");
-            formalParameters.add(new Symbol('('));
-            formalParameters.add(zeroOrOne(formalParameterDecls()));
-            formalParameters.add(new Symbol(')'));
-        return formalParameters;
-    }
-
-    /** FormalParameterDecls:
-     *      [final] [Annotations] Type FormalParameterDeclsRest]
-     * todo - is last parameter optional!!!????
-     */
-    public Parser formalParameterDecls() {
-        log("formalParameterDecls");
-        if (formalParameterDecls != null) return formalParameterDecls;
-        formalParameterDecls = sequence("<formalParameterDecls>");
-            formalParameterDecls.add(zeroOrOne(new Literal("final")));
-            formalParameterDecls.add(zeroOrOne(annotations()));
-            formalParameterDecls.add(type());
-            formalParameterDecls.add(formalParameterDeclsRest());
-        return formalParameterDecls;
-    }
-
-    /** FormalParameterDeclsRest:
-     *      VariableDeclaratorId [, FormalParameterDecls]
-     *      ... VariableDeclaratorId
-     */
-    public Parser formalParameterDeclsRest() {
-        log("formalParameterDeclsRest");
-        if (formalParameterDeclsRest != null) return formalParameterDeclsRest;
-        formalParameterDeclsRest = alternation("<formalParameterDeclsRest>");
-        formalParameterDeclsRest.add(sequence("<formalParameterDeclsRest$1>")
-                .add(variableDeclaratorId())
-                .add(zeroOrOne(sequence("<formalParameterDeclsRest$2>")
-                    .add(new Symbol(','))
-                    .add(formalParameterDecls())
-                ))
-            );
-        formalParameterDeclsRest.add(sequence("<formalParameterDeclsRest$3>")
-                .add(new Symbol("..."))  //todo - this doesn't seem right :-)
-                .add(variableDeclaratorId())
-            );
-        return formalParameterDeclsRest;
-    }
-
-    /** MethodBody:
-     *      Block
-     */
-    public Parser methodBody() {
-        log("methodBody");
-        if (methodBody != null) return methodBody;
-        methodBody = block();
-        return methodBody;
-    }
-
-
-    // -=-=-=-=-=-=-=-=-=- END OF JLS CHAPTER 18 -=-=-=-=-=-=-=-=-
-
-
-
-
-
-
-    // ------ altered JLSv3¤8.1.1 ------
-    /** ClassModifiers:
-     *      ClassModifier {ClassModifier}
-     */
-    public Parser classModifiers() {
-        log("classModifiers");
-        if (classModifiers != null) return classModifiers;
-        classModifiers = oneOrMore(classModifier());
-        return classModifiers;
-    }
-    /** ClassModifier: one of
-     *      Annotation public protected private
-     *      abstract static final strictfp
-     */
-    public Parser classModifier() {
-        log("classModifier");
-        if (classModifier != null) return classModifier;
-        classModifier = new Alternation("<class modifier>");
-            classModifier.add(annotation());
-            classModifier.add(new Literal("public"));
-            classModifier.add(new Literal("protected"));
-            classModifier.add(new Literal("private"));
-            classModifier.add(new Literal("abstract"));
-            classModifier.add(new Literal("static"));
-            classModifier.add(new Literal("final"));
-            classModifier.add(new Literal("strictfp"));
-        return classModifier;
-    }
-
-    // ------ altered JLSv3¤8.1.6 ------
-    /** ClassBodyDeclarations:
-     *      ClassBodyDeclaration {ClassBodyDeclaration}
-     */
-    public Parser classBodyDeclarations() {
-        log("classBodyDeclarations");
-        if (classBodyDeclarations != null) return classBodyDeclarations;
-        classBodyDeclarations = oneOrMore(classBodyDeclaration());
-        return classBodyDeclarations;
-    }
-
-    // ------ JLSv3¤8.4.1 ------
-    /** FormalParameter:
-     *      VariableModifiers Type VariableDeclaratorId
-     */
-    public Parser formalParameter() {
-        log("formalParameter");
-        if (formalParameter != null) return formalParameter;
-        formalParameter = sequence("<formalParameter>");
-            formalParameter.add(variableModifiers());
-            formalParameter.add(type());
-            formalParameter.add(variableDeclaratorId());
-        return formalParameter;
-    }
-
-    /** ------- altered JLSv3¤8.4.1 --------
-     *  VariableModifiers:
-     *      VariableModifier {VariableModifier}
-     */
-    public Parser variableModifiers() {
-        log("variableModifiers");
-        if (variableModifiers != null) return variableModifiers;
-        variableModifiers = oneOrMore(variableModifier());
-        return variableModifiers;
-    }
-
-    /** VariableModifier: one of
-     *      final Annotation
-     */
-    public Parser variableModifier() {
-        log("variableModifier");
-        if (variableModifier != null) return variableModifier;
-        variableModifier = alternation("<variableModifier>");
-            variableModifier.add(new Literal("final"));
-            variableModifier.add(annotation());
-        return variableModifier;
-    }
-
-    // ---------- altered JLSv3¤9.1.1 -------------
-    /** InterfaceModifiers:
-     *      InterfaceModifier {InterfaceModifier}
-     */
-    public Parser interfaceModifiers() {
-        log("interfaceModifiers");
-        if (interfaceModifiers != null) return interfaceModifiers;
-        interfaceModifiers = oneOrMore(interfaceModifier());
-        return interfaceModifiers;
-    }
-
-    /** InterfaceModifier: one of
-     *      Annotation public protected private
-     *      abstract static strictfp
-     */
-    public Parser interfaceModifier() {
-        log("interfaceModifier");
-        if (interfaceModifier != null) return interfaceModifier;
-        interfaceModifier = alternation("<interfaceModifier>");
-            interfaceModifier.add(annotation());
-            interfaceModifier.add(new Literal("public"));
-            interfaceModifier.add(new Literal("protected"));
-            interfaceModifier.add(new Literal("private"));
-            interfaceModifier.add(new Literal("abstract"));
-            interfaceModifier.add(new Literal("static"));
-            interfaceModifier.add(new Literal("strictfp"));
-        return interfaceModifier;
-    }
-
-    // ---------- JLSv3¤9.3 ---------------
-    /** ConstantDeclaration:
-     *      ConstantModifiers opt Type VariableDeclarators ;
-     */
-    public Parser constantDeclaration() {
-        log("constantDeclaration");
-        if (constantDeclaration != null) return constantDeclaration;
-        constantDeclaration = sequence("<constantDeclaration>");
-            constantDeclaration.add(zeroOrOne(constantModifiers()));
-            constantDeclaration.add(type());
-            constantDeclaration.add(variableDeclarators());
-            constantDeclaration.add(new Symbol(';'));
-        return constantDeclaration;
-    }
-
-    /** ---------- altered JLSv3¤9.3 ---------------
-     * ConstantModifiers:
-     *      ConstantModifier {ConstantModifier}
-     */
-    public Parser constantModifiers() {
-        log("constantModifiers");
-        if (constantModifiers != null) return constantModifiers;
-        constantModifiers = oneOrMore(constantModifier());
-        return constantModifiers;
-    }
-
-    /** ConstantModifier: one of
-     *      Annotation public static final
-     */
-    public Parser constantModifier() {
-        log("constantModifier");
-        if (constantModifier != null) return constantModifier;
-        constantModifier = alternation("<constantModifier>");
-            constantModifier.add(annotation());
-            constantModifier.add(new Literal("public"));
-            constantModifier.add(new Literal("static"));
-            constantModifier.add(new Literal("final"));
-        return constantModifier;
-    }
-
-    // ---------- altered JLSv3¤9.4 ---------------
-    /** AbstractMethodModifiers:
-     *      AbstractMethodModifier {AbstractMethodModifier}
-     */
-    public Parser abstractMethodModifiers() {
-        log("abstractMethodModifiers");
-        if (abstractMethodModifiers != null) return abstractMethodModifiers;
-        abstractMethodModifiers = oneOrMore(abstractMethodModifier());
-        return abstractMethodModifiers;
-    }
-
-    /** AbstractMethodModifier: one of
-     *      Annotation public abstract
-     */
-    public Parser abstractMethodModifier() {
-        log("abstractMethodModifier");
-        if (abstractMethodModifier != null) return abstractMethodModifier;
-        abstractMethodModifier = alternation("<abstractMethodModifier>");
-            abstractMethodModifier.add(annotation());
-            abstractMethodModifier.add(new Literal("public"));
-            abstractMethodModifier.add(new Literal("abstract"));
-        return abstractMethodModifier;
-    }
-
-    // ---------- altered JLSv3¤9.7 ---------------
-    /** Annotations:
-     *      Annotation {Annotation}
-     */
-    public Parser annotations() {
-        log("annotations");
-        if (annotations != null) return annotations;
-        annotations = oneOrMore(annotation());
-        return annotations;
-    }
-
-    /** Annotation:
-     *      NormalAnnotation
-     *      MarkerAnnotation
-     *      SingleElementAnnotation
-     */
-    public Parser annotation() {
-        log("annotation");
-        if (annotation != null) return annotation;
-        annotation = alternation("<annotation>");
-        annotation.add(normalAnnotation());
-        annotation.add(markerAnnotation());
-        annotation.add(singleElementAnnotation());
-        return annotation;
-    }
-
-    /** NormalAnnotation:
-     *      @ TypeName ( ElementValuePairs opt )
-     */
-    public Parser normalAnnotation() {
-        log("normalAnnotation");
-        if (normalAnnotation != null) return normalAnnotation;
-        normalAnnotation = sequence("<normalAnnotation>");
-            normalAnnotation.add(new Symbol('@'));
-            normalAnnotation.add(typeName());
-            normalAnnotation.add(new Symbol('('));
-            normalAnnotation.add(zeroOrOne(elementValuePairs()));
-            normalAnnotation.add(new Symbol(')'));
-        return normalAnnotation;
-    }
-
-    /** ElementValuePairs:
-     *      ElementValuePair
-     *      ElementValuePairs , ElementValuePair
-     */
-    public Parser elementValuePairs() {
-        log("elementValuePairs");
-        if (elementValuePairs != null) return elementValuePairs;
-        elementValuePairs = alternation("<elementValuePairs>");
-        elementValuePairs.add(elementValuePair());
-        elementValuePairs.add(sequence("<elementValuePairs$1>")
-                .add(elementValuePairs())
-                .add(new Symbol(','))
-                .add(elementValuePair())
-            );
-        return elementValuePairs;
-    }
-
-    /** ElementValuePair:
-     *      Identifier = ElementValue
-     */
-    public Parser elementValuePair() {
-        log("elementValuePair");
-        if (elementValuePair != null) return elementValuePair;
-        elementValuePair = sequence("<elementValuePair>");
-            elementValuePair.add(identifier());
-            elementValuePair.add(new Symbol('='));
-            elementValuePair.add(elementValue());
-        return elementValuePair;
-    }
-
-    /** ElementValue:
-     *      ConditionalExpression
-     *      Annotation
-     *      ElementValueArrayInitializer
-     */
-    public Parser elementValue() {
-        log("elementValue");
-        if (elementValue != null) return elementValue;
-        elementValue = alternation("<elementValue>");
-        elementValue.add(conditionalExpression());
-        elementValue.add(annotation());
-        elementValue.add(elementValueArrayInitializer());
-        return elementValue;
-    }
-
-    /** ElementValueArrayInitializer:
-     *      { ElementValuesopt ,opt }
-     */
-    public Parser elementValueArrayInitializer() {
-        log("elementValueArrayInitializer");
-        if (elementValueArrayInitializer != null) return elementValueArrayInitializer;
-        elementValueArrayInitializer = sequence("<elementValueArrayInitializer>");
-            elementValueArrayInitializer.add(new Symbol('{'));
-            elementValueArrayInitializer.add(zeroOrOne(elementValues()));
-            elementValueArrayInitializer.add(zeroOrOne(new Symbol(',')));
-            elementValueArrayInitializer.add(new Symbol('}'));
-        return elementValueArrayInitializer;
-    }
-
-    /** ElementValues:
-     *      ElementValue
-     *      ElementValues , ElementValue
-     */
-    public Parser elementValues() {
-        log("elementValues");
-        if (elementValues != null) return elementValues;
-        elementValues = alternation("<elementValues>");
-        elementValues.add(elementValue());
-        elementValues.add(sequence("<elementValues$1>")
-                .add(elementValues())
-                .add(new Symbol(','))
-                .add(elementValue())
-            );
-        return elementValues;
-    }
-
-    /** MarkerAnnotation:
-     *      @ TypeName
-     */
-    public Parser markerAnnotation() {
-        log("markerAnnotation");
-        if (markerAnnotation != null) return markerAnnotation;
-        markerAnnotation = sequence("<markerAnnotation>");
-            markerAnnotation.add(new Symbol('@'));
-            markerAnnotation.add(typeName());
-        return markerAnnotation;
-    }
-
-    /** SingleElementAnnotation:
-     *      @ TypeName ( ElementValue )
-     */
-    public Parser singleElementAnnotation() {
-        log("singleElementAnnotation");
-        if (singleElementAnnotation != null) return singleElementAnnotation;
-        singleElementAnnotation = sequence("<singleElementAnnotation>");
-            singleElementAnnotation.add(new Symbol('@'));
-            singleElementAnnotation.add(typeName());
-            singleElementAnnotation.add(new Symbol('('));
-            singleElementAnnotation.add(elementValue());
-            singleElementAnnotation.add(new Symbol(')'));
-        return singleElementAnnotation;
-    }
-
-    // -------- JLSv3¤15.9 -----------
-    /** ArgumentList:
-     *      Expression
-     *      ArgumentList ,Expression
-     */
-    public Parser argumentList() {
-        log("argumentList");
-        if (argumentList != null) return argumentList;
-        argumentList = alternation("<argumentList>");
-        argumentList.add(expression());
-        argumentList.add(sequence("<argumentList$1>")
-                .add(argumentList())
-                .add(new Symbol(','))
-                .add(expression())
-            );
-        return argumentList;
-    }
-
-
-    // todo ------- typos and abbreviations in spec ------------
-    public Parser typeName() {
-        log("typeName");
-        if (typeName != null) return typeName;
-        typeName = type();
-        return typeName;
-    }
-
-    public Parser expr() {
-        log("expr");
-        if (expr != null) return expr;
-        expr = expression();
-        return expr;
-    }
-
-    public Parser expressionStatement() {
-        log("expressionStatement");
-        if (expressionStatement != null) return expressionStatement;
-        expressionStatement = statementExpression();
-        return expressionStatement;
-    }
-
-    // Annotations refers to ¤15.25, but this is replaced with Expressions
-    // todo - conditionalexpressions in annotations may not work, or too much might be allowed in annotations...
-    public Parser conditionalExpression() {
-        log("conditionalExpression");
-        if (conditionalExpression != null) return conditionalExpression;
-        conditionalExpression = expression();
-        return conditionalExpression;
-    }
-
-
-    // todo ---------------------------------------
-
-
-
-
-    public Parser nullLiteral() {
-        log("nullLiteral");
-        if (nullLiteral != null) return nullLiteral;
-        //todo
-        nullLiteral = new Word();
-        return nullLiteral;
-    }
-
-    public Parser booleanLiteral() {
-        log("booleanLiteral");
-        if (booleanLiteral != null) return booleanLiteral;
-        //todo
-        booleanLiteral = new Word();
-        return booleanLiteral;
-    }
-
-    public Parser stringLiteral() {
-        log("stringLiteral");
-        if (stringLiteral != null) return stringLiteral;
-        //todo
-        stringLiteral = new Word();
-        return stringLiteral;
-    }
-
-    public Parser characterLiteral() {
-        log("characterLiteral");
-        if (characterLiteral != null) return characterLiteral;
-        //todo
-        characterLiteral = new Word();
-        return characterLiteral;
-    }
-
-    public Parser floatingPointLiteral() {
-        log("floatingPointLiteral");
-        if (floatingPointLiteral != null) return floatingPointLiteral;
-        //todo
-        floatingPointLiteral = new Num();
-        return floatingPointLiteral;
-    }
-
-    public Parser integerLiteral() {
-        log("integerLiteral");
-        if (integerLiteral != null) return integerLiteral;
-        //todo
-        integerLiteral = new Num();
-        return integerLiteral;
-    }
-
-    // The following singletons are used to prevent left recursion in grammar
-    protected Sequence qualifiedIdentifier;
-    protected Alternation literal;
-    protected Alternation assignmentOperator;
-    protected Sequence typeArguments;
-    protected Alternation typeArgument;
-    protected Sequence rawType;
-    protected Parser statementExpression;
-    protected Parser constantExpression;
-    protected Sequence expression1;
-    protected Parser expression1Rest;
-    protected Sequence expression2;
-    protected Alternation expression2Rest;
-    protected Alternation infixOp;
-    protected Alternation primary;
-    protected Alternation identifierSuffix;
-    protected Sequence explicitGenericInvocation;
-    protected Sequence nonWildcardTypeArguments;
-    protected Alternation explicitGenericInvocationSuffix;
-    protected Alternation prefixOp;
-    protected Alternation postfixOp;
-    protected Alternation selector;
-    protected Alternation superSuffix;
-    protected Alternation basicType;
-    protected Parser argumentsOpt;
-    protected Sequence arguments;
-    protected Repetition bracketsOpt;
-    protected Sequence creator;
-    protected Sequence createdName;
-    protected Sequence innerCreator;
-    protected Sequence arrayCreatorRest;
-    protected Sequence classCreatorRest;
-    protected Alternation variableInitializer;
-    protected Sequence parExpression;
-    protected Repetition blockStatements;
-    protected Alternation blockStatement;
-    protected Sequence localVariableDeclarationStatement;
-    protected Alternation statement;
-    protected Sequence catches;
-    protected Sequence catchClause;
-    protected Repetition switchBlockStatementGroups;
-    protected Sequence switchBlockStatementGroup;
-    protected Alternation switchLabel;
-    protected Repetition moreStatementExpressions;
-    protected Alternation forControl;
-    protected Alternation forControlRest;
-    protected Sequence forUpdate;
-    protected Repetition modifiersOpt;
-    protected Alternation modifier;
-    protected Sequence variableDeclarators;
-    protected Sequence variableDeclaratorsRest;
-    protected Sequence constantDeclaratorsRest;
-    protected Sequence constantDeclarator;
-    protected Sequence variableDeclaratorRest;
-    protected Sequence constantDeclaratorRest;
-    protected Sequence variableDeclaratorId;
-    protected Sequence compilationUnit;
-    protected Sequence importDeclaration;
-    protected Alternation typeDeclaration;
-    protected Sequence normalClassDeclaration;
-    protected Sequence typeParameters;
-    protected Sequence typeParameter;
-    protected Sequence bound;
-    protected Sequence enumDeclaration;
-    protected Sequence enumBody;
-    protected Alternation enumConstants;
-    protected Sequence enumConstant;
-    protected Sequence enumArguments;
-    protected Sequence enumBodyDeclarations;
-    protected Alternation interfaceDeclaration;
-    protected Sequence normalInterfaceDeclaration;
-    protected Sequence typeList;
-    protected Sequence annotationTypeDeclaration;
-    protected Sequence annotationTypeBody;
-    protected Alternation annotationTypeElementDeclarations;
-    protected Alternation annotationTypeElementDeclaration;
-    protected Sequence defaultValue;
-    protected Sequence classBody;
-    protected Sequence interfaceBody;
-    protected Alternation classBodyDeclaration;
-    protected Alternation memberDecl;
-    protected Sequence genericMethodOrConstructorDecl;
-    protected Alternation genericMethodOrConstructorRest;
-    protected Sequence methodOrFieldDecl;
-    protected Alternation methodOrFieldRest;
-    protected Alternation interfaceBodyDeclaration;
-    protected Alternation interfaceMemberDecl;
-    protected Sequence interfaceMethodOrFieldDecl;
-    protected Alternation interfaceMethodOrFieldRest;
-    protected Sequence methodDeclaratorRest;
-    protected Sequence voidMethodDeclaratorRest;
-    protected Sequence interfaceMethodDeclaratorRest;
-    protected Sequence interfaceGenericMethodDecl;
-    protected Sequence voidInterfaceMethodDeclaratorRest;
-    protected Sequence constructorDeclaratorRest;
-    protected Sequence formalParameters;
-    protected Sequence formalParameterDecls;
-    protected Parser methodBody;
-    protected Alternation classModifier;
-    protected Parser classBodyDeclarations;
-    protected Sequence formalParameter;
-    protected Parser variableModifiers;
-    protected Alternation variableModifier;
-    protected Parser interfaceModifiers;
-    protected Alternation interfaceModifier;
-    protected Sequence constantDeclaration;
-    protected Parser constantModifiers;
-    protected Alternation constantModifier;
-    protected Parser abstractMethodModifiers;
-    protected Alternation abstractMethodModifier;
-    protected Sequence normalAnnotation;
-    protected Sequence elementValuePair;
-    protected Sequence elementValueArrayInitializer;
-    protected Sequence markerAnnotation;
-    protected Sequence singleElementAnnotation;
-    protected Sequence expression;
-    protected Alternation type;
-    protected Alternation expression3;
-    protected Sequence arrayInitializer;
-    protected Sequence variableDeclarator;
-    protected Alternation classDeclaration;
-    protected Parser annotations;
-    protected Alternation annotation;
-    protected Alternation elementValue;
-    protected Alternation elementValues;
-    protected Alternation elementValuePairs;
-    protected Alternation formalParameterDeclsRest;
-    protected Sequence qualifiedIdentifierList;
-    protected Sequence classOrInterfaceDeclaration;
-    protected Sequence block;
-    protected Parser classModifiers;
-    protected Alternation argumentList;
-    protected Parser typeName;
-    protected Parser expr;
-    protected Parser expressionStatement;
-    protected Parser conditionalExpression;
-    protected Parser nullLiteral;
-    protected Parser booleanLiteral;
-    protected Parser stringLiteral;
-    protected Parser characterLiteral;
-    protected Parser floatingPointLiteral;
-    protected Parser integerLiteral;
-
-}
-
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingAlternation.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingAlternation.java
deleted file mode 100644
index 722b7ab..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingAlternation.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.javanicus.bpwj;
-
-import sjm.parse.*;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-/** purely a wrapper for alternation to provide debug information */
-public class LoggingAlternation extends Alternation{
-    public LoggingAlternation(String s) {
-        super(s);
-    }
-
-    public Vector match(Vector in) {
-
-        String inString = prettyPrint(best(in).getStack());
-        if (!inString.equals(LoggingJavaParser.lastIn)) {
-            LoggingJavaParser.out.println("<node TEXT='" + inString + "' POSITION='right'/>");
-            LoggingJavaParser.lastIn = inString;
-        }
-
-        String name = this.name;
-        if (name == null) name = this.toString();
-        name = name.replaceAll("<","&lt;");
-        name = name.replaceAll(">","&gt;");
-        LoggingJavaParser.out.println("<node TEXT='"+ name +"' COLOR=\"#009900\" POSITION='right'>");
-        LoggingJavaParser.level++;
-
-        //System.out.println("START " + name + "  " + prettyPrint(best(in).getStack()));
-        Vector out = null;
-        try {
-            out = super.match(in);
-        } catch (RuntimeException ex) {
-            LoggingJavaParser.out.println("<node TEXT='" + ex.getClass() + "' COLOR=\"#ff0000\" POSITION='right'/>");
-            throw ex;
-        } finally {
-            LoggingJavaParser.level--;
-            LoggingJavaParser.out.println("</node>");
-        }
-        //todo - outString
-
-        //System.out.println("END " + name);
-        //System.out.println();
-
-        return out;
-    }
-
-    private String prettyPrint(Vector s) {
-        StringBuffer sb = new StringBuffer();
-        if (s != null) {
-            Enumeration e = s.elements();
-            while (e.hasMoreElements()) {
-                Object i = e.nextElement();
-                sb.append(i);
-                if (e.hasMoreElements()) { sb.append(' ');}
-            }
-        }
-        return sb.toString();
-    }
-
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingJavaParser.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingJavaParser.java
deleted file mode 100644
index 9784f28..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingJavaParser.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.javanicus.bpwj;
-
-import sjm.parse.Alternation;
-import sjm.parse.Sequence;
-
-import java.io.PrintStream;
-
-public class LoggingJavaParser extends JavaParser {
-    public static String lastIn;
-    public static String lastOut;
-    public static int level = 0;
-    public static PrintStream out;
-
-    public Alternation alternation(String name) {
-        return new LoggingAlternation(name);
-    }
-
-    public Sequence sequence(String name) {
-        return new LoggingTrackSequence(name);
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingTrackSequence.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingTrackSequence.java
deleted file mode 100644
index 01536dd..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/LoggingTrackSequence.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 1999, 2004 Steven John Metsker. All Rights Reserved.
-
-   Steve Metsker makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import java.util.*;
-
-import sjm.parse.*;
-
-/**
- * A LoggingTrackSequence is a sequence that throws a <code>
- * TrackSequenceException</code> if the sequence begins but
- * does not complete.  It will output the parse tree as
- * XML in a form suitable for viewing in freemind.sf.net
- * 
- * @author Jeremy Rayner
- */
-
-
-public class LoggingTrackSequence extends TrackSequence {
-/**
- * Constructs a LoggingTrackSequence with the given name.
- *
- * @param    name    a name to be known by
- */
-public LoggingTrackSequence(String name) {
-	super(name);
-}
-/**
- * Given a collection of assemblies, this method matches 
- * this track against all of them, and returns a new 
- * collection of the assemblies that result from the 
- * matches.
- *
- * If the match begins but does not complete, this method
- * throws a <code>TrackSequenceException</code>.
- *
- * @return   a Vector of assemblies that result from matching
- *           against a beginning set of assemblies
- *
- * @param in a vector of assemblies to match against
- *
- */
-public Vector match(Vector in) {
-
-    // This println is useful for examining left recursion during a parse
-
-    String inString = prettyPrint(best(in));
-    if (!inString.equals(LoggingJavaParser.lastIn)) {
-        LoggingJavaParser.out.println("<node TEXT='" + inString + "' POSITION='right'/>");
-        LoggingJavaParser.lastIn = inString;
-    }
-
-    name = name.replaceAll("<","&lt;");
-    name = name.replaceAll(">","&gt;");
-    String foldNode = "";
-    if (LoggingJavaParser.level == 4 || LoggingJavaParser.level == 5 ) {
-        foldNode = " FOLDED='true' ";
-    }
-    LoggingJavaParser.out.println("<node TEXT='" + name + "' COLOR=\"#0000cc\" POSITION='right'" + foldNode + ">");
-    LoggingJavaParser.level++;
-
-    //System.out.println("START " + name + "  " + prettyPrint(best(in)));
-
-    boolean inTrack = false;
-	Vector last = in;
-	Vector out = in;
-	Enumeration e = subparsers.elements();
-	while (e.hasMoreElements()) {
-		Parser p = (Parser) e.nextElement();
-		try {
-            out = p.matchAndAssemble(last);
-        } catch (RuntimeException ex) {
-            // close all open <node> elements on way out
-            LoggingJavaParser.out.println("<node TEXT='" + ex.getClass() + "' COLOR=\"#ff0000\" POSITION='right'/>");
-            throw ex;
-        }
-		if (out.isEmpty()) {
-            LoggingJavaParser.level--;
-
-			LoggingJavaParser.out.println("</node>");
-            if (inTrack) {
-				throwTrackSequenceException(last, p);
-			}
-			return out;
-		}
-		inTrack = true;
-		last = out;
-	}
-    String outString = prettyPrint(best(out));
-    if (!outString.equals(LoggingJavaParser.lastOut)) {
-        LoggingJavaParser.out.println("<node TEXT='" + outString + "' POSITION='right'/>");
-        LoggingJavaParser.lastOut = outString;
-    }
-    LoggingJavaParser.level--;
-    LoggingJavaParser.out.println("</node>");
-    //System.out.println("END " + name + "  " + prettyPrint(best(out)));
-    //System.out.println();
-	return out;
-}
-
-private String prettyPrint(Assembly a) {
-    Stack s = a.getStack();
-    Enumeration e = s.elements();
-    StringBuffer sb = new StringBuffer();
-    while (e.hasMoreElements()) {
-        Object i = e.nextElement();
-        sb.append(i);
-        if (e.hasMoreElements()) { sb.append(' ');}
-    }
-    return sb.toString();
-}
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserFacade.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserFacade.java
deleted file mode 100644
index 881a25a..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserFacade.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 2004 Jeremy Rayner. All Rights Reserved.
-
-   Jeremy Rayner makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import sjm.parse.*;
-import sjm.parse.tokens.*;
-
-class ParserFacade {
-    private Parser parser;
-
-    public ParserFacade(Parser parser) {
-        this.parser = parser;
-    }
-
-    /* utility wrapper for tokenizer and parser */
-    public Assembly parse(String userInput) {
-        try {
-            parseWithoutSwallowingExceptions(userInput);
-        } catch (TrackSequenceException e) {
-            System.err.println(e.getMessage());
-        }
-        return null;
-    }
-    
-    public Assembly parseWithoutSwallowingExceptions(String userInput) {
-            Assembly in = new TokenAssembly(userInput);
-            Assembly out = parser.completeMatch(in);
-            return out;
-        }
-
-
-    public String toString() {
-        return parser.toString();
-    }
-
-}
-
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserMain.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserMain.java
deleted file mode 100644
index 855efd7..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ParserMain.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.javanicus.bpwj;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Iterator;
-
-public class ParserMain {
-    public static void main(String[] args) {
-        // -- main bit
-        List errorList = new ArrayList();
-        if (args.length > 0) {
-            try {
-                File srcFile = new File(args[0]);
-                BufferedReader src = new BufferedReader(new FileReader(srcFile));
-                char[] srcChars = new char[(int)srcFile.length()];
-                src.read(srcChars);
-                String srcText = new String(srcChars);
-                ParserFacade parser = new ParserFacade(new JavaParser().start());
-
-                parser.parseWithoutSwallowingExceptions(srcText);
-
-            } catch (IOException e) {
-                errorList.add("error: cannot read: " + args[0]);
-            } catch (TrackSequenceException e) {
-                List anError = new ArrayList();
-                anError.add(args[0] + ": " + e.getExpected() + " expected"); // todo - line numbers
-                anError.add("after: " + e.getAfter());
-                anError.add(e.getFound()); // todo - better context of error
-                anError.add("^");
-                errorList.add(anError);
-            }
-
-        }
-
-        // latent error reporting...
-        if (errorList.size() > 0) {
-            Iterator errors = errorList.iterator();
-            while (errors.hasNext()) {
-                Object err = errors.next();
-                if (err instanceof List) {
-                    List errList = (List)err;
-                    Iterator subErrors = errList.iterator();
-                    while (subErrors.hasNext()) {
-                        System.err.println(subErrors.next());
-                    }
-                    System.err.println(" ");
-                } else {
-                    System.err.println(err);
-                }
-            }
-            int numberOfErrors = errorList.size();
-            if (numberOfErrors == 1) {
-                System.err.println(errorList.size() + " error");
-            } else if (numberOfErrors > 1) {
-                System.err.println(errorList.size() + " errors");
-            }
-        }
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ShowJavaParser.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ShowJavaParser.java
deleted file mode 100644
index 5c88d3e..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/ShowJavaParser.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 2004 Jeremy Rayner. All Rights Reserved.
-
-   Jeremy Rayner makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import sjm.parse.*;
-import sjm.parse.tokens.*;
-import sjm.examples.track.TrackException;
-
-public class ShowJavaParser {
-
-    public static void main(String[] args) {
-        // build a parser
-        Parser qualifiedIdentifierParser = new JavaParser().qualifiedIdentifier();
-        Parser expressionParser = new JavaParser().expression();
-        System.out.println("   parser: " + qualifiedIdentifierParser);
-
-
-        ShowJavaParser javaParser = new ShowJavaParser();
-
-        String qualifiedIdentifierTest[] = new String[] {
-            "",
-            "foo",
-            "foo.bar",
-            "foo.bar.mooky"};
-
-        for (int i=0; i < qualifiedIdentifierTest.length;i++) {
-            try {
-                javaParser.parse(qualifiedIdentifierParser,qualifiedIdentifierTest[i]);
-            } catch (TrackException e) {
-                reportError(e);
-            }
-        }
-
-        String expressionTest[] = new String[] {
-            "",
-            "foo",
-            "foo=bar"};
-        for (int i=0; i < expressionTest.length; i++) {
-            try {
-                javaParser.parse(expressionParser, expressionTest[i]);
-            } catch (TrackException e) {
-                reportError(e);
-            }
-        }
-
-    }
-
-    private static void reportError(TrackException e) {
-        System.out.println("**** parse error ****");
-        System.out.println("    after: " + e.getAfter());
-        System.out.println(" expected: " + e.getExpected());
-        System.out.println("    found: " + e.getFound());
-    }
-
-
-    public ShowJavaParser() {
-        System.out.println("----");
-        System.out.println("JavaParser");
-        System.out.println("----");
-
-    }
-
-    /** tokenize user input */
-    public Assembly tokenize(String userInput) {
-        Assembly in = new TokenAssembly(userInput);
-        System.out.println(" ");
-        System.out.println("userInput: " + userInput);
-        System.out.println("   tokens: " + in.remainder(in.defaultDelimiter()));
-
-        return in;
-    }
-
-    /** perform match */
-    public void parse(Parser parser, String userInput) {
-        Assembly out = parser.completeMatch(tokenize(userInput));
-        if (out != null) {
-            System.out.println("      out: " + out.getStack());
-            System.out.println("   target: " + out.getTarget());
-        } else {
-            System.out.println("      out: null");
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequence.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequence.java
deleted file mode 100644
index c633d01..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequence.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 1999, 2004 Steven John Metsker. All Rights Reserved.
-
-   Steve Metsker makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import java.util.*;
-import sjm.parse.*;
-
-/**
- * A TrackSequence is a sequence that throws a <code>
- * TrackSequenceException</code> if the sequence begins but
- * does not complete.
- * 
- * @author Steven J. Metsker
- */
-
-
-public class TrackSequence extends Sequence {
-/**
- * Constructs a nameless TrackSequence.
- */
-public TrackSequence () {
-}
-/**
- * Constructs a TrackSequence with the given name.
- *
- * @param    name    a name to be known by
- */
-public TrackSequence(String name) {
-	super(name);
-}
-/**
- * Given a collection of assemblies, this method matches 
- * this track against all of them, and returns a new 
- * collection of the assemblies that result from the 
- * matches.
- *
- * If the match begins but does not complete, this method
- * throws a <code>TrackSequenceException</code>.
- *
- * @return   a Vector of assemblies that result from matching
- *           against a beginning set of assemblies
- *
- * @param in a vector of assemblies to match against
- *
- */
-public Vector match(Vector in) {
-
-    // This println is useful for examining left recursion during a parse
-    //System.out.println(name);
-
-    boolean inTrack = false;
-	Vector last = in;
-	Vector out = in;
-	Enumeration e = subparsers.elements();
-	while (e.hasMoreElements()) {
-		Parser p = (Parser) e.nextElement();
-		out = p.matchAndAssemble(last);
-		if (out.isEmpty()) {
-			if (inTrack) {
-				throwTrackSequenceException(last, p);
-			}
-			return out;
-		}
-		inTrack = true;
-		last = out;
-	}
-	return out;
-}
-/*
- * Throw an exception showing how far the match had 
- * progressed, what it found next, and what it was 
- * expecting.
- */
-protected void throwTrackSequenceException(
-	Vector previousState, Parser p) {
-		
-	Assembly best = best(previousState);
-	String after = best.consumed(" ");
-	if (after.equals("")) {
-		after = "-nothing-";
-	}
-	
-	String expected = p.toString();
-	
-	Object next = best.peek();
-	String found = 
-		(next == null) ? "-nothing-" : next.toString();
-		
-	throw new TrackSequenceException(after, expected, found);
-}
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequenceException.java b/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequenceException.java
deleted file mode 100644
index 1d37747..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/com/javanicus/bpwj/TrackSequenceException.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 1999, 2004 Steven John Metsker. All Rights Reserved.
-
-   Steve Metsker makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
- 
-/**
- * Signals that a parser could not match text after
- * a specific point.
- */
-public class TrackSequenceException extends RuntimeException {
-	protected String after, expected, found;
-
-/**
- * Constructs a <code>TrackSequenceException</code> with the
- * specified reasons for the exception.
- *
- * @param   after   an indication of what text was parsed
- *
- * @param   expected   an indication of what kind of thing 
- *                     was expected, such as a ')' token        
- *
- * @param   found   the text the thrower actually found
- */
-public TrackSequenceException(
-	String after, String expected, String found) {
-		
-	super("After   : " + after +
-		"\nExpected: " + expected +
-		"\nFound   : " + found);
-	this.after = after;
-	this.found = found;
-	this.expected = expected;
-}
-/**
- * Returns some indication of what text was interpretable.
- *
- * @return   some indication of what text was interpretable
- */
-public String getAfter() {
-	return after;
-}
-/**
- * Returns some indication of what kind of thing was 
- * expected, such as a ')' token.
- *
- * @return   some indication of what kind of thing was 
- *           expected, such as a ')' token
- */
-public String getExpected() {
-	return expected;
-}
-/**
- * Returns the text element the thrower actually found when 
- * it expected something else.
- *
- * @return   the text element the thrower actually found 
- *           when it expected something else
- */
-public String getFound() {
-	return found;
-}
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/src/manifest.txt b/groovy/jsr/ideas/parsers/bpwj/src/manifest.txt
deleted file mode 100644
index 8958913..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/src/manifest.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: com.javanicus.bpwj.ParserMain
diff --git a/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/JavaParserTest.java b/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/JavaParserTest.java
deleted file mode 100644
index ff52626..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/JavaParserTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 2004 Jeremy Rayner. All Rights Reserved.
-
-   Jeremy Rayner makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import junit.framework.*;
-import sjm.parse.*;
-import sjm.parse.tokens.*;
-import sjm.examples.track.TrackException;
-
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.io.IOException;
-
-public class JavaParserTest extends TestCase {
-    private ParserFacade parser;
-
-    public void setUp() {
-        parser = new ParserFacade(new LoggingJavaParser().start());
-    }
-
-    public void testSimpleJavaProgram() {
-        // -- debug
-        try {
-            LoggingJavaParser.out = new PrintStream(new FileOutputStream("testSimpleJavaProgram.mm"));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        LoggingJavaParser.out.println("<map version='0.7.1'>");
-
-
-
-        try{
-            assertFalse(parser.parse("package foo.bar; public class Foo extends Bar{}").hasMoreElements());
-        } catch (Exception e) {
-            LoggingJavaParser.out.println("</node>");
-        } 
-
-
-        LoggingJavaParser.out.println("</node>");
-        LoggingJavaParser.out.println("</map>");
-    }
-}
diff --git a/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/QualifiedIdentifierTest.java b/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/QualifiedIdentifierTest.java
deleted file mode 100644
index 454a96a..0000000
--- a/groovy/jsr/ideas/parsers/bpwj/test/com/javanicus/bpwj/QualifiedIdentifierTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-  $Id$
-
-   Copyright (c) 2004 Jeremy Rayner. All Rights Reserved.
-
-   Jeremy Rayner makes no representations or warranties about
-   the fitness of this software for any particular purpose,
-   including the implied warranty of merchantability.
-
-   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.javanicus.bpwj;
-
-import junit.framework.*;
-import sjm.parse.*;
-import sjm.parse.tokens.*;
-
-public class QualifiedIdentifierTest extends TestCase {
-    private ParserFacade parser;
-
-    public void setUp() {
-        parser = new ParserFacade(new JavaParser().qualifiedIdentifier());
-        System.out.println("parser:" + parser);
-    }
-
-    public void testEmptyExpression() {
-        assertNull(parser.parse(""));
-    }
-
-    public void testValid() {
-        assertFalse(parser.parse("foo").hasMoreElements());
-        assertFalse(parser.parse("foo.bar").hasMoreElements());
-        assertFalse(parser.parse("foo.bar.mooky").hasMoreElements());
-    }
-
-    public void testInvalid() {
-        assertNull(parser.parse("foo*bar"));
-        assertNull(parser.parse("123.456"));
-    }
-    public void testErrorMessages() {
-        try {
-            Assembly a = parser.parse("foo*bar");
-            //todo fail("invalid " + a);
-        } catch (Exception e) {
-            assertTrue(e.getMessage().indexOf("Expected: .") > -1);
-        }
-    }
-
-}
diff --git a/groovy/jsr/spec/SearchAndReplace b/groovy/jsr/spec/SearchAndReplace
deleted file mode 100644
index 4f18253..0000000
--- a/groovy/jsr/spec/SearchAndReplace
+++ /dev/null
@@ -1,34 +0,0 @@
-1 Search And Replace
-The following headings are replaced with the text immediately following
-
-1.1 anchor
-<a name="$1"></a>
-
-1.1 image
-
-<img src='$1'/>
-
-1.1 include
-
-<%
-  includedText = '$1'
-  if ('$1'.indexOf(':') > 0) {
-    parser = new com.opensymphony.module.sitemesh.parser.FastPageParser()
-    page = parser.parse( '$1'.toURL().text.toCharArray() )
-    includedText = page.body
-
-    u = new com.javanicus.biscuitbarrel.PageUtils('$1')
-    includedText = u.replaceWithAbsolute(includedText,'action')
-    includedText = u.replaceWithAbsolute(includedText,'href')
-    includedText = u.replaceWithAbsolute(includedText,'src')
-  } else {
-    includedText = java.io.File('$1').text
-  }
-%> 
-<%= includedText %>
-
-1.1 merge
-
-${new java.io.File('$1').text}
-
-1.1 ***END***
\ No newline at end of file
diff --git a/groovy/jsr/spec/SearchAndReplaceRegex b/groovy/jsr/spec/SearchAndReplaceRegex
deleted file mode 100644
index e470055..0000000
--- a/groovy/jsr/spec/SearchAndReplaceRegex
+++ /dev/null
@@ -1,52 +0,0 @@
-1 Search And Replace Regular Expressions
-The following regexes are replaced with the regex immediately following
-
-1.1 ----
-
-<hr class=line"/>
-
-1.1 \[(.*?)\]
-
-{link:$1}
-
-1.1 \?\?(.*?)\?\?
-
-<cite class="citation">$1</cite>
-
-1.1 _(\S*?)_
-
-<em class="emphasis">$1</em>
-
-1.1 \{\{(.*?)\}\}
-
-<tt class="monospaced">$1</tt>
-
-1.1 (?m)^\s*(h([0-9])\.)\s+(.*?)$
-
-<h3 class="heading-$2">$3</h3>
-
-1.1 \(\$([^\)]+)\)
-
-({link:&#167;$1|AltChapter03LexicalStructure2.html#$1})
-
-1.1 (?m)^\s*(bq\.)\s+(.*?)$
-
-<blockquote class="blockquote">$2</blockquote>
-
-1.1 \(\+\)
-
-<img src="plus.png" alt="Addition" />
-
-1.1 \(-\)
-
-<img src="minus.png" alt="Deletion" />
-
-1.1 \(i\)
-
-<img src="info.png" alt="Information" />
-
-1.1 \*(.*?)\*
-
-<b>$1</b>
-
-1.1 ***END***
diff --git a/groovy/jsr/spec/TemplatePage.html b/groovy/jsr/spec/TemplatePage.html
deleted file mode 100644
index 7cf84ba..0000000
--- a/groovy/jsr/spec/TemplatePage.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<html>
-  <head>
-    <title>${content}</title>
-    <link rel="stylesheet" type="text/css" href="biscuit.css" title="Default" media="screen"/>
-    <link rel="alternate stylesheet" type="text/css" href="fullscreen.css" title="Full Screen" media="screen" />
-  </head>
-  <body 
-   bgcolor="#999999"
-   link="#000077" 
-   alink="#000033" 
-   vlink="#000022"
-   bgproperties="fixed" 
-   leftmargin="0" 
-   topmargin="0" 
-   rightmargin="0">
-  
- <br>
- <div class="container">
- <table id="table1" cellSpacing=0 cellPadding=1 width="100%" align=center bgColor=#000000 border=0>
-  <tr>
-    <td>
-      <table cellspacing=0 cellpadding=0 width="100%" align=center border=0>
-        
-         <tr height=19>
-            <!-- north banner -->
-		<td>&nbsp;</td>
-		<td height="19" bgcolor="#FFFFFF" valign=middle align=left>
-		  <table width="100%">
-		   <tr width="100%">
-		    <td bgcolor="#FFFFFF" valign=middle align=left>
-		     <img src="groovy-logo.png">
-		    </td>
-		    <td bgcolor="#FFFFFF" valign=top align=right>
-		     Groovy Language Specification&nbsp;&nbsp;
-                     <br>
-                     First Draft&nbsp;&nbsp;
-		    </td>
-		   </tr>
-		  </table>
-		</td>
-        </tr>
-        <tr>
-          <!-- west gutter -->
-          <td rowspan=10 valign=top class="t" width=13 bgcolor="#000000"><!--background="west.jpg"--></td>
-          
-          
-          <!-- main stuff 622-->
-          <td valign=top class="t" width="100%" bgcolor="#FFFFFF">
-            <div class="t">
-            
-            <table width="100%" border="0" cellspacing="0" cellpadding="0">
-              <!-- black line -->
-              <tr bgcolor="black"><td height="1"><!--<img src="space.gif" height=1 width=1>--></td></tr>
-              
-              <!-- north nav bar 'actions' -->
-              <tr height=19>
-                <td height="19" bgcolor="#6398aa" valign=middle>
-                  <div class="title" style="MARGIN-LEFT: 6px">
-                    <A style="color: #FFFFFF" href="index.html">contents</A> |
-                    <A style="color: #FFFFFF" href="http://cvs.groovy.codehaus.org/viewrep/groovy/groovy/jsr/spec/src/wiki/${content}?r=MAIN">history</a> |
-                    <A style="color: #FFFFFF" href="http://biscuit.javanicus.com">powered by a biscuit</A>
-                  </div>
-                </td>
-              </tr>
-              
-              <!-- black line -->
-              <tr bgcolor="black"><td height="1"><!--<img src="space.gif" height=1 width=1>--></td></tr>
-              
-              <!-- north nav bar 'you are here' -->
-              <tr height=19>
-                <td height="19" bgcolor="#FFFFFF" valign=middle>
-                  <div class="title" style="MARGIN-LEFT: 6px">
-                   <a href="index.html">${content}</a>
-                  </div>
-                </td>
-              </tr>
-              
-              <!-- black line -->
-              <tr bgcolor="black"><td height="1"><!--<img src="space.gif" height=1 width=1>--></td></tr>
-            </table>
-           </div>
-            
-         </td>
-         
-         <!-- image in northeast corner tucked under main banner -->
-<!--         <td>
-           <IMG src="northeast.jpg" alt="northeast.jpg">
-         </td>
--->       </tr>
-       
-       <tr>
-         
-         <!-- main body, where rendered text ends up -->
-          
-         <td valign=top class="t" width="100%" bgColor="#FFFFFF">
-           <div class="t" style="padding: 9px; background-color: #EEEEFF">
-            ${renderedText}
-           </div>
-         </td>
-
-         <!-- right hand navigation bar -->
-<!--         <td valign=top class="t" width=141 style="border-left: 1px solid #FFFFFF" bgColor="#A0B79B">
-           <img src="east.jpg" alt="east.jpg" border="0">
-           <br>
-           <br>
-           <div class="revhead" style="padding-left: 6px; color: #E7D0CB">
-             <b>Heading</b>
-           </div>
-           <div class="t" style="margin-left: 6px; margin-right: 6px">
-             <a class="rv" href="java.html">Sub Heading</a>
-             <br>smaller<br>
-             <div class="rby">smallest</div>
-           </div>
-         </td>
--->
-       </tr>
-        
-        <!-- south nav bar -->
-        <tr bgcolor=#000000>
-          <td colspan=4 height=20>
-            <div class="wtb">
-              <p class="paragraph"/> 
-                <A style="color: #FFFFFF" href="index.html">contents</A> |
-                <a style="color: #FFFFFF" href="http://cvs.groovy.codehaus.org/viewrep/groovy/groovy/jsr/spec/src/wiki/${content}?r=MAIN">history</a> |
-                <a style="color: #FFFFFF" href="http://biscuit.javanicus.com">powered by a biscuit</A>
-              </p>
-            </div>
-          </td>
-        </tr>
-        
-      </table>
-    
-    
-    </td>
-  </tr>
-</table>
-</div>
-
-<br>
-</body>
-</html>
diff --git a/groovy/jsr/spec/biscuit.css b/groovy/jsr/spec/biscuit.css
deleted file mode 100644
index faadd34..0000000
--- a/groovy/jsr/spec/biscuit.css
+++ /dev/null
@@ -1,53 +0,0 @@
-div.container{width:98%; margin: 1%;}
-table#table1{text-align: center; margin-left: auto; margin-right: auto; width: 600px;}
-tr.td{text-align:left;}
-
-.wikitable, .wiki-table {
-    margin: 5px;
-    border-collapse: collapse;
-}
-.wikitable td, .wikitable th, .wiki-table td, .wiki-table th {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
-.wikitable th, .wiki-table th {
-    background: #f0f0f0;
-    text-align: center;
-}
-BODY,td,tr,table                {color: #343434; font-size: 17px; font-family: baskerville,times}
-TEXTAREA            {color: #343434; font-size: 11px; font-family: monospace}
-.heading-1	    {color: #343434; font-size: 13px; font-family: tahoma,arial,helvetica,sans-serif}
-.heading-1-1	    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif}
-.tb		    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.wtb		    {color: #FFFFFF; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.bold               {FONT-WEIGHT: bold}
-LI                  {margin-left: -10px; margin-right: 12px}
-.title 		    {font-size: 11px; font-family: arial,helvetica,sans-serif}
-.code               {padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #ccccff; border-bottom: 1px solid #ccccff; color: #555577; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px}
-.code-alt           {background-color: #8F7771; padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #FFFFFF; border-bottom: 1px solid #FFFFFF; color: #FFFFFF; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px; text-transform: lowercase}
-.rv                 {font-size: 11px; font-family: tahoma, arial; font-weight: bold; color: #FFFFFF }
-.rby                {font-size: 11px; font-family: tahoma, arial; color: #685049; padding-bottom: 8px }
-.java-keyword       {color: #000080}
-.java-object        {color: #660E7A}
-.java-quote         {color: #008000}
-A	 	    {TEXT-DECORATION: none}
-A:hover 	    {TEXT-DECORATION: underline}
-A:link.dkblue       {COLOR: #1144AA; TEXT-DECORATION: none}
-A:visited.dkblue    {COLOR: #1144AA; TEXT-DECORATION: none}
-A:hover.dkblue 	    {COLOR: #1144AA; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.rev	    {COLOR: #65532B; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:visited.rev	    {COLOR: #65532B; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:hover.rev	    {COLOR: #65532B; TEXT-DECORATION: underline}
-A:link.can	    {COLOR: #000000; TEXT-DECORATION: none}
-A:visited.can	    {COLOR: #000000; TEXT-DECORATION: none}
-A:hover.can	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-A:link.canlt 	    {COLOR: #555577; TEXT-DECORATION: none}
-A:visited.canlt	    {COLOR: #555577; TEXT-DECORATION: none}
-A:hover.canlt	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-
diff --git a/groovy/jsr/spec/build.xml b/groovy/jsr/spec/build.xml
deleted file mode 100644
index b3ab3b0..0000000
--- a/groovy/jsr/spec/build.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0"?>
-<project name="biscuit render" default="default">
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="wiki.src.dir" value="src/wiki"/>
-  <property name="rendered.dir" value="wiki"/>
-  <property name="lib.dir" value="lib"/>
-  		
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                     datatypes                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-    <path id="biscuit.classpath">
-        <fileset dir="${lib.dir}">
-          <include name="**/*.jar" />
-        </fileset>
-    </path>
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="render" 
-          description="default: render wiki pages"
-  />
-  
-  <target name="clean" description="remove all built files">
-    <delete dir="${rendered.dir}" />
-  </target>
-
-  <target name="render" description="render wiki source">
-      <taskdef name="biscuit" classname="com.javanicus.biscuitbarrel.ant.Biscuit" classpathref="biscuit.classpath"/>
-      <mkdir dir="${rendered.dir}"/>
-      <copy todir="${rendered.dir}">
-         <fileset dir="."><include name="biscuit.css"/></fileset>
-         <fileset dir="."><include name="fullscreen.css"/></fileset>
-         <fileset dir="."><include name="*.png"/></fileset>
-      </copy>
-      <biscuit destdir="${rendered.dir}"
-               srcdir="${wiki.src.dir}"
-               listfiles="true">
-          <classpath refid="biscuit.classpath"/>
-      </biscuit>
-  </target>
-
-</project>
diff --git a/groovy/jsr/spec/fullscreen.css b/groovy/jsr/spec/fullscreen.css
deleted file mode 100644
index 30806c9..0000000
--- a/groovy/jsr/spec/fullscreen.css
+++ /dev/null
@@ -1,53 +0,0 @@
-div.container{width:98%; margin: 1%;}
-table#table1{text-align: center; margin-left: auto; margin-right: auto;}
-tr.td{text-align:left;}
-
-.wikitable, .wiki-table {
-    margin: 5px;
-    border-collapse: collapse;
-}
-.wikitable td, .wikitable th, .wiki-table td, .wiki-table th {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
-.wikitable th, .wiki-table th {
-    background: #f0f0f0;
-    text-align: center;
-}
-BODY,td,tr,table                {color: #343434; font-size: 17px; font-family: baskerville,times}
-TEXTAREA            {color: #343434; font-size: 11px; font-family: monospace}
-.heading-1	    {color: #343434; font-size: 13px; font-family: tahoma,arial,helvetica,sans-serif}
-.heading-1-1	    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif}
-.tb		    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.wtb		    {color: #FFFFFF; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.bold               {FONT-WEIGHT: bold}
-LI                  {margin-left: -10px; margin-right: 12px}
-.title 		    {font-size: 11px; font-family: arial,helvetica,sans-serif}
-.code               {padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #ccccff; border-bottom: 1px solid #ccccff; color: #555577; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px}
-.code-alt           {background-color: #8F7771; padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #FFFFFF; border-bottom: 1px solid #FFFFFF; color: #FFFFFF; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px; text-transform: lowercase}
-.rv                 {font-size: 11px; font-family: tahoma, arial; font-weight: bold; color: #FFFFFF }
-.rby                {font-size: 11px; font-family: tahoma, arial; color: #685049; padding-bottom: 8px }
-.java-keyword       {color: #000080}
-.java-object        {color: #660E7A}
-.java-quote         {color: #008000}
-A	 	    {FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover 	    {FONT-WEIGHT: bold; TEXT-DECORATION: underline}
-A:link.dkblue       {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.dkblue    {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.dkblue 	    {COLOR: #1144AA; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:visited.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:hover.rev	    {COLOR: #65532B; TEXT-DECORATION: underline}
-A:link.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.can	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-A:link.canlt 	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.canlt	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.canlt	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-
diff --git a/groovy/jsr/spec/groovy-logo.png b/groovy/jsr/spec/groovy-logo.png
deleted file mode 100644
index 54af4c1..0000000
--- a/groovy/jsr/spec/groovy-logo.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/info.png b/groovy/jsr/spec/info.png
deleted file mode 100644
index 128d338..0000000
--- a/groovy/jsr/spec/info.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/lib/biscuit.jar b/groovy/jsr/spec/lib/biscuit.jar
deleted file mode 100644
index 09f4bd4..0000000
--- a/groovy/jsr/spec/lib/biscuit.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/minus.png b/groovy/jsr/spec/minus.png
deleted file mode 100644
index cfbfdcd..0000000
--- a/groovy/jsr/spec/minus.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/plus.png b/groovy/jsr/spec/plus.png
deleted file mode 100644
index 5524dc3..0000000
--- a/groovy/jsr/spec/plus.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/src/biscuit.css b/groovy/jsr/spec/src/biscuit.css
deleted file mode 100644
index e3fcd7b..0000000
--- a/groovy/jsr/spec/src/biscuit.css
+++ /dev/null
@@ -1,53 +0,0 @@
-div.container{width:98%; margin: 1%;}
-table#table1{text-align: center; margin-left: auto; margin-right: auto; width: 600px;}
-tr.td{text-align:left;}
-
-.wikitable, .wiki-table {
-    margin: 5px;
-    border-collapse: collapse;
-}
-.wikitable td, .wikitable th, .wiki-table td, .wiki-table th {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
-.wikitable th, .wiki-table th {
-    background: #f0f0f0;
-    text-align: center;
-}
-BODY,td,tr,table                {color: #343434; font-size: 17px; font-family: baskerville,times}
-TEXTAREA            {color: #343434; font-size: 11px; font-family: monospace}
-.heading-1	    {color: #343434; font-size: 13px; font-family: tahoma,arial,helvetica,sans-serif}
-.heading-1-1	    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif}
-.tb		    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.wtb		    {color: #FFFFFF; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.bold               {FONT-WEIGHT: bold}
-LI                  {margin-left: -10px; margin-right: 12px}
-.title 		    {font-size: 11px; font-family: arial,helvetica,sans-serif}
-.code               {padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #ccccff; border-bottom: 1px solid #ccccff; color: #555577; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px}
-.code-alt           {background-color: #8F7771; padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #FFFFFF; border-bottom: 1px solid #FFFFFF; color: #FFFFFF; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px; text-transform: lowercase}
-.rv                 {font-size: 11px; font-family: tahoma, arial; font-weight: bold; color: #FFFFFF }
-.rby                {font-size: 11px; font-family: tahoma, arial; color: #685049; padding-bottom: 8px }
-.java-keyword       {color: #000080}
-.java-object        {color: #660E7A}
-.java-quote         {color: #008000}
-A	 	    {FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover 	    {FONT-WEIGHT: bold; TEXT-DECORATION: underline}
-A:link.dkblue       {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.dkblue    {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.dkblue 	    {COLOR: #1144AA; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:visited.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:hover.rev	    {COLOR: #65532B; TEXT-DECORATION: underline}
-A:link.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.can	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-A:link.canlt 	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.canlt	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.canlt	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-
diff --git a/groovy/jsr/spec/src/groovy-logo.png b/groovy/jsr/spec/src/groovy-logo.png
deleted file mode 100644
index 54af4c1..0000000
--- a/groovy/jsr/spec/src/groovy-logo.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/src/wiki/AltChapter03LexicalStructure b/groovy/jsr/spec/src/wiki/AltChapter03LexicalStructure
deleted file mode 100644
index 7b4b64f..0000000
--- a/groovy/jsr/spec/src/wiki/AltChapter03LexicalStructure
+++ /dev/null
@@ -1,335 +0,0 @@
-*Chapter 3*
-
-h1. Lexical Structure
-
-This chapter specifies the lexical structure of the Groovy programming language. 
-
-Programs are written in Unicode ($3.1), but lexical translations are provided ($3.2) so that Unicode escapes ($3.3) can be used to include any Unicode character using only ASCII characters. 
-Line terminators are defined ($3.4) to support the different conventions of existing host systems while maintaining consistent line numbers. 
-
-The Unicode characters resulting from the lexical translations are reduced to a sequence of input elements ($3.5), which are white space ($3.6), comments ($3.7), and tokens. 
-The tokens are the identifiers ($3.8), keywords ($3.9), literals ($3.10), separators ($3.11), and operators ($3.12) of the syntactic grammar. 
-
-{anchor:3.1}
-h2. 3.1 Unicode
-
-Programs are written using the Unicode character set.
-Information about this character set and its associated character encodings may be found at: 
-
-bq. http://www.unicode.org 
-
-The Java platform tracks the Unicode specification as it evolves. 
-The precise version of Unicode used by a given release is specified in the documentation of the class {{Character}}.
-
-Versions of the Groovy programming language up to and including 1.0 final use Unicode version 3.0 because J2SE 1.4 does. 
-Upgrades to newer versions of the Unicode Standard occurred in J2SE 5.0 (to Unicode 4.0). 
-
-*J2SE 5.0+*
-The Unicode standard was originally designed as a fixed-width 16-bit character encoding. 
-It has since been changed to allow for characters whose representation requires more than 16 bits. 
-The range of legal code points since J2SE 5.0 is now U+0000 to U+10FFFF, using the hexadecimal U+n _notation_. 
-Characters whose code points are greater than U+FFFF are called supplementary characters.
-To represent the complete range of characters using only 16-bit units, the Unicode standard defines an encoding called UTF-16.
-In this encoding, supplementary characters are represented as pairs of 16-bit code units, the first from the high-surrogates range, (U+D800 to U+DBFF), the second from the low-surrogates range (U+DC00 to U+DFFF). 
-For characters in the range U+0000 to U+FFFF, the values of codepoints and UTF-16 code units are the same. 
-
-The Groovy programming language represents text in sequences of 16-bit code units, using the UTF-16 encoding.
-A few APIs, primarily in the {{Character}} class, use 32-bit integers to represent code points as individual entities.
-The Java platform provides methods to convert between the two representations.
-
-This book uses the terms _code_ _point_ and _UTF-16_ _code_ _unit_ where the representation is relevant, and the generic term _character_ where the representation is irrelevant to the discussion.
-
-*All Platforms*
-Except for comments ($3.7), identifiers, and the contents of string literals ($3.10.5), all input elements ($3.5) in a program are formed only from ASCII characters (or Unicode escapes ($3.3) which result in ASCII characters). ASCII (ANSI X3.4) is the American Standard Code for Information Interchange. The first 128 characters of the Unicode character encoding are the ASCII characters. 
-
-Note: Groovy has no character literals, see ($3.10.4)
-
-{anchor:3.2}
-h2. 3.2 Lexical Translations
-
-A raw Unicode character stream is translated into a sequence of tokens, using the following three lexical translation steps, which are applied in turn:
-
-1. A translation of Unicode escapes ($3.3) in the raw stream of Unicode characters to the corresponding Unicode character. A Unicode escape of the form {{\\\uxxxx}}, where {{xxxx}} is a hexadecimal value, represents the UTF-16 code unit whose encoding is {{xxxx}}. This translation step allows any program to be expressed using only ASCII characters.
-1. A translation of the Unicode stream resulting from step 1 into a stream of input characters and line terminators ($3.4).
-1. A translation of the stream of input characters and line terminators resulting from step 2 into a sequence of input elements ($3.5) which, after white space ($3.6) and comments ($3.7) are discarded, comprise the tokens ($3.5) that are the terminal symbols of the syntactic grammar ($2.3).
-
-The longest possible translation is used at each step, even if the result does not ultimately make a correct program while another lexical translation would. Thus the input characters {{a\-\-b}} are tokenized ($3.5) as {{a}}, {{--}}, {{b}}, which is not part of any grammatically correct program, even though the tokenization {{a}}, {{-}}, {{-}}, {{b}} could be part of a grammatically correct program. 
-
-{anchor:3.3}
-h2. 3.3 Unicode Escapes
-
-Implementations first recognize _Unicode_ _escapes_ in their input, translating the ASCII characters {{\u}} followed by four hexadecimal digits to the UTF-8 or UTF-16 code unit ($3.1) with the indicated hexadecimal value, and passing all other characters unchanged. 
-
-*J2SE 5.0+*
-Representing supplementary characters requires two consecutive Unicode escapes. 
-
-*All Platforms*
-This translation step results in a sequence of Unicode input characters:
-
-{code}
-UnicodeInputCharacter:
-  UnicodeEscape
-
-  RawInputCharacter
-
-UnicodeEscape:
-  '\\\' UnicodeMarker HexDigit HexDigit HexDigit HexDigit
-
-UnicodeMarker:
-  'u'
-  UnicodeMarker 'u'
-  
-RawInputCharacter:
-  any Unicode character
-
-
-HexDigit: one of
-  '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 
-  'a' 'b' 'c' 'd' 'e' 'f' 
-  'A' 'B' 'C' 'D' 'E' 'F'
-{code}
-
-The {{\\\}}, {{u}}, and hexadecimal digits here are all ASCII characters.
-
-In addition to the processing implied by the grammar, for each raw input character that is a backslash {{\\\}}, input processing must consider how many other \ characters contiguously precede it, separating it from a non-{{\\\}} character or the start of the input stream.
-If this number is even, then the {{\\\}} is eligible to begin a Unicode escape; 
-if the number is odd, then the {{\\\}} is not eligible to begin a Unicode escape. 
-For example, the raw input {{"\\\\\\u0061=\\\u0061"}} results in the eleven characters {{" \\\ \\\ u 0 0 6 1 = a "}} ({{\\\u0061}} is the Unicode encoding of the character "a").
-
-If an eligible {{\\\}} is not followed by {{u}}, then it is treated as a _RawInputCharacter_ and remains part of the escaped Unicode stream. 
-If an eligible {{\\\}} is followed by {{u}}, or more than one {{u}}, and the last {{u}} is not followed by four hexadecimal digits, then a compile-time error occurs.
-
-The character produced by a Unicode escape does not participate in further
-Unicode escapes. 
-For example, the raw input {{\\\u005cu005a}} results in the six characters {{\\\ u 0 0 5 a}}, because {{005c}} is the Unicode value for {{\\\}}. 
-It does not result in the character {{Z}}, which is Unicode character {{005a}}, because the {{\\\}} that resulted from the {{\\\u005c}} is not interpreted as the start of a further Unicode escape.
-
-The Groovy programming language specifies a standard way of transforming a program written in Unicode into ASCII that changes a program into a form that can be processed by ASCII-based tools.
-The transformation involves converting any Unicode escapes in the source text of the program to ASCII by adding an extra {{u}} - for example, {{\\\uxxxx}} becomes {{\\\uuxxxx}} - while simultaneously converting non-ASCII characters in the source text to Unicode escapes containing a single {{u}} each.
-
-This transformed version is equally acceptable to a compiler for the Groovy programming language ("Groovy compiler") and represents the exact same program.
-The exact Unicode source can later be restored from this ASCII form by converting each escape sequence where multiple {{u}}'s are present to a sequence of Unicode characters with one fewer {{u}}, while simultaneously converting each escape sequence with a single u to the corresponding single Unicode character.
-
-Implementations should use the {{\\\uxxxx}} notation as an output format to display Unicode characters when a suitable font is not available.
-
-{anchor:3.4}
-h2. 3.4 Line Terminators
-
-Implementations next divide the sequence of Unicode input characters into lines by recognizing _line_ _terminators_. 
-This definition of lines determines the line numbers produced by a Groovy compiler or other system component. 
-It also specifies the termination of the {{//}} form of a comment ($3.7).
-
-{code}
-LineTerminator:
-  the ASCII LF character, also known as "newline"
-  the ASCII CR character, also known as "return"
-  the ASCII CR character followed by the ASCII LF character
-
-
-InputCharacter:
-  UnicodeInputCharacter but not CR or LF
-{code}
-
-
-Lines are terminated by the ASCII characters CR, or LF, or CR LF. The two
-characters CR immediately followed by LF are counted as one line terminator, not
-two.
-The result is a sequence of line terminators and input characters, which are the terminal symbols for the third step in the tokenization process.
-
-{anchor:3.5}
-h2. 3.5 Input Elements and Tokens
-
-The input characters and line terminators that result from escape processing ($3.3) and then input line recognition ($3.4) are reduced to a sequence of _input_ _elements_.
-Those input elements that are not white space ($3.6) or comments ($3.7) are
-tokens. The tokens are the terminal symbols of the syntactic grammar ($2.3).
-
-
-This process is specified by the following productions:
-{code}
-Input:
-  InputElements(opt) Sub(opt)
-
-InputElements:
-  InputElement
-  InputElements InputElement
-
-InputElement:
-  WhiteSpace
-  Comment
-  Token
-
-Token:
-  Identifier
-  Keyword
-  Literal
-  Separator
-  Operator
-
-Sub:
-  the ASCII SUB character, also known as "control-Z"
-{code}
-
-White space ($3.6) and comments ($3.7) can serve to separate tokens that, if adjacent, might be tokenized in another manner. For example, the ASCII characters - and = in the input can form the operator token -= ($3.12) only if there is no intervening white space or comment.
-
-As a special concession for compatibility with certain operating systems, the ASCII SUB character ({{\\\u001a}}, or control-Z) is ignored if it is the last character in the escaped input stream.
-
-Consider two tokens {{x}} and {{y}} in the resulting input stream. If {{x}} precedes {{y}}, then we say that {{x}} is _to_ _the_ _left_ _of_ {{y}} and that {{y}} is _to_ _the_ _right_ _of_ {{x}}.
-
-For example, in this simple piece of code:
-{code}
-class Empty {
-}
-{code}
-we say that the {{\}}} token is to the right of the {{\{}} token, even though it appears, in this two-dimensional representation on paper, downward and to the left of the {{\{}} token.
-This convention about the use of the words left and right allows us to speak, for example, of the right-hand operand of a binary operator or of the left-hand side of an assignment.
-
-{anchor:3.6}
-h2. 3.6 White Space
-
-_White_ _Space_ is defined as the ASCII space, horizontal tab, and form feed characters, as well as line terminators ($3.4).
-
-{code}
-WhiteSpace:
-  the ASCII SP character, also known as "space"
-  the ASCII HT character, also known as "horizontal tab"
-  the ASCII FF character, also known as "form feed"
-  LineTerminator
-{code}
-
-{anchor:3.7}
-h2. 3.7 Comments
-
-There are three kinds of _comments_:
-{table}
-                 |
-{{/\* text \*/}} | A _traditional_ _comment_: all the text from the ASCII
-                 | characters {{/\*}} to the ASCII characters {{\*/}} is ignored
-                 | (as in C and C++).
-                 |
-{{// text}}      | An _end_-_of_-_line_ _comment_: all the text from the ASCII
-                 | characters {{//}} to the end of the line is ignored (as in
-                 | C++).
-                 |
-{{# text}}       | A _shell_ _comment_: all the text from the ASCII
-                 | character {{#}} to the end of the line is ignored (as in
-                 | Unix shell scripts).
-{table}
-
-These comments are formally specified by the following productions:
-{code}
-Comment:
-  TraditionalComment
-  EndOfLineComment
-  ShellComment
-  
-TraditionalComment:
-  '/' '*' CommentTail
-
-EndOfLineComment:
-  '/' '/' CharactersInLine(opt)
-
-ShellComment:
-  '#' CharactersInLine(opt)
-
-CommentTail:
-  '*' CommentTailStar
-  NotStar CommentTail
-
-CommentTailStar:
-  '/'
-  '*' CommentTailStar
-  NotStarNotSlash CommentTail
-
-NotStar:
-  InputCharacter but not '*'
-  LineTerminator
-
-NotStarNotSlash:
-  InputCharacter but not '*' or '/'
-  LineTerminator
-
-CharactersInLine:
-  InputCharacter
-  CharactersInLine InputCharacter
-{code}
-
-These productions imply all of the following properties:
-- Comments do not nest
-- {{#}}, {{/\*}} and {{\*/}} have no special meaning in comments that begin with {{//}}.
-- {{#}} and {{//}} have no special meaning in comments that begin with {{/\*}} or {{/\*\*}}.
-- {{//}}, {{/\*}} and {{\*/}} have no special meaning in comments that begin with {{#}}.
-
-As a result, the text:
-{code}
-/* a comment which... /* # // /** ends here: */
-{code}
-is a single complete comment.
-
-The lexical grammar implies that comments do not occur within string literals ($3.10.5) or regex literals ($3.10.todo).
-
-{anchor:3.8}
-h2. 3.8 Identifiers
-
-An _identifier_ is an unlimited-length sequence of _Java_ _letters_ and _Java_ _digits_, the first of which must be a Java letter. An identifier cannot have the same spelling (Unicode character sequence) as a keyword ($3.9), boolean literal ($3.10.3), or the null literal ($3.10.7).  todo - other literals????
-{code}
-Identifier:
-  IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
-
-IdentifierChars:
-  JavaLetter
-  IdentifierChars JavaLetterOrDigit
-
-JavaLetter:
-  any Unicode character that is a Java letter (see below)
-
-JavaLetterOrDigit:
-  any Unicode character that is a Java letter-or-digit (see below)
-{code}
-
-Letters and digits may be drawn from the entire Unicode character set, which supports most writing scripts in use in the world today, including the large sets for Chinese, Japanese, and Korean. This allows programmers to use identifiers in their programs that are written in their native languages.
-
-A "Java letter" is a character for which the method {{Character}} {{.isJavaIdentifierStart(int)}} returns {{true}}. A "Java letter-or-digit" is a character for which the method {{Character}} {{.isJavaIdentifierPart(int)}} returns {{true}}.
-
-The Java letters include uppercase and lowercase ASCII Latin letters {{A}}-{{Z}} ({{\\\u0041}}-{{\\\u005a}}), and {{a}}-{{z}} ({{\\\u0061}}-{{\\\u007a}}), and, for historical reasons, the ASCII underscore ({{_}}, or {{\\\u005f}}) and dollar sign ({{$}}, or {{\\\u0024}}). The {{$}} character should be used only in mechanically generated source code or, rarely, to access preexisting names on legacy systems.
-
-The "Java digits" include the ASCII digits {{0}}-{{9}} ({{\\\u0030}}-{{\\\u0039}}).
-
-Two identifiers are the same only if they are identical, that is, have the same Unicode character for each letter or digit.
-
-Identifiers that have the same external appearance may yet be different. For example, the identifiers consisting of the single letters LATIN CAPITAL LETTER A ({{A}}, {{\\\u0041}}), LATIN SMALL LETTER A ({{a}}, {{\\\u0061}}), GREEK CAPITAL LETTER ALPHA ({{&#x0391;}}, {{\\\u0391}}), CYRILLIC SMALL LETTER A ({{&#x0430;}}, {{\\\u0430}}) and MATHEMATICAL BOLD ITALIC SMALL A ({{a}}, {{\\\ud835\\\udc82}}) are all different.
-
-Unicode composite characters are different from the decomposed characters. For example, a LATIN CAPITAL LETTER A ACUTE ({{&#x00c1;}}, {{\\\u00c1}}) could be considered to be the same as a LATIN CAPITAL LETTER A ({{A}}, {{\\\u0041}}) immediately followed by a NON-SPACING ACUTE ({{&#x0301;}}, {{\\\u0301}}) when sorting, but these are different in identifiers. See _The_ _Unicode_ _Standard_, Volume 1, pages 412ff for details about decomposition, and see pages 626-627 of that work for details about sorting.
-
-Examples of identifiers are:
-{code}
-String   i3   &#x03B1;&#x03c6;&#x03b5;&#x03C8;   MAX_VALUE   isLetterOrDigit
-{code}
-
-
-{anchor:3.9}
-h2. 3.9 Keywords
-
-The following character sequences, formed from ASCII letters, are reserved for
-use as _keywords_ and cannot be used as identifiers ($3.8):
-
-{table}
-Keywords:    | one of       |                |                | 
-{{abstract}} | {{continue}} | {{for       }} | {{new       }} | {{switch      }}
-{{assert  }} | {{default }} | {{if        }} | {{package   }} | {{synchronized}}
-{{boolean }} | {{do      }} | {{goto      }} | {{private   }} | {{this        }}
-{{break   }} | {{double  }} | {{implements}} | {{protected }} | {{throw       }}
-{{byte    }} | {{else    }} | {{import    }} | {{public    }} | {{throws      }}
-{{case    }} | {{enum    }} | {{instanceof}} | {{return    }} | {{transient   }}
-{{catch   }} | {{extends }} | {{int       }} | {{short     }} | {{try         }}
-{{char    }} | {{final   }} | {{interface }} | {{static    }} | {{void        }}
-{{class   }} | {{finally }} | {{long      }} | {{strictfp  }} | {{volatile    }}
-{{const   }} | {{float   }} | {{native    }} | {{super     }} | {{while       }}
-             |              |                |                |
-{{any     }} | {{def     }} | {{threadsafe}} |                | 
-{{as      }} | {{in      }} | {{with}}       |                |
-{table}
-
-The keywords {{any}}, {{const}}, {{goto}}, {{threadsafe}} and {{with}} are reserved, 
-even though they are not currently used. This may allow a Groovy compiler to produce better error messages if these keywords incorrectly appear in programs.
-
-While {{true}} and {{false}} might appear to be keywords, they are technically Boolean literals ($3.10.3). Similarly, while {{null}} might appear to be a keyword, it is technically the null literal ($3.10.7).
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter01Introduction b/groovy/jsr/spec/src/wiki/Chapter01Introduction
deleted file mode 100644
index 243eb6a..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter01Introduction
+++ /dev/null
@@ -1,46 +0,0 @@
-*Chapter 1*
-
-h1. Introduction
-
-The organization of this chapter parallels the [Introduction|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq.  The Java programming language is a general-purpose, concurrent, class-based, object-oriented language. It is designed to be simple enough that many programmers can achieve fluency in the language. The Java programming language is related to C and C++ but is organized rather differently, with a number of aspects of C and C++ omitted and a few ideas from other languages included. It is intended to be a production language, not a research language, and so, as C. A. R. Hoare suggested in his classic paper on language design, the design has avoided including new and untested features.
-
-TO DO: add some words concerning Groovy's design goals.
-
-Groovy is specified as a set of modifications to the text of the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html]. Each chapter of the Java Language Specification (JLS) has a parallel chapter in the GLS. Within each chapter, each section of the JLS has a parallel section in the GLS, although the GLS also contains additional sections.
-
-To aid understanding, each modification to the text of the JLS is described as an _Addition_, _Deletion_ or _Change_. Where a GLS section is marked "unchanged", it means the JLS section describes Groovy as well as Java. Some subsections of the GLS also hold explanatory text.
-
-{anchor:1.1}
-h2. 1.1 Example Programs
-(Cf. ??[JLS. &#167;1.1|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#11484]??.)
-
-Unchanged.
-
-{anchor:1.2}
-h2. 1.2 Notation
-(Cf. ??[JLS. &#167;1.2|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#11506]??.)
-
-Unchanged.
-
-{anchor:1.3}
-h2. 1.3 Relationship to Predefined Classes and Interfaces
-(Cf. ??[JLS. &#167;1.3|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#248104]??.)
-
-_Addition_: As some classes have a special relation ship with the Java programming language, there are other classes that have a special relationship with the Groovy programming language, notably those in the {{groovy.lang}} package.
-
-
-{anchor:1.4}
-h2. 1.4 References 
-(Cf. ??[JLS. &#167;1.4|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#247980]??.)
-
-TO DO
-
-
-----
-Specification [Table of Contents|index.html].
-
-The organization of this chapter parallels the [Introduction|http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
diff --git a/groovy/jsr/spec/src/wiki/Chapter03Lexical b/groovy/jsr/spec/src/wiki/Chapter03Lexical
deleted file mode 100644
index ba6c86f..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter03Lexical
+++ /dev/null
@@ -1,426 +0,0 @@
-*Chapter 3*
-
-h1. Lexical Structure
-The organization of this chapter parallels the chapter on [Lexical Structure|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq. This chapter specifies the lexical structure of the Java programming language.
-
-bq. Programs are written in Unicode ([&#167;3.1|Chapter03Lexical.html#3.1], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95413]), but lexical translations are provided ([&#167;3.2|Chapter03Lexical.html#3.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95504]) so that Unicode escapes ([&#167;3.3|Chapter03Lexical.html#3.3], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100850]) can be used to include any Unicode character using only ASCII characters. Line terminators are defined ([&#167;3.4|Chapter03Lexical.html#3.4], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#231571]) to support the different conventions of existing host systems while maintaining consistent line numbers.
-
-bq. The Unicode characters resulting from the lexical translations are reduced to a sequence of input elements ([&#167;3.5|Chapter03Lexical.html#3.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#25687]), which are white space ([&#167;3.6|Chapter03Lexical.html#3.6], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95710]), comments ([&#167;3.7|Chapter03Lexical.html#3.7], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#48125]), and tokens. The tokens are the identifiers ([&#167;3.8|Chapter03Lexical.html#3.8], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#40625]), keywords ([&#167;3.9|Chapter03Lexical.html#3.9], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#229308]), literals ([&#167;3.10|Chapter03Lexical.html#3.10], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#48272]), separators ([&#167;3.11|Chapter03Lexical.html#3.11], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230752]), and operators ([&#167;3.12|Chapter03Lexical.html#3.12], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230663]) of the syntactic grammar.
-
-{anchor:3.1}
-h2. 3.1 Unicode
-(Cf. ??[JLS. &#167;3.1|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95413]??.)
-
-_Deletion:_ Groovy has no character literals.
-
-{anchor:3.2}
-h2. 3.2 Lexical Translations
-(Cf. ??[JLS. &#167;3.2|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95504]??.)
-
-Unchanged.
-
-{anchor:3.3}
-h2. 3.3 Unicode Escapes
-(Cf. ??[JLS. &#167;3.3|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100850]??.)
-
-Unchanged.
-
-{anchor:3.4}
-h2. 3.4 Line Terminators
-(Cf. ??[JLS. &#167;3.4|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#231571]??.)
-
-Unchanged.
-
-{anchor:3.5}
-h2. 3.5 Input Elements and Tokens
-(Cf. ??[JLS. &#167;3.5|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#25687]??.)
-
-_Addition:_ The definition of _Token_ includes _StringConstructor_, as shown below.
-
-{code}
-Token:
-    Identifier
-    Keyword
-    Literal
-    StringConstructor
-    Separator
-    Operator
-{code}
-
-It is also noted that line terminators (as defined by [&#167;3.4|#3.4]) may be classified as either separators ([&#167;3.11|#3.11]) or white space ([&#167;3.6|#3.6]), according to the rules of [&#167;3.11|#3.11].
-
-{anchor:3.6}
-h2. 3.6 White Space
-(Cf. ??[JLS. &#167;3.6|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#95710]??.)
-
-_Addition:_ Some line terminators are transformed into separators, according to the rules defined in [&#167;3.11|#3.11], below.
-
-{anchor:3.7}
-h2. 3.7 Comments
-(Cf. ??[JLS. &#167;3.7|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#9724]??.)
-
-_Addition_: If the first two characters of a Groovy program are the ASCII sharp sign and exclamation point ('#' followed by '!'), the whole line is treated as a comment.  In other words, the program is treated exactly as if two slash characters ('//') were inserted before the sharp sign.  This unusual rule makes it easier to write Groovy scripts on some systems.
-
-_Addition_: Note that the newline terminating an "end of line" comment can be significant.
-
-
-{anchor:3.8}
-h2. 3.8 Identifiers
-(Cf. ??[JLS. &#167;3.8|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#40625]??.)
-
-_Change:_ Groovy identifiers differ from Java identifiers in that the ASCII dollar character '$' is not a legal identifier character. 
-
-Note that Groovy provides a mechanism to use any Unicode string as a name. This is restriction applies in practice only to the spelling of unqualified names, since Groovy provides a way to use any Unicode string whatever as a member name. (See [Chapter 6|Chapter06Names.html].)
-
-(The dollar sign is sometimes used internally by Groovy to mangle non-Java identifiers which must be converted to Java names. For this reason, it would be confusing to allow unescaped dollar signs as Groovy identifier constituents.)
-
-{anchor:3.9}
-h2. 3.9 Keywords
-(Cf. ??[JLS. &#167;3.9|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#229309]??.)
-
-_Addition:_ The following ASCII character sequences are keywords in Groovy but
-not in Java:
-{table}
- any | as | def | in | with
-{table}
-
-_Addition:_ In addition to {{const}} and {{goto}}, the following keywords are reserved in Groovy, but are not currently used. 
-{table}
-  do  |  strictfp  
-{table}
-
-{anchor:3.10}
-h2. 3.10 Literals
-(Cf. ??[JLS. &#167;3.10|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#228794]??.)
-
-_Change_: A literal is the source code representation of a value of a numeric type ([&#167;3.10.1|#3.10.1] and [&#167;3.10.2|#3.10.2]), the boolean type ([&#167;3.10.3|#3.10.3]), the string type ([&#167;3.10.5|#3.10.5]), or the null type ([&#167;3.10.7|#3.10.7]). String constructors ([&#167;3.10.5.1|#3.10.5.1]) are closely related to string literals and may contain non-constant parts. Groovy also builds on the Java numeric literal syntaxes to support literal constants of type {{BigInteger}} and {{BigDecimal}}.
-
-{anchor:3.10.1}
-h3. 3.10.1 Integer Literals
-(Cf. ??[JLS. &#167;3.10.1|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#46750]??.)
-
-The production {{IntegerTypeSuffix: g G}} is added, allowing {{BigInteger}} constants.
-
-TO DO:  123i allowed?  Other literal syntaxes?
-
-Because numbers are objects in Groovy,
-numeric literals are not allowed to begin or end with adecimal point.
-Java floating point literals such as {{.01}}, {{1.f}}, and {{1.e10}} must be padded with zero digits,
-as in {{0.01}}, {{1.0f}}, and {{1.0e10}}.
-
-{code}
-assert '123' == 123.toString
-assert '1.23' == 1.23.toString
-{code}
-
-{anchor:3.10.2}
-h3. 3.10.2 Floating-Point Literals
-(Cf. ??[JLS. &#167;3.10.2|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#232095]??.)
-
-The production {{FloatTypeSuffix: g G}} is added, allowing {{BigDecimal}} constants.
-
-{anchor:3.10.3}
-h3. 3.10.3 Boolean Literals
-(Cf. ??[JLS. &#167;3.10.3|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#49652]??.)
-
-Unchanged.
-
-{anchor:3.10.4}
-h3. 3.10.4 Character Literals
-(Cf. ??[JLS. &#167;3.10.4|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100964]??.)
-
-Deletion: Groovy has no {{CharacterLiteral}} token.  All literals with character data in them denote strings.  Constant strings of unit length serve in the place of character literals, since they coerce properly to character constants.
-
-TODO: include reference to section of Chapter 5 "Conversions" that specifys that unit length strings coorce to characters
-
-{anchor:3.10.5}
-h3. 3.10.5 String Literals
-(Cf. ??[JLS. &#167;3.10.5|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101084]??.)
-
-_Change:_ The following text completely replaces [JLS. &#167;3.10.5|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101084], and adds &#167;3.10.5.1.
-
-Groovy string literals have a syntax inspired by other scripting languages.  A string literal may be delimited by single or double.  When following certain operators and punctuation characters, a string literal may also be delimited by forward-slash characters, in which case it is also called a ??regular expression literal??.
-
-Double-quoted literals and regular expression literals may incorporate substring substitution expressions, which are introduced by unescaped dollar signs, and these are specified by [&#167;3.10.5.1|#3.10.5.1], below.
-
-Independently, single or double quote marks may be tripled, allowing the string to span multiple lines.  Whenever string delimiters are used singly, the string may not contain an unescaped line terminator.
-
-Regardless of the spelling of a line terminator found inside a string literal or constructor, it is always taken to represent a newline character, regardless of the local newline conventions.
-
-To avoid conflict with comment syntaxes, a regular expression literal cannot be empty and cannot begin with a star character. There is also a potential conflict with division operators (those beginning with a forward slash). Division operators are only recognized after certain tokens:  Identifiers, keywords, numeric and string constants, right brackets, and unary increment operators ({{++}}, {{--}}).  Any amount of whitespace and line terminators may also occur before a division operator.
-In other contexts, a slash introduces a regular expression literal.
-
-(Note:  The grammar of single-quoted and triple-quoted strings differs only in their processing of line terminators. We express this by means of a grammatical parameter {{LT}}, which is true if line terminators are allowed.)
-
-{code}
-StringLiteral:
-  \'   (CStringCharacter[LT=false])*   \'
-  \"   (DStringCharacter[LT=false])*   \"
-  \'\'\' (CStringCharacter[LT=true] (\')? (\')? )*  \'\'\'
-  \"\"\" (DStringCharacter[LT=true] (\")? (\"?) )* \"\"\"
-  \/   (RStringCharacter (\*)*)+   \/
-
-CStringCharacter[LT]:
-  InputCharacter but not \' or \\\
-  EscapeSequence[LT]
-  LineTerminator  when(LT)
-
-DStringCharacter[LT]:
-  InputCharacter but not \" or \\\ or \$
-  EscapeSequence[LT]
-  LineTerminator  when(LT)
-
-EscapeSequence[LT]:  (Use the Java EscapeSequence definition, plus the following productions)
-  \\\ \$
-  \\\ LineTerminator
-
-RStringCharacter:
-  InputCharacter but not a closing quote or \\\ or \$
-  RStringEscape
-
-RStringEscape:
-  \$ (unless part of a match for GStringValuePart)
-  \\\ LineTerminator
-  \\\ InputCharacter (but not \r or \n)
-{code}
-
-Note that a triple-quoted string may contain isolated single or double occurrences of its close-quote. For example:
-{code}   
-assert """x""" == 'x'
-assert """""" == ''
-assert '''''"''' == "''" + '"'
-{code}
-
-{anchor:3.10.5.1}
-h3. 3.10.5.1 String Constructors
-
-If a double-quoted string literal or regular expression literal contains an unescaped dollar character ('$'), then it is not a string literal, but rather a ??string constructor??, which is a sequence of tokens that comprise an expression for a string containing constant and non-constant parts.
-Each unescaped dollar character must be followed by a ??value part??, which is a Groovy expression in the form of a name or a block.
-There may also be a star {{*}} between the dollar and the expression, which serves as a ??spread operator?? that modifies the manner in which the value is inserted.  (The semantics of spreading are defined by the {{GString}} class and its users.)
-
-The value part is parsed and evaluated as an ordinary expression.
-If it is in the form of a block without explicit closure arguments, it is taken to be a closure of no parameters, and is immediately called.  In the simplest case, an expression surrounded by braces stands for the value of the expression itself.
-Apart from such dollars and value parts, every other character between the opening and closing string quotes is treated as in the case of normal string literals.
-
-Thus, string constructor expression consists of alternating literal parts and values.
-During the tokenization phase of translation, the end of a literal part is determined by the occurrence of an unescaped dollar character, or (at the end) by the appropriate closing quote.
-The end of a value part is determined either by eagerly parsing a series of dot-separated identifiers, or by parsing a block, with its balanced curly braces.
-
-In a double-quoted string constructor, an unescaped dollar sign must be followed either by a dot-separated series of keywords or identifiers, or by a block.
-In a regular expression literal, if a dollar sign is not followed by an identifier character or a left curly brace, perhaps after an intervening star, the dollar is deemed to be escaped.
-(Note that in standard regular expression syntaxes, the dollar sign is never meaningfully followed by a star, a brace, or a letter, so these notations are available for use as string constructor value parts.)
-
-{code}
-String x = "X"
-def xx = [length:1]
-assert "$x" == x
-assert "${x}" == x
-assert "${x}o$x" == "XoX"
-assert "\\\$x" == '$'+'x'
-assert "$xx.length" == "1"
-assert "$xx.length." == "1."
-assert "$xx.length()" == "1()"
-assert "$xx.length+2" == "1+2"
-assert "$xx . length" == "[length:1] . length"
-assert "zXY;" == """z${
-    String y = "Y"
-    ("$x$y") };""" as String
-assert 'EUOUAE'.matches(/^[aeiou]*$/)
-assert 'football'.replaceAll(/foo/, "Bar").startsWith('Bart')
-{code}
-
-The process of parsing an embedded block may be viewed as an approximate parse which attends only to the balancing of curly brace tokens.
-(Some implementations may be able to perform string constructor tokenization and parsing in one coroutined pass, but the specification does not require this.)
-The tokenization of a string constructor must follow the format of a {{GStringLexicalForm}}.
-This is not a production of the Groovy expression grammar, but rather a syntax which must govern the separation of literal parts from expressions.
-
-(Note:  The term {{GString}} refers to a class of string-like objects created by a string constructor expression.)
-
-{code}
-GStringLexicalForm[LT,RE]:
-  GStringStart[LT,RE] GStringValuePart[LT,RE]
-        (GStringMiddle[LT,RE] GStringValuePart[LT,RE])*
-              GStringEnd[LT,RE]
-
-GStringStart[LT,RE]
-  \"   (DStringCharacter[LT])*  when(!LT & !RE)
-  \"\"\" (DStringCharacter[LT])*  when(LT & !RE)
-  \/   (DStringCharacter[LT])*  when(RE & !LT)
-
-GStringMiddle[LT]
-  (DStringCharacter[LT])*
-
-GStringEnd[LT]
-  (DStringCharacter[LT])* \"    when(!LT & !RE)
-  (DStringCharacter[LT])* \"\"\"  when(!LT & !RE)
-  (DStringCharacter[LT])* \/    when(RE & !LT)
-
-GStringValuePart[LT,RE]:
-  \$ (\*)? RawIdentifier ( \. RawIdentifier )*
-  \$ (\*)? \{ (GStringToken[LT])* \}
-
-GStringLiteralPart[LT,RE]:
-  GStringStart[LT,RE]
-  GStringMiddle[LT,RE]
-  GStringEnd[LT,RE]
-
-GStringToken[LT,RE]:
-  InputElement but not \{ \} LineTerminator
-  \{ GStringToken[LT,RE]* \}
-  GStringLexicalForm[LT=false,RE=false]
-  GStringLexicalForm[LT=false,RE=true]
-  GStringLexicalForm[LT=true,RE=false]  when(LT)
-  LineTerminator                        when(LT)
-
-{code}
-
-In this way, string constructors are recognized lexically as a complex of {{GStringLiteralPart}}s and other tokens, according to the grammar of {{GStringLexicalForm}}, which does not recognize statement or expression structure, except to balance brackets.
-
-In the resulting mix of tokens, the various literal parts are left as-is, for later parsing as a {{StringConstructorExpression}} by the grammar.
-Each {{RawIdentifier}} is reinterpreted as a normal {{Identifier}}, or as a keyword, if its spelling is recognized as such.
-At that point, the dollar signs are insignificant, but are left in the grammar for clarity.
-
-{code}
-Token:
-  GStringLiteralPart[LT=false,RE=false]
-  GStringLiteralPart[LT=true,RE=false]
-  GStringLiteralPart[LT=false,RE=true]
-
-StringConstructorExpression[LT,RE]:
-  GStringStart[LT,RE] \$ Expression
-        ( GStringMiddle[LT,RE] \$ Expression )*
-              GStringEnd[LT,RE]
-{code}
-
-Identifiers and dots after a dollar sign are parsed into {{GStringToken}}s eagerly, even though their characters could also be validly parsed as string characters inside a following {{GStringValuePart}}.
-Note that a dot is taken to be part of an embedded expression only if it is followed by a letter or underscore.
-Also, a whitespace character always interrupts the eager parsing of a name.
-
-When eagerly parsing an identifier after a dollar, keyword recognition is not performed.
-The following program fragment may not be accepted as a valid Groovy program, because the token 'int' may not follow a dot '.':
-{code}
-  String x = "", y = "$x.int"
-{code}
-
-A string constructor expression which is introduced with a single double-quote character or forward-slash character must occur all on one line.
-It is an error for the value parts of such an expression to contain line terminators of any sort.
-The following program fragment may not be accepted as a valid Groovy program, unless the double quotes are tripled:
-{code}
-  println "Hello, ${
-        'world'}."
-{code}
-
-Reference: http://archive.groovy.codehaus.org/jsr/threads/iakbeiefedohmiddhked
-
-{anchor:3.10.6}
-h3. 3.10.6 Escape Sequences for Character and String Literals
-(Cf. ??[JLS. &#167;3.10.6|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230359]??.)
-
-Within the various kinds of strings, most characters stand for themselves, but a few have special functions.  The backslash character serves as an escape, which turns off the special function of the following character.  In quoted string literals, an escaping backslash itself is removed, while in regular expression literals both the backslash and the escaped character are retained.
-In quoted string literals, a backslash may only be followed by a limited set of characters, the ones which need escaping, or ones which when escaped serve as symbols for certain non-printing characters, such as newline.
-A backkslash may be followed by one of the letters {{nrtbf}}, either of the quotes {{'"}}, another backslash, a dollar sign, or line terminator, or an octal digit.  Any other character following a backslash is reserved for future use.
-
-In regular expression literals, an escaping backslash can be followed by any character, and both characters are preserved as significant.
-
-If a line terminator is escaped by a backslash, both the backslash and the line terminator are disregarded,  except within a regular expression literal, where only the backslash is disregarded.
-
-{anchor:3.10.7}
-h3. 3.10.7 The Null Literal
-(Cf. ??[JLS. &#167;3.10.7|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230717]??.)
-
-Unchanged.
-
-{anchor:3.11}
-h2. 3.11 Separators
-(Cf. ??[JLS. &#167;3.11|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230757]??.)
-
-_Addition:_ Groovy separators include all the Groovy separators, plus significant newline (described below) and {{->}}.
-
-{anchor:3.11.1}
-h2. 3.11.1 Significant Newlines
-
-_Addition:_ This entire section is added to the specification.
-
-As tokenization proceeds from left to right, some line terminators are reclassified as significant newlines, which then serve as alternatives to semicolons in the grammar of statements.
-
-As in Java, a LineTerminator token can occur inside a TraditionalComment, and is always insignificant.
-
-A line terminator inside a string literal is always lexically significant.  A line terminator which occurs within an expression embedded in a string constructor may also be significant.
-
-Otherwise, a LineTerminator is deemed to be insignificant if it is enclosed in parentheses or square bracket tokens, but not (in a certain precise sense) more closely in curly braces.
-Specifically, the left context of a LineTerminator, viewed in isolation, is converted to tokens.
-All tokens other than unmatched separators are removed, leaving (if the program is well-formed) as sequence of left parentheses, left square brackets, and left curly braces.
-The LineTerminator is regarded as significant if and only if the resulting sequence of separators is either empty, or ends in a curly brace.
-
-Significant newlines are specifically allowed to occur inside non-parenthesized expressions and in end-of-line comments.
-
-(As in Java, no newline of any sort may occur within plain string quotes.  The meaning of newlines in strings is described in 3.10.5.)
-
-A significant newline is ??lexically?? significant, in that the grammar must somehow account for it in the token stream.  However, in many places in the grammar, significant newlines are accepted but discarded.
-
-Many tokens can be regarded as "leaning rightward" (i.e., they are linguistically proclitic) because they clearly require additional tokens to complete a statement.
-For example, a colon or plus sign never ends a statement, but always requires further tokens.
-This notion is formalized in the Groovy grammar, where significant newlines are allowed and discarded after such rightward-leaning tokens.
-Such tokens include prefix and infix expression operators; comma, colon, and dot; and certain keywords (such as "throws") which contribute to declaration syntax.
-In a few cases, tokens lean rightward only in some contexts.  For example, the {{++}} operator leans rightward only if it is a prefix operator.
-
-These rules provide for easy continuation of long statements or expressions onto multiple lines, without a need to explicitly escape the intermediate line terminators.
-Generally, expression statements will terminate at newlines if the expression is complete, even if further tokens on the next line would add to the expression.
-If a programmer breaks a long expression by inserting a newline after an operator, the Groovy and Java languages will agree on the statement continuation.
-Following Java formatting habits, a programmer may also insert a line-breaking newline before an operator.  In such cases, the Groovy parser will detect the error, since the following line fragment, even if it happens to parse as an expression, will amount to an illegal expression statement [(&#167;14.8)|Chapter 14 Blocks#14.8].
-If there is doubt about a specific expression, enclose it in parentheses to make clear the intended grouping, and disable significant newlines.
-
-{anchor:3.11.2}
-h2. 3.11.2 Grammatical Significance of Newlines
-
-_Addition:_ This entire section is added to the specification.
-
-For simplicity in subsequent chapters, the following two grammar rules define all occurrences of significant newlines.
-
-{code}
-NLS:
-  (SignificantNewline)*
-SEP:
-  ';' NLS
-  SignificantNewline (';')? NLS
-{code}
-
-Wherever the grammar allows a semicolon separator token, the grammar also accepts any number of significant newlines instead of or in addition to the semicolon.  This is always indicated in subsequent chapters by an occurrences of the {{SEP}} nonterminal.
-
-Syntactically insignificant (and optional) newlines are indicated by occurrences of the {{NLS}} nonterminal.  There are no other uses of the {{SignificantNewline}} element.
-
-Unlike Java, but like Pascal, a semicolon functions as a statement separator, not a statement terminator.  A statement just before an enclosing right bracket is terminated with or without a final separator token.  As with certain scripting languages such as {{sh}} and {{awk}}, semicolons and significant newlines are interchangeable as statement separators.
-
-{code}
-  println x      //SIG
-  println x;     //insig
-  println x /*...  insig
-    ...*/ + y
-  println x +    //insig
-    y
-  println (x     //insig
-    + y)
-  println ({ x   //SIG
-    y })
-{code}
-
-{anchor:3.12}
-h2. 3.12 Operators
-(Cf. ??[JLS. &#167;3.12|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#230669]??.)
-
-_Addition:_ Groovy includes all Java operators, plus:
-
-{code}
-Operator:
-    <=>     ..      ..<     ...     *.      ?.      .&
-    =~      ==~     **      **=     .@
-{code}
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Lexical Structure|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
diff --git a/groovy/jsr/spec/src/wiki/Chapter03Lexical-Proposal b/groovy/jsr/spec/src/wiki/Chapter03Lexical-Proposal
deleted file mode 100644
index 46936da..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter03Lexical-Proposal
+++ /dev/null
@@ -1,131 +0,0 @@
-*Chapter 3*
-
-h1. Lexical Structure
-
-This chapter specifies the lexical structure of the Groovy programming language.
-
-The organization of this chapter parallels the chapter on [Lexical Structure|http://example.com] in the [Java Language Specification (third edition)|http://example.com], and builds on top of that specification.
-
-{anchor:3.1}
-h2. 3.1 Unicode
-
-Versions of the Groovy programming language up to and including 1.0 final use Unicode version 3.0 because J2SE 1.4 does. 
-Upgrades to newer versions of the Unicode Standard occurred in J2SE 5.0 (to Unicode 4.0). 
-
-The range of legal code points since J2SE 5.0 is now U+0000 to U+10FFFF, using the hexadecimal U+n _notation_.
-
-The Groovy programming language represents text in sequences of 16-bit code units, using the UTF-16 encoding.
-
-(-) Unlike Java, Groovy has no character literals, see ($3.10.4)
-
-{anchor:3.2}
-h2. 3.2 Lexical Translations
-
-Unchanged. Tokenization of character streams occurs exactly as in Java.
-
-{anchor:3.3}
-h2. 3.3 Unicode Escapes
-
-Unchanged. Unicode Escapes follow the same rules and are evaluated
-at the same time as Java.
-
-*J2SE 5.0+*
-Representing supplementary characters requires two consecutive Unicode escapes.
-
-{anchor:3.4}
-h2. 3.4 Line Terminators
-
-Unchanged. Unicode input characters are split into lines in the same way as Java.
-
-{anchor:3.5}
-h2. 3.5 Input Elements and Tokens
-
-(+) Shell comments are possible on the first line of a groovy source file ($3.7)
-
-(+) The definition of _Token_ includes _StringConstructor_ ($3.10.todo), as shown below.
-
-{code}
-Input:
-    ShellComment(opt) InputElements(opt) Sub(opt)
-
-Token:
-    Identifier
-    Keyword
-    Literal
-    StringConstructor
-    Separator
-    Operator
-{code}
-
-(i) It is also noted that line terminators (as defined by ($3.4)) may be classified as either separators ($3.11) or white space ($3.6), according to the rules of ($3.11).
-
-{anchor:3.6}
-h2. 3.6 White Space
-
-(i) Some line terminators are transformed into separators instead of whitespace, according to the rules defined in ($3.11), below.
-
-{anchor:3.7}
-h2. 3.7 Comments
-
-(+) Groovy has a third kind of _comment_ which is only acceptable on the first line of a groovy source file ($3.5)
-{table}
- syntax           | description
- {{# text}}       | A _shell_ _comment_: all the text from the ASCII
-                  | character {{#}} to the end of the line is ignored (as in
-                  | Unix shell scripts).
-{table}
-
-This comment style is formally specified by the following amendment to the Java productions ([JLS 3.7|http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#48125]) :
-{code}
-  
-ShellComment:
-  '#' CharactersInLine(opt)
-{code}
-
-These productions imply all of the following additional properties:
-- {{#}}, {{/\*}} and {{\*/}} have no special meaning in comments that begin with {{//}}.
-- {{#}} and {{//}} have no special meaning in comments that begin with {{/\*}} or {{/\*\*}}.
-- {{//}}, {{/\*}} and {{\*/}} have no special meaning in comments that begin with {{#}}.
-
-The lexical grammar implies that comments do not occur within string literals ($3.10.5) or regex literals ($3.10.todo).
-
-(+) Note that the newline terminating an "end of line" comment can be significant. ($3.11)
-
-{anchor:3.8}
-h2. 3.8 Identifiers
-
-(i) Groovy identifiers consist of _Java_ _letters_ and _Java_ _numbers_ with the exception of the ASCII dollar character '$' which is not a legal identifier character.  
-
-{table}
-todo 
-jrose - "The dollar sign is sometimes used internally by Groovy to mangle non-Java identifiers which must be converted to Java names. For this reason, it would be confusing to allow unescaped dollar signs as Groovy identifier constituents."
-jrayner - Is this true blackdrag?
-Also... should we implement Character.isGroovyIdentifier(), including a formalism of this rule above?
-{table}
-
-(+) Groovy provides a way to use any Unicode string as a member name. (See [Chapter 6|Chapter06Names.html].)
-
-{anchor:3.9}
-h2. 3.9 Keywords
-
-(+) The following character sequences, formed from ASCII letters, are reserved for use as additional _keywords_  and cannot be used as unqualified identifiers ($3.8):
-
-{table}
-Keywords:    | one of       |                
-{{any     }} | {{def     }} | {{threadsafe}} 
-{{as      }} | {{in      }} | {{with}}       
-{table}
-
-The keywords {{any}}, {{const}}, {{goto}}, {{threadsafe}} and {{with}} are reserved, even though they are not currently used. This may allow a Groovy compiler to produce better error messages if these keywords incorrectly appear in programs.
-
-(-) The keywords {{do}}, {{strictfp}}, {{native}} are not used in groovy.
-
-(i) The following appear to not yet be implemented in groovy, but I think they are intended to be {{throws}}, {{enum}}, {{final}}
-
-(i) Reference Implementation Note: {{metaClass}} and {{\_\_timeStamp}} are used internally, and should be avoided as basic members of Groovy Objects.
-
-{table}
-todo 
-Should we allow keywords as qualified member names (when idents quoted)?
-e.g. myFoo.with()  or  myBar."any" etc...
-{table}
diff --git a/groovy/jsr/spec/src/wiki/Chapter04Types b/groovy/jsr/spec/src/wiki/Chapter04Types
deleted file mode 100644
index 6467694..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter04Types
+++ /dev/null
@@ -1,139 +0,0 @@
-*Chapter 4*
-
-h1. Types, Values, and Variables
-The organization of this chapter parallels the chapter on [Types, Values, and Variables|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq. The Java programming language is a ??strongly typed?? language, which means that every variable and every expression has a type that is known at compile time. Types limit the values that a variable ([&#167;4.5|Chapter 04 Types#4.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#18470]) can hold or that an expression can produce, limit the operations supported on those values, and determine the meaning of the operations. Strong typing helps detect errors at compile time.
-
-bq. The types of the Java programming language are divided into two categories: primitive types and reference types. The primitive types ([&#167;4.2|Chapter 04 Types#4.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#85587]) are the {{boolean}} type and the numeric types. The numeric types are the integral types {{byte}}, {{short}}, {{int}}, {{long}}, and {{char}}, and the floating-point types {{float}} and {{double}}. The reference types ([&#167;4.3|Chapter 04 Types#4.3], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9317]) are class types, interface types, and array types. There is also a special null type. An object ([&#167;4.3.1|Chapter 04 Types#4.3.1], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#12028]) is a dynamically created instance of a class type or a dynamically created array. The values of a reference type are references to objects. All objects, including arrays, support the methods of class {{Object}} ([&#167;4.3.2|Chapter 04 Types#4.3.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#11055]). String literals are represented by {{String}} objects ([&#167;4.3.3|Chapter 04 Types#4.3.3], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#26992]).
-
-bq. Names of types are used ([&#167;4.4|Chapter 04 Types#4.4], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#25948]) in declarations, casts, class instance creation expressions, array creation expressions, class literals, and {{instanceof}} operator expressions. 
-
-bq. A variable ([&#167;4.5|Chapter 04 Types#4.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#18470]) is a storage location. A variable of a primitive type always holds a value of that exact type. A variable of a class type _T_ can hold a null reference or a reference to an instance of class _T_ or of any class that is a subclass of _T_. A variable of an interface type can hold a null reference or a reference to any instance of any class that implements the interface. If _T_ is a primitive type, then a variable of type "array of _T_" can hold a null reference or a reference to any array of type "array of _T_"; if _T_ is a reference type, then a variable of type "array of _T_" can hold a null reference or a reference to any array of type "array of _S_" such that type _S_ is assignable ([&#167;5.2|Chapter 05 Conversions#5.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184206]) to type _T_. A variable of type {{Object}} can hold a null reference or a reference to any object, whether class instance or array.
-
-{anchor:4.1}
-h2. 4.1 The Kinds of Types and Values
-(Cf. ??[JLS. &#167;4.1|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#11128]??.)
-
-TO DO
-
-{anchor:4.2}
-h2. 4.2 Primitive Types and Values
-(Cf. ??[JLS. &#167;4.2|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#85587]??.)
-
-TO DO
-
-{anchor:4.2.1}
-h3. 4.2.1 Integral Types and Values
-(Cf. ??[JLS. &#167;4.2.1|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9151]??.)
-
-TO DO
-
-{anchor:4.2.2}
-h3. 4.2.2 Integer Operations
-(Cf. ??[JLS. &#167;4.2.2|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#29775]??.)
-
-TO DO
-
-{anchor:4.2.3}
-h3. 4.2.3 Floating-Point Types, Formats, and Values
-(Cf. ??[JLS. &#167;4.2.3|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9208]??.)
-
-TO DO
-
-{anchor:4.2.4}
-h3. 4.2.4 Floating-Point Operations
-(Cf. ??[JLS. &#167;4.2.4|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9249]??.)
-
-TO DO
-
-{anchor:4.2.5}
-h3. 4.2.5 The <code>boolean Type and <code>boolean</code> Values</h3>
-(Cf. ??[JLS. &#167;4.2.5|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9295]??.)
-
-TO DO
-
-{anchor:4.3}
-h2. 4.3 Reference Types and Values
-(Cf. ??[JLS. &#167;4.3|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9317]??.)
-
-TO DO
-
-{anchor:4.3.1}
-h3. 4.3.1 Objects
-(Cf. ??[JLS. &#167;4.3.1|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#12028]??.)
-
-TO DO
-
-{anchor:4.3.2}
-h3. 4.3.2 The Class Object
-(Cf. ??[JLS. &#167;4.3.2|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#11055]??.)
-
-TO DO
-
-{anchor:4.3.3}
-h3. 4.3.3 The Class String
-(Cf. ??[JLS. &#167;4.3.3|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#27000]??.)
-
-TO DO
-
-{anchor:4.3.4}
-h3. 4.3.4 When Reference Types Are the Same
-(Cf. ??[JLS. &#167;4.3.4|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#97058]??.)
-
-TO DO
-
-{anchor:4.4}
-h2. 4.4 Where Types Are Used
-(Cf. ??[JLS. &#167;4.4|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#52309]??.)
-
-TO DO
-
-{anchor:4.5}
-h2. 4.5 Variables
-(Cf. ??[JLS. &#167;4.5|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#10872]??.)
-
-TO DO
-
-{anchor:4.5.1}
-h3. 4.5.1 Variables of Primitive Type
-(Cf. ??[JLS. &#167;4.5.1|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#28344]??.)
-
-TO DO
-
-{anchor:4.5.2}
-h3. 4.5.2 Variables of Reference Type
-(Cf. ??[JLS. &#167;4.5.2|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#28345]??.)
-
-TO DO
-
-{anchor:4.5.3}
-h3. 4.5.3 Kinds of Variables
-(Cf. ??[JLS. &#167;4.5.3|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#10883]??.)
-
-TO DO
-
-{anchor:4.5.4}
-h3. 4.5.4 final Variables
-(Cf. ??[JLS. &#167;4.5.4|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#96639]??.)
-
-TO DO
-
-{anchor:4.5.5}
-h3. 4.5.5 Initial Values of Variables
-(Cf. ??[JLS. &#167;4.5.5|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#96595]??.)
-
-TO DO
-
-{anchor:4.5.6}
-h3. 4.5.6 Types, Classes, and Interfaces
-(Cf. ??[JLS. &#167;4.5.6|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#24887]??.)
-
-TO DO
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Types, Values, and Variables|http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter05Conversions b/groovy/jsr/spec/src/wiki/Chapter05Conversions
deleted file mode 100644
index 5531788..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter05Conversions
+++ /dev/null
@@ -1,115 +0,0 @@
-*Chapter 5*
-
-h1. Conversions and Promotions
-The organization of this chapter parallels the chapter on [Conversions and Promotions|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins in part as follows:
-
-bq. This chapter first describes the seven categories of conversions ([&#167;5.1|Chapter 05 Conversions#5.1], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#189955]), including the special conversions to {{String}} allowed for the string concatenation operator {{+}}. Then the five conversion contexts are described:
-
-* Assignment conversion ([&#167;5.2|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184206], [&#167;15.26|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5281]) converts the type of an expression to the type of a specified variable. The conversions permitted for assignment are limited in such a way that assignment conversion never causes an exception.
-* Method invocation conversion ([&#167;5.3|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#12687], [&#167;15.9|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#41147], [&#167;15.12|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20448]) is applied to each argument in a method or constructor invocation and, except in one case, performs the same conversions that assignment conversion does. Method invocation conversion never causes an exception.
-* Casting conversion ([&#167;5.5|Chapter 05 Conversions#5.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#20232]) converts the type of an expression to a type explicitly specified by a cast operator ([&#167;15.16|Chapter 15 Expressions#15.16], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#238146]). It is more inclusive than assignment or method invocation conversion, allowing any specific conversion other than a string conversion, but certain casts to a reference type may cause an exception at run time.
-* String conversion ([&#167;5.4|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#186035], [&#167;15.18.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39990]) allows any type to be converted to type {{String}}.
-* Numeric promotion ([&#167;5.6|Chapter 05 Conversions#5.6], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#26917]) brings the operands of a numeric operator to a common type so that an operation can be performed.
-
-{anchor:5.1}
-h2. 5.1 Kinds of Conversion
-(Cf. ??[JLS. &#167;5.1|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25201]??.)
-
-TO DO
-
-{anchor:5.1.1}
-h3. 5.1.1 Identity Conversions
-(Cf. ??[JLS. &#167;5.1.1|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25209]??.)
-
-TO DO
-
-{anchor:5.1.2}
-h3. 5.1.2 Widening Primitive Conversion
-(Cf. ??[JLS. &#167;5.1.2|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25214]??.)
-
-TO DO
-
-{anchor:5.1.3}
-h3. 5.1.3 Narrowing Primitive Conversions
-(Cf. ??[JLS. &#167;5.1.3|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25363]??.)
-
-TO DO
-
-{anchor:5.1.4}
-h3. 5.1.4 Widening Reference Conversions
-(Cf. ??[JLS. &#167;5.1.4|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25460]??.)
-
-TO DO
-
-{anchor:5.1.5}
-h3. 5.1.5 Narrowing Reference Conversions
-(Cf. ??[JLS. &#167;5.1.5|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25379]??.)
-
-TO DO
-
-{anchor:5.1.6}
-h3. 5.1.6 String Conversions
-(Cf. ??[JLS. &#167;5.1.6|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#176886]??.)
-
-TO DO
-
-{anchor:5.1.7}
-h3. 5.1.7 Forbidden Conversions
-(Cf. ??[JLS. &#167;5.1.7|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#175034]??.)
-
-TO DO
-
-{anchor:5.1.8}
-h3. 5.1.8 Value Set Conversion
-(Cf. ??[JLS. &#167;5.1.8|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184226]??.)
-
-TO DO
-
-{anchor:5.2}
-h2. 5.2 Assignment Conversion
-(Cf. ??[JLS. &#167;5.2|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#184206]??.)
-
-TO DO
-
-{anchor:5.3}
-h2. 5.3 Method Invocation Conversion
-(Cf. ??[JLS. &#167;5.3|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#53171]??.)
-
-TO DO
-
-{anchor:5.4}
-h2. 5.4 String Conversion
-(Cf. ??[JLS. &#167;5.4|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#186035]??.)
-
-TO DO
-
-{anchor:5.5}
-h2. 5.5 Casting Conversion
-(Cf. ??[JLS. &#167;5.5|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#20232]??.)
-
-TO DO
-
-{anchor:5.6}
-h2. 5.6 Numeric Promotions
-(Cf. ??[JLS. &#167;5.6|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#26918]??.)
-
-TO DO
-
-{anchor:5.6.1}
-h3. 5.6.1 Unary Numeric Promotion
-(Cf. ??[JLS. &#167;5.6.1|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#170952]??.)
-
-TO DO
-
-{anchor:5.6.2}
-h3. 5.6.2 Binary Numeric Promotion
-(Cf. ??[JLS. &#167;5.6.2|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#183615]??.)
-
-TO DO
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Conversions and Promotions|http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter06Names b/groovy/jsr/spec/src/wiki/Chapter06Names
deleted file mode 100644
index bcf8497..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter06Names
+++ /dev/null
@@ -1,307 +0,0 @@
-*Chapter 6*
-
-h1. Names
-The organization of this chapter parallels the chapter on [Names|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq. Names are used to refer to entities declared in a program. A declared entity ([&#167;6.1|Chapter 06 Names#6.1], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#33757]) is a package, class type, interface type, member (class, interface, field, or method) of a reference type, parameter (to a method, constructor, or exception handler), or local variable.
-
-bq. Names in programs are either simple, consisting of a single identifier, or qualified, &#32;consisting of a sequence of identifiers separated by "{{.}}" tokens ([&#167;6.2|Chapter 06 Names#6.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#31692]).
-
-bq. Every declaration that introduces a name has a ??scope?? ([&#167;6.3|Chapter 06 Names#6.3], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#103228]), which is the part of the program text within which the declared entity can be referred to by a simple name.
-
-bq. Packages and reference types (that is, class types, interface types, and array types) have members ([&#167;6.4|Chapter 06 Names#6.4], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#106443]). A member can be referred to using a qualified name _N_{{.}}_x_, where _N_ is a simple or qualified name and _x_ is an identifier. If _N_ names a package, then _x_ is a member of that package, which is either a class or interface type or a subpackage. If _N_ names a reference type or a variable of a reference type, then _x_ names a member of that type, which is either a class, an interface, a field, or a method.
-
-bq. In determining the meaning of a name ([&#167;6.5|Chapter 06 Names#6.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#106941]), the context of the occurrence is used to disambiguate among packages, types, variables, and methods with the same name.
-
-bq. Access control ([&#167;6.6|Chapter 06 Names#6.6], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285]) can be specified in a class, interface, method, or field declaration to control when ??access?? to a member is allowed. Access is a different concept from scope; access specifies the part of the program text within which the declared entity can be referred to by a qualified name, a field access expression ([&#167;15.11|Chapter 15 Expressions#15.11], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#41267]), or a method invocation expression ([&#167;15.12|Chapter 15 Expressions#15.12], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20448]) in which the method is not specified by a simple name. The default access is that a member can be accessed anywhere within the package that contains its declaration; other possibilities are {{public}}, {{protected}}, and {{private}}.
-
-bq. Fully qualified and canonical names ([&#167;6.7|Chapter 06 Names#6.7], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#25430]) and naming conventions ([&#167;6.8|Chapter 06 Names#6.8], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307]) are also discussed in this chapter.
-
-{anchor:6.1}
-h2. 6.1 Declarations
-(Cf. ??[JLS. &#167;6.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#33757]??.)
-
-TO DO
-
-{anchor:6.2}
-h2. 6.2 Names and Identifiers
-(Cf. ??[JLS. &#167;6.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#31692]??.)
-
-TO DO
-
-{anchor:6.3}
-h2. 6.3 Scope of a Declaration
-(Cf. ??[JLS. &#167;6.3|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#103228]??.)
-
-TO DO
-
-{anchor:6.3.1}
-h3. 6.3.1 Shadowing Declarations
-(Cf. ??[JLS. &#167;6.3.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#34133]??.)
-
-TO DO
-
-{anchor:6.3.2}
-h3. 6.3.2 Obscured Declarations
-(Cf. ??[JLS. &#167;6.3.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104058]??.)
-
-TO DO
-
-{anchor:6.4}
-h2. 6.4 Members and Inheritance
-(Cf. ??[JLS. &#167;6.4|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#106443]??.)
-
-TO DO
-
-{anchor:6.4.1}
-h3. 6.4.1 The Members of a Package
-(Cf. ??[JLS. &#167;6.4.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#34993]??.)
-
-TO DO
-
-{anchor:6.4.2}
-h3. 6.4.2 The Members of a Class Type
-(Cf. ??[JLS. &#167;6.4.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#34757]??.)
-
-TO DO
-
-{anchor:6.4.3}
-h3. 6.4.3 The Members of an Interface Type
-(Cf. ??[JLS. &#167;6.4.3|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#34849]??.)
-
-TO DO
-
-{anchor:6.4.4}
-h3. 6.4.4 The Members of an Array Type
-(Cf. ??[JLS. &#167;6.4.4|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#27725]??.)
-
-TO DO
-
-{anchor:6.5}
-h2. 6.5 Determining the Meaning of a Name
-(Cf. ??[JLS. &#167;6.5|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#106941]??.)
-
-TO DO
-
-{anchor:6.5.1}
-h3. 6.5.1 Syntactic Classification of a Name According to Context
-(Cf. ??[JLS. &#167;6.5.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#32741]??.)
-
-TO DO
-
-{anchor:6.5.2}
-h3. 6.5.2 Reclassification of Contextually Ambiguous Names
-(Cf. ??[JLS. &#167;6.5.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#32133]??.)
-
-TO DO
-
-{anchor:6.5.3}
-h3. 6.5.3 Meaning of Package Names
-(Cf. ??[JLS. &#167;6.5.3|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#32757]??.)
-
-TO DO
-
-{anchor:6.5.3.1}
-h4. 6.5.3.1 Simple Package Names
-(Cf. ??[JLS. &#167;6.5.3.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#22481]??.)
-
-TO DO
-
-{anchor:6.5.3.2}
-h4. 6.5.3.2 Qualified Package Names
-(Cf. ??[JLS. &#167;6.5.3.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#22482]??.)
-
-TO DO
-
-{anchor:6.5.4}
-h3. 6.5.4 Meaning of <i>PackageOrTypeNames</h3>
-(Cf. ??[JLS. &#167;6.5.4|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#21721]??.)
-
-TO DO
-
-{anchor:6.5.4.1}
-h4. 6.5.4.1 Simple <i>PackageOrTypeNames</h4>
-(Cf. ??[JLS. &#167;6.5.4.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73065]??.)
-
-TO DO
-
-{anchor:6.5.4.2}
-h4. 6.5.4.2 Qualified <i>PackageOrTypeNames</h4>
-(Cf. ??[JLS. &#167;6.5.4.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73067]??.)
-
-TO DO
-
-{anchor:6.5.5}
-h3. 6.5.5 Meaning of Type Names
-(Cf. ??[JLS. &#167;6.5.5|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73064]??.)
-
-TO DO
-
-{anchor:6.5.5.1}
-h4. 6.5.5.1 Simple Type Names
-(Cf. ??[JLS. &#167;6.5.5.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#21810]??.)
-
-TO DO
-
-{anchor:6.5.5.2}
-h4. 6.5.5.2 Qualified Type Names
-(Cf. ??[JLS. &#167;6.5.5.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#21811]??.)
-
-TO DO
-
-{anchor:6.5.6}
-h3. 6.5.6 Meaning of Expression Names
-(Cf. ??[JLS. &#167;6.5.6|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#21650]??.)
-
-TO DO
-
-{anchor:6.5.6.1}
-h4. 6.5.6.1 Simple Expression Names
-(Cf. ??[JLS. &#167;6.5.6.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#22022]??.)
-
-TO DO
-
-{anchor:6.5.6.2}
-h4. 6.5.6.2 Qualified Expression Names
-(Cf. ??[JLS. &#167;6.5.6.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#33085]??.)
-
-TO DO
-
-{anchor:6.5.7}
-h3. 6.5.7 Meaning of Method Names
-(Cf. ??[JLS. &#167;6.5.7|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#21652]??.)
-
-TO DO
-
-{anchor:6.5.7.1}
-h4. 6.5.7.1 Simple Method Names
-(Cf. ??[JLS. &#167;6.5.7.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#54512]??.)
-
-TO DO
-
-{anchor:6.5.7.2}
-h4. 6.5.7.2 Qualified Method Names
-(Cf. ??[JLS. &#167;6.5.7.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#54547]??.)
-
-TO DO
-
-{anchor:6.6}
-h2. 6.6 Access Control
-(Cf. ??[JLS. &#167;6.6|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#104285]??.)
-
-TO DO
-
-{anchor:6.6.1}
-h3. 6.6.1 Determining Accessibility
-(Cf. ??[JLS. &#167;6.6.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#102765]??.)
-
-TO DO
-
-{anchor:6.6.2}
-h3. 6.6.2 Details on <code>protected Access</h3>
-(Cf. ??[JLS. &#167;6.6.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#62638]??.)
-
-TO DO
-
-{anchor:6.6.2.1}
-h4. 6.6.2.1 Access to a <code>protected Member</h4>
-(Cf. ??[JLS. &#167;6.6.2.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#60602]??.)
-
-TO DO
-
-{anchor:6.6.2.2}
-h4. 6.6.2.2 Qualified Access to a <code>protected Constructor</h4>
-(Cf. ??[JLS. &#167;6.6.2.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#72596]??.)
-
-TO DO
-
-{anchor:6.6.3}
-h3. 6.6.3 An Example of Access Control
-(Cf. ??[JLS. &#167;6.6.3|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#62647]??.)
-
-TO DO
-
-{anchor:6.6.4}
-h3. 6.6.4 Example: Access to <code>public and <code>Non-public</code> Classes</h3>
-(Cf. ??[JLS. &#167;6.6.4|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36060]??.)
-
-TO DO
-
-{anchor:6.6.5}
-h3. 6.6.5 Example: Default-Access Fields, Methods, and Constructors
-(Cf. ??[JLS. &#167;6.6.5|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36154]??.)
-
-TO DO
-
-{anchor:6.6.6}
-h3. 6.6.6 Example: <code>public Fields, Methods, and Constructors</h3>
-(Cf. ??[JLS. &#167;6.6.6|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36250]??.)
-
-TO DO
-
-{anchor:6.6.7}
-h3. 6.6.7 Example: <code>protected Fields, Methods, and Constructors</h3>
-(Cf. ??[JLS. &#167;6.6.7|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36191]??.)
-
-TO DO
-
-{anchor:6.6.8}
-h3. 6.6.8 Example: <code>private Fields, Methods, and Constructors</h3>
-(Cf. ??[JLS. &#167;6.6.8|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#36233]??.)
-
-TO DO
-
-{anchor:6.7}
-h2. 6.7 Fully Qualified Names and Canonical Names
-(Cf. ??[JLS. &#167;6.7|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#25430]??.)
-
-TO DO
-
-{anchor:6.8}
-h2. 6.8 Naming Conventions
-(Cf. ??[JLS. &#167;6.8|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307]??.)
-
-TO DO
-
-{anchor:6.8.1}
-h3. 6.8.1 Package Names
-(Cf. ??[JLS. &#167;6.8.1|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#9184]??.)
-
-TO DO
-
-{anchor:6.8.2}
-h3. 6.8.2 Class and Interface Type Names
-(Cf. ??[JLS. &#167;6.8.2|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#32824]??.)
-
-TO DO
-
-{anchor:6.8.3}
-h3. 6.8.3 Method Names
-(Cf. ??[JLS. &#167;6.8.3|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#34563]??.)
-
-TO DO
-
-{anchor:6.8.4}
-h3. 6.8.4 Field Names
-(Cf. ??[JLS. &#167;6.8.4|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#9351]??.)
-
-TO DO
-
-{anchor:6.8.5}
-h3. 6.8.5 Constant Names
-(Cf. ??[JLS. &#167;6.8.5|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#9368]??.)
-
-TO DO
-
-{anchor:6.8.6}
-h3. 6.8.6 Local Variable and Parameter Names
-(Cf. ??[JLS. &#167;6.8.6|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#81404]??.)
-
-TO DO
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Names|http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter14Blocks b/groovy/jsr/spec/src/wiki/Chapter14Blocks
deleted file mode 100644
index 56c3ccd..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter14Blocks
+++ /dev/null
@@ -1,233 +0,0 @@
-*Chapter 14*
-
-h1. Blocks and Statements
-The organization of this chapter parallels the chapter on [Blocks and Statements|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq. The sequence of execution of a program is controlled by ??statements??, which are executed for their effect and do not have values.
-
-bq. Some statements ??contain?? other statements as part of their structure; such other statements are substatements of the statement. We say that statement _S_ ??immediately &#32;contains?? statement _U_ if there is no statement _T_ different from _S_ and _U_ such that _S_ contains _T_ and _T_ contains _U_. In the same manner, some statements contain expressions ([&#167;15|Chapter 15 Expressions#15], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#4709]) as part of their structure.
-
-bq. The first section of this chapter discusses the distinction between normal and abrupt completion of statements ([&#167;14.1|Chapter 14 Blocks#14.1], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5894]). Most of the remaining sections explain the various kinds of statements, describing in detail both their normal behavior and any special treatment of abrupt completion.
-
-bq. Blocks are explained first ([&#167;14.2|Chapter 14 Blocks#14.2], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#246838]), followed by local class declarations ([&#167;14.3|Chapter 14 Blocks#14.3], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#247766]) and local variable declaration statements ([&#167;14.4|Chapter 14 Blocks#14.4], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5920]). 
-
-bq. Next a grammatical maneuver that sidesteps the familiar "dangling {{else}}" problem ([&#167;14.5|Chapter 14 Blocks#14.5], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32584]) is explained.
-
-bq. Statements that will be familiar to C and C++ programmers are the empty ([&#167;14.6|Chapter 14 Blocks#14.6], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5970]), labeled ([&#167;14.7|Chapter 14 Blocks#14.7], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#78993]), expression ([&#167;14.8|Chapter 14 Blocks#14.8], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5984]), {{if}} ([&#167;14.9|Chapter 14 Blocks#14.9], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5991]), {{switch}} ([&#167;14.10|Chapter 14 Blocks#14.10], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35518]), {{while}} ([&#167;14.11|Chapter 14 Blocks#14.11], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237277]), {{do}} ([&#167;14.12|Chapter 14 Blocks#14.12], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6045]), {{for}} ([&#167;14.13|Chapter 14 Blocks#14.13], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#24588]), {{break}} ([&#167;14.14|Chapter 14 Blocks#14.14], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6842]), {{continue}} ([&#167;14.15|Chapter 14 Blocks#14.15], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6122]), and {{return}} ([&#167;14.16|Chapter 14 Blocks#14.16], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6767]) statements.
-
-bq. Unlike C and C++, the Java programming language has no {{goto}} statement. However, the {{break}} and {{continue}} statements are allowed to mention statement labels.
-
-bq. The Java programming language statements that are not in the C language are the {{throw}} ([&#167;14.17|Chapter 14 Blocks#14.17], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237350]), {{synchronized}} ([&#167;14.18|Chapter 14 Blocks#14.18], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#255769]), and {{try}} ([&#167;14.19|Chapter 14 Blocks#14.19], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#79311]) statements.
-
-bq. The last section ([&#167;14.20|Chapter 14 Blocks#14.20], [JLS|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#236365]) of this chapter addresses the requirement that every statement be ??reachable?? in a certain technical sense.
-
-{anchor:14.1}
-h2. 14.1 Normal and Abrupt Completion of Statements
-(Cf. ??[JLS. &#167;14.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5894]??.)
-
-TO DO
-
-{anchor:14.2}
-h2. 14.2 Blocks
-(Cf. ??[JLS. &#167;14.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#246838]??.)
-
-TO DO
-
-{anchor:14.3}
-h2. 14.3 Local Class Declarations
-(Cf. ??[JLS. &#167;14.3|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#247766]??.)
-
-TO DO
-
-{anchor:14.4}
-h2. 14.4 Local Variable Declaration Statements
-(Cf. ??[JLS. &#167;14.4|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5920]??.)
-
-TO DO
-
-{anchor:14.4.1}
-h3. 14.4.1 Local Variable Declarators and Types
-(Cf. ??[JLS. &#167;14.4.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35393]??.)
-
-TO DO
-
-{anchor:14.4.2}
-h3. 14.4.2 Scope of Local Variable Declarations
-(Cf. ??[JLS. &#167;14.4.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32644]??.)
-
-TO DO
-
-{anchor:14.4.3}
-h3. 14.4.3 Shadowing of Names by Local Variables
-(Cf. ??[JLS. &#167;14.4.3|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32716]??.)
-
-TO DO
-
-{anchor:14.4.4}
-h3. 14.4.4 Execution of Local Variable Declarations
-(Cf. ??[JLS. &#167;14.4.4|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32717]??.)
-
-TO DO
-
-{anchor:14.5}
-h2. 14.5 Statements
-(Cf. ??[JLS. &#167;14.5|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#32584]??.)
-
-TO DO
-
-{anchor:14.6}
-h2. 14.6 The Empty Statement
-(Cf. ??[JLS. &#167;14.6|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5970]??.)
-
-TO DO
-
-{anchor:14.7}
-h2. 14.7 Labeled Statements
-(Cf. ??[JLS. &#167;14.7|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#78993]??.)
-
-TO DO
-
-{anchor:14.8}
-h2. 14.8 Expression Statements
-(Cf. ??[JLS. &#167;14.8|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5984]??.)
-
-TO DO
-
-{anchor:14.9}
-h2. 14.9 The <code>if Statement</h2>
-(Cf. ??[JLS. &#167;14.9|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#5991]??.)
-
-TO DO
-
-{anchor:14.9.1}
-h3. 14.9.1 The <code>if-then Statement</h3>
-(Cf. ??[JLS. &#167;14.9.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237433]??.)
-
-TO DO
-
-{anchor:14.9.2}
-h3. 14.9.2 The <code>if-then-else Statement</h3>
-(Cf. ??[JLS. &#167;14.9.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#236506]??.)
-
-TO DO
-
-{anchor:14.10}
-h2. 14.10 The <code>switch Statement</h2>
-(Cf. ??[JLS. &#167;14.10|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35522]??.)
-
-TO DO
-
-{anchor:14.11}
-h2. 14.11 The while Statement
-(Cf. ??[JLS. &#167;14.11|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237278]??.)
-
-TO DO
-
-{anchor:14.11.1}
-h3. 14.11.1 Abrupt Completion
-(Cf. ??[JLS. &#167;14.11.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#21139]??.)
-
-TO DO
-
-{anchor:14.12}
-h2. 14.12 The do Statement
-(Cf. ??[JLS. &#167;14.12|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#246911]??.)
-
-TO DO
-
-{anchor:14.12.1}
-h3. 14.12.1 Abrupt Completion
-(Cf. ??[JLS. &#167;14.12.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#45366]??.)
-
-TO DO
-
-{anchor:14.12.2}
-h3. 14.12.2 Example of do statement
-(Cf. ??[JLS. &#167;14.12.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#252264]??.)
-
-TO DO
-
-{anchor:14.13}
-h2. 14.13 The <code>for Statement</h2>
-(Cf. ??[JLS. &#167;14.13|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#24588]??.)
-
-TO DO
-
-{anchor:14.13.1}
-h3. 14.13.1 Initialization of <code>for statement</h3>
-(Cf. ??[JLS. &#167;14.13.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#45367]??.)
-
-TO DO
-
-{anchor:14.13.2}
-h3. 14.13.2 Iteration of for statement
-(Cf. ??[JLS. &#167;14.13.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#217196]??.)
-
-TO DO
-
-{anchor:14.13.3}
-h3. 14.13.3 Abrupt Completion of <code>for statement</h3>
-(Cf. ??[JLS. &#167;14.13.3|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#45371]??.)
-
-TO DO
-
-{anchor:14.14}
-h2. 14.14 The <code>break Statement</h2>
-(Cf. ??[JLS. &#167;14.14|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#35540]??.)
-
-TO DO
-
-{anchor:14.15}
-h2. 14.15 The <code>continue Statement</h2>
-(Cf. ??[JLS. &#167;14.15|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6122]??.)
-
-TO DO
-
-{anchor:14.16}
-h2. 14.16 The <code>return Statement</h2>
-(Cf. ??[JLS. &#167;14.16|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6767]??.)
-
-TO DO
-
-{anchor:14.17}
-h2. 14.17 The <code>throw Statement</h2>
-(Cf. ??[JLS. &#167;14.17|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#237350]??.)
-
-TO DO
-
-{anchor:14.18}
-h2. 14.18 The <code>synchronized Statement</h2>
-(Cf. ??[JLS. &#167;14.18|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#255769]??.)
-
-TO DO
-
-{anchor:14.19}
-h2. 14.19 The <code>try statement</h2>
-(Cf. ??[JLS. &#167;14.19|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#79311]??.)
-
-TO DO
-
-{anchor:14.19.1}
-h3. 14.19.1 Execution of try-catch<code><b></code></h3>
-(Cf. ??[JLS. &#167;14.19.1|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#24134]??.)
-
-TO DO
-
-{anchor:14.19.2}
-h3. 14.19.2 Execution of try-catch-finally<code><b></code></h3>
-(Cf. ??[JLS. &#167;14.19.2|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#79326]??.)
-
-TO DO
-
-{anchor:14.20}
-h2. 14.20 Unreachable Statements
-(Cf. ??[JLS. &#167;14.20|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#236365]??.)
-
-TO DO
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Blocks and Statements|http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter15Expressions b/groovy/jsr/spec/src/wiki/Chapter15Expressions
deleted file mode 100644
index 3445042..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter15Expressions
+++ /dev/null
@@ -1,585 +0,0 @@
-*Chapter 15*
-
-h1. Expressions
-The organization of this chapter parallels the chapter on [Expressions|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html], which begins as follows:
-
-bq. Much of the work in a program is done by evaluating ??expressions??, either for their side effects, such as assignments to variables, or for their values, which can be used as arguments or operands in larger expressions, or to affect the execution sequence in statements, or both.
-
-bq. This chapter specifies the meanings of expressions and the rules for their evaluation.
-
-{anchor:15.1}
-h2. 15.1 Evaluation, Denotation, and Result
-(Cf. ??[JLS. &#167;15.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#228862]??.)
-
-TO DO
-
-{anchor:15.2}
-h2. 15.2 Variables as Values
-(Cf. ??[JLS. &#167;15.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#229188]??.)
-
-TO DO
-
-{anchor:15.3}
-h2. 15.3 Type of an Expression
-(Cf. ??[JLS. &#167;15.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#198550]??.)
-
-TO DO
-
-{anchor:15.4}
-h2. 15.4 FP-strict Expressions
-(Cf. ??[JLS. &#167;15.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#249198]??.)
-
-TO DO
-
-{anchor:15.5}
-h2. 15.5 Expressions and Run-Time Checks
-(Cf. ??[JLS. &#167;15.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#290072]??.)
-
-TO DO
-
-{anchor:15.6}
-h2. 15.6 Normal and Abrupt Completion of Evaluation
-(Cf. ??[JLS. &#167;15.6|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#79449]??.)
-
-TO DO
-
-{anchor:15.7}
-h2. 15.7 Evaluation Order
-(Cf. ??[JLS. &#167;15.7|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#4779]??.)
-
-TO DO
-
-{anchor:15.7.1}
-h3. 15.7.1 Evaluate Left-Hand Operand First
-(Cf. ??[JLS. &#167;15.7.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#18498]??.)
-
-TO DO
-
-{anchor:15.7.2}
-h3. 15.7.2 Evaluate Operands before Operation
-(Cf. ??[JLS. &#167;15.7.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#18740]??.)
-
-TO DO
-
-{anchor:15.7.3}
-h3. 15.7.3 Evaluation Respects Parentheses and Precedence
-(Cf. ??[JLS. &#167;15.7.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23213]??.)
-
-TO DO
-
-{anchor:15.7.4}
-h3. 15.7.4 Argument Lists are Evaluated Left-to-Right
-(Cf. ??[JLS. &#167;15.7.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23789]??.)
-
-TO DO
-
-{anchor:15.7.5}
-h3. 15.7.5 Evaluation Order for Other Expressions
-(Cf. ??[JLS. &#167;15.7.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23451]??.)
-
-TO DO
-
-{anchor:15.8}
-h2. 15.8 Primary Expressions
-(Cf. ??[JLS. &#167;15.8|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#36225]??.)
-
-TO DO
-
-{anchor:15.8.1}
-h3. 15.8.1 Lexical Literals
-(Cf. ??[JLS. &#167;15.8.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#36407]??.)
-
-TO DO
-
-{anchor:15.8.2}
-h3. 15.8.2 Class Literals 
-(Cf. ??[JLS. &#167;15.8.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251530]??.)
-
-TO DO
-
-{anchor:15.8.3}
-h3. 15.8.3 <code>this </h3>
-(Cf. ??[JLS. &#167;15.8.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251519]??.)
-
-TO DO
-
-{anchor:15.8.4}
-h3. 15.8.4 Qualified <code>this</h3>
-(Cf. ??[JLS. &#167;15.8.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251603]??.)
-
-TO DO
-
-{anchor:15.8.5}
-h3. 15.8.5 Parenthesized Expressions
-(Cf. ??[JLS. &#167;15.8.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#236822]??.)
-
-TO DO
-
-{anchor:15.9}
-h2. 15.9 Class Instance Creation Expressions
-(Cf. ??[JLS. &#167;15.9|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#41147]??.)
-
-TO DO
-
-{anchor:15.9.1}
-h3. 15.9.1 Determining the Class being Instantiated
-(Cf. ??[JLS. &#167;15.9.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23745]??.)
-
-TO DO
-
-{anchor:15.9.2}
-h3. 15.9.2 Determining Enclosing Instances
-(Cf. ??[JLS. &#167;15.9.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#253028]??.)
-
-TO DO
-
-{anchor:15.9.3}
-h3. 15.9.3 Choosing the Constructor and its Arguments
-(Cf. ??[JLS. &#167;15.9.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#253097]??.)
-
-TO DO
-
-{anchor:15.9.4}
-h3. 15.9.4 Run-time Evaluation of Class Instance Creation Expressions
-(Cf. ??[JLS. &#167;15.9.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#251881]??.)
-
-TO DO
-
-{anchor:15.9.5}
-h3. 15.9.5 Anonymous Class Declarations
-(Cf. ??[JLS. &#167;15.9.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#252986]??.)
-
-TO DO
-
-{anchor:15.9.5.1}
-h4. 15.9.5.1 Anonymous Constructors
-(Cf. ??[JLS. &#167;15.9.5.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#253002]??.)
-
-TO DO
-
-{anchor:15.9.6}
-h3. 15.9.6 Example: Evaluation Order and Out-of-Memory Detection
-(Cf. ??[JLS. &#167;15.9.6|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#36687]??.)
-
-TO DO
-
-{anchor:15.10}
-h2. 15.10 Array Creation Expressions
-(Cf. ??[JLS. &#167;15.10|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#46168]??.)
-
-TO DO
-
-{anchor:15.10.1}
-h3. 15.10.1 Run-time Evaluation of Array Creation Expressions
-(Cf. ??[JLS. &#167;15.10.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23605]??.)
-
-TO DO
-
-{anchor:15.10.2}
-h3. 15.10.2 Example: Array Creation Evaluation Order
-(Cf. ??[JLS. &#167;15.10.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#264396]??.)
-
-TO DO
-
-{anchor:15.10.3}
-h3. 15.10.3 Example: Array Creation and Out-of-Memory Detection
-(Cf. ??[JLS. &#167;15.10.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#36736]??.)
-
-TO DO
-
-{anchor:15.11}
-h2. 15.11 Field Access Expressions
-(Cf. ??[JLS. &#167;15.11|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#41267]??.)
-
-TO DO
-
-{anchor:15.11.1}
-h3. 15.11.1 Field Access Using a Primary
-(Cf. ??[JLS. &#167;15.11.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#37055]??.)
-
-TO DO
-
-{anchor:15.11.2}
-h3. 15.11.2 Accessing Superclass Members using <code>super</h3>
-(Cf. ??[JLS. &#167;15.11.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20860]??.)
-
-TO DO
-
-{anchor:15.12}
-h2. 15.12 Method Invocation Expressions
-(Cf. ??[JLS. &#167;15.12|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#20448]??.)
-
-TO DO
-
-{anchor:15.12.1}
-h3. 15.12.1 Compile-Time Step 1: Determine Class or Interface to Search
-(Cf. ??[JLS. &#167;15.12.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#21692]??.)
-
-TO DO
-
-{anchor:15.12.2}
-h3. 15.12.2 Compile-Time Step 2: Determine Method Signature
-(Cf. ??[JLS. &#167;15.12.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#19915]??.)
-
-TO DO
-
-{anchor:15.12.2.1}
-h4. 15.12.2.1 Find Methods that are Applicable and Accessible
-(Cf. ??[JLS. &#167;15.12.2.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#18427]??.)
-
-TO DO
-
-{anchor:15.12.2.2}
-h4. 15.12.2.2 Choose the Most Specific Method
-(Cf. ??[JLS. &#167;15.12.2.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#272863]??.)
-
-TO DO
-
-{anchor:15.12.2.3}
-h4. 15.12.2.3 Example: Overloading Ambiguity
-(Cf. ??[JLS. &#167;15.12.2.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#21712]??.)
-
-TO DO
-
-{anchor:15.12.2.4}
-h4. 15.12.2.4 Example: Return Type Not Considered
-(Cf. ??[JLS. &#167;15.12.2.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#21727]??.)
-
-TO DO
-
-{anchor:15.12.2.5}
-h4. 15.12.2.5 Example: Compile-Time Resolution
-(Cf. ??[JLS. &#167;15.12.2.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#29775]??.)
-
-TO DO
-
-{anchor:15.12.3}
-h3. 15.12.3 Compile-Time Step 3: Is the Chosen Method Appropriate?
-(Cf. ??[JLS. &#167;15.12.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23617]??.)
-
-TO DO
-
-{anchor:15.12.4}
-h3. 15.12.4 Runtime Evaluation of Method Invocation
-(Cf. ??[JLS. &#167;15.12.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#45677]??.)
-
-TO DO
-
-{anchor:15.12.4.1}
-h4. 15.12.4.1 Compute Target Reference (If Necessary)
-(Cf. ??[JLS. &#167;15.12.4.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#38359]??.)
-
-TO DO
-
-{anchor:15.12.4.2}
-h4. 15.12.4.2 Evaluate Arguments
-(Cf. ??[JLS. &#167;15.12.4.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#21593]??.)
-
-TO DO
-
-{anchor:15.12.4.3}
-h4. 15.12.4.3 Check Accessibility of Type and Method
-(Cf. ??[JLS. &#167;15.12.4.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#45453]??.)
-
-TO DO
-
-{anchor:15.12.4.4}
-h4. 15.12.4.4 Locate Method to Invoke
-(Cf. ??[JLS. &#167;15.12.4.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#45606]??.)
-
-TO DO
-
-{anchor:15.12.4.5}
-h4. 15.12.4.5 Create Frame, Synchronize, Transfer Control
-(Cf. ??[JLS. &#167;15.12.4.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39078]??.)
-
-TO DO
-
-{anchor:15.12.4.6}
-h4. 15.12.4.6 Example: Target Reference and Static Methods
-(Cf. ??[JLS. &#167;15.12.4.6|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39122]??.)
-
-TO DO
-
-{anchor:15.12.4.7}
-h4. 15.12.4.7 Example: Evaluation Order
-(Cf. ??[JLS. &#167;15.12.4.7|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23837]??.)
-
-TO DO
-
-{anchor:15.12.4.8}
-h4. 15.12.4.8 Example: Overriding
-(Cf. ??[JLS. &#167;15.12.4.8|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#239650]??.)
-
-TO DO
-
-{anchor:15.12.4.9}
-h4. 15.12.4.9 Example: Method Invocation using super
-(Cf. ??[JLS. &#167;15.12.4.9|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#239751]??.)
-
-TO DO
-
-{anchor:15.13}
-h2. 15.13 Array Access Expressions
-(Cf. ??[JLS. &#167;15.13|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#239587]??.)
-
-TO DO
-
-{anchor:15.13.1}
-h3. 15.13.1 Runtime Evaluation of Array Access
-(Cf. ??[JLS. &#167;15.13.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23958]??.)
-
-TO DO
-
-{anchor:15.13.2}
-h3. 15.13.2 Examples: Array Access Evaluation Order
-(Cf. ??[JLS. &#167;15.13.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#23906]??.)
-
-TO DO
-
-{anchor:15.14}
-h2. 15.14 Postfix Expressions
-(Cf. ??[JLS. &#167;15.14|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#36254]??.)
-
-TO DO
-
-{anchor:15.14.1}
-h3. 15.14.1 Postfix Increment Operator ++
-(Cf. ??[JLS. &#167;15.14.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#249305]??.)
-
-TO DO
-
-{anchor:15.14.2}
-h3. 15.14.2 Postfix Decrement Operator --
-(Cf. ??[JLS. &#167;15.14.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#4987]??.)
-
-TO DO
-
-{anchor:15.15}
-h2. 15.15 Unary Operators
-(Cf. ??[JLS. &#167;15.15|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#4990]??.)
-
-TO DO
-
-{anchor:15.15.1}
-h3. 15.15.1 Prefix Increment Operator ++
-(Cf. ??[JLS. &#167;15.15.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5002]??.)
-
-TO DO
-
-{anchor:15.15.2}
-h3. 15.15.2 Prefix Decrement Operator --
-(Cf. ??[JLS. &#167;15.15.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#239136]??.)
-
-TO DO
-
-{anchor:15.15.3}
-h3. 15.15.3 Unary Plus Operator +
-(Cf. ??[JLS. &#167;15.15.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#24924]??.)
-
-TO DO
-
-{anchor:15.15.4}
-h3. 15.15.4 Unary Minus Operator -
-(Cf. ??[JLS. &#167;15.15.4|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#236345]??.)
-
-TO DO
-
-{anchor:15.15.5}
-h3. 15.15.5 Bitwise Complement Operator ~
-(Cf. ??[JLS. &#167;15.15.5|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39739]??.)
-
-TO DO
-
-{anchor:15.15.6}
-h3. 15.15.6 Logical Complement Operator !
-(Cf. ??[JLS. &#167;15.15.6|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#13350]??.)
-
-TO DO
-
-{anchor:15.16}
-h2. 15.16 Cast Expressions
-(Cf. ??[JLS. &#167;15.16|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#238146]??.)
-
-TO DO
-
-{anchor:15.17}
-h2. 15.17 Multiplicative Operators
-(Cf. ??[JLS. &#167;15.17|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#239829]??.)
-
-TO DO
-
-{anchor:15.17.1}
-h3. 15.17.1 Multiplication Operator *
-(Cf. ??[JLS. &#167;15.17.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5036]??.)
-
-TO DO
-
-{anchor:15.17.2}
-h3. 15.17.2 Division Operator /
-(Cf. ??[JLS. &#167;15.17.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5047]??.)
-
-TO DO
-
-{anchor:15.17.3}
-h3. 15.17.3 Remainder Operator %
-(Cf. ??[JLS. &#167;15.17.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#24956]??.)
-
-TO DO
-
-{anchor:15.18}
-h2. 15.18 Additive Operators
-(Cf. ??[JLS. &#167;15.18|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#15749]??.)
-
-TO DO
-
-{anchor:15.18.1}
-h3. 15.18.1 String Concatenation Operator +
-(Cf. ??[JLS. &#167;15.18.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39990]??.)
-
-TO DO
-
-{anchor:15.18.1.1}
-h4. 15.18.1.1 String Conversion
-(Cf. ??[JLS. &#167;15.18.1.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#40220]??.)
-
-TO DO
-
-{anchor:15.18.1.2}
-h4. 15.18.1.2 Optimization of String Concatenation
-(Cf. ??[JLS. &#167;15.18.1.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#40226]??.)
-
-TO DO
-
-{anchor:15.18.1.3}
-h4. 15.18.1.3 Examples of String Concatenation
-(Cf. ??[JLS. &#167;15.18.1.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#40423]??.)
-
-TO DO
-
-{anchor:15.18.2}
-h3. 15.18.2 Additive Operators (+ and -) for Numeric Types
-(Cf. ??[JLS. &#167;15.18.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#13510]??.)
-
-TO DO
-
-{anchor:15.19}
-h2. 15.19 Shift Operators
-(Cf. ??[JLS. &#167;15.19|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5121]??.)
-
-TO DO
-
-{anchor:15.20}
-h2. 15.20 Relational Operators
-(Cf. ??[JLS. &#167;15.20|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#40641]??.)
-
-TO DO
-
-{anchor:15.20.1}
-h3. 15.20.1 Numerical Comparison Operators &lt;, &lt;=, &gt;, and &gt;= 
-(Cf. ??[JLS. &#167;15.20.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#153654]??.)
-
-TO DO
-
-{anchor:15.20.2}
-h3. 15.20.2 Type Comparison Operator instanceof
-(Cf. ??[JLS. &#167;15.20.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#80291]??.)
-
-TO DO
-
-{anchor:15.21}
-h2. 15.21 Equality Operators
-(Cf. ??[JLS. &#167;15.21|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5192]??.)
-
-TO DO
-
-{anchor:15.21.1}
-h3. 15.21.1 Numerical Equality Operators ==&#32;and != 
-(Cf. ??[JLS. &#167;15.21.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5198]??.)
-
-TO DO
-
-{anchor:15.21.2}
-h3. 15.21.2 Boolean Equality Operators ==&#32;and != 
-(Cf. ??[JLS. &#167;15.21.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#80389]??.)
-
-TO DO
-
-{anchor:15.21.3}
-h3. 15.21.3 Reference Equality Operators ==&#32;and !=
-(Cf. ??[JLS. &#167;15.21.3|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#236163]??.)
-
-TO DO
-
-{anchor:15.22}
-h2. 15.22 Bitwise and Logical Operators
-(Cf. ??[JLS. &#167;15.22|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228]??.)
-
-TO DO
-
-{anchor:15.22.1}
-h3. 15.22.1 Integer Bitwise Operators &amp;, ^, and |
-(Cf. ??[JLS. &#167;15.22.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5233]??.)
-
-TO DO
-
-{anchor:15.22.2}
-h3. 15.22.2 Boolean Logical Operators &amp;, ^, and |
-(Cf. ??[JLS. &#167;15.22.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5242]??.)
-
-TO DO
-
-{anchor:15.23}
-h2. 15.23 Conditional-And Operator &amp;&amp;
-(Cf. ??[JLS. &#167;15.23|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5247]??.)
-
-TO DO
-
-{anchor:15.24}
-h2. 15.24 Conditional-Or Operator ||
-(Cf. ??[JLS. &#167;15.24|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#54532]??.)
-
-TO DO
-
-{anchor:15.25}
-h2. 15.25 Conditional Operator ?&#32;:
-(Cf. ??[JLS. &#167;15.25|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#290293]??.)
-
-TO DO
-
-{anchor:15.26}
-h2. 15.26 Assignment Operators
-(Cf. ??[JLS. &#167;15.26|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5281]??.)
-
-TO DO
-
-{anchor:15.26.1}
-h3. 15.26.1 Simple Assignment Operator =
-(Cf. ??[JLS. &#167;15.26.1|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5295]??.)
-
-TO DO
-
-{anchor:15.26.2}
-h3. 15.26.2 Compound Assignment Operators
-(Cf. ??[JLS. &#167;15.26.2|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5304]??.)
-
-TO DO
-
-{anchor:15.27}
-h2. 15.27 Expression
-(Cf. ??[JLS. &#167;15.27|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5309]??.)
-
-TO DO
-
-{anchor:15.28}
-h2. 15.28 Constant Expression
-(Cf. ??[JLS. &#167;15.28|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#236323]??.)
-
-TO DO
-
-----
-Specification [Table of Contents|Chapter 00 Contents].
-
-The organization of this chapter parallels the chapter on [Expressions|http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html] in the [Java Language Specification (second edition)|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].
-
-The original of this specification is at [http://docs.codehaus.org/display/GroovyJSR].
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/Chapter18Syntax b/groovy/jsr/spec/src/wiki/Chapter18Syntax
deleted file mode 100644
index dc986f8..0000000
--- a/groovy/jsr/spec/src/wiki/Chapter18Syntax
+++ /dev/null
@@ -1,11 +0,0 @@
-*Chapter 18*
-
-h1. Syntax
-This is the current JSR [Grammar|GroovyRecognizer.html] and [Lexer|GroovyLexer.html]
-
-Automatic generation from [antlr|http://antlr.org]
-
-h1. Diagrams
-[Here|http://groovy.codehaus.org/jsr/spec/grammar/] are syntax diagrams based upon the current groovy.g
-
-Diagram generation using [syndiag|http://syndiag.javanicus.com]
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/JLSDifferences b/groovy/jsr/spec/src/wiki/JLSDifferences
deleted file mode 100644
index 1a87fae..0000000
--- a/groovy/jsr/spec/src/wiki/JLSDifferences
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a systematic account of the differences between Java and Groovy, organized as a set of annotations to the [Java Language Specification|http://java.sun.com/docs/books/jls/second_edition/html/j.title.doc.html].  Every chapter and section of the JLS has a corresponding chapter and section (with the same number) in this account.
-
-_(This is an experiment under construction!  --jrose)_
-
-{children:all=true}
\ No newline at end of file
diff --git a/groovy/jsr/spec/src/wiki/biscuit.css b/groovy/jsr/spec/src/wiki/biscuit.css
deleted file mode 100644
index e3fcd7b..0000000
--- a/groovy/jsr/spec/src/wiki/biscuit.css
+++ /dev/null
@@ -1,53 +0,0 @@
-div.container{width:98%; margin: 1%;}
-table#table1{text-align: center; margin-left: auto; margin-right: auto; width: 600px;}
-tr.td{text-align:left;}
-
-.wikitable, .wiki-table {
-    margin: 5px;
-    border-collapse: collapse;
-}
-.wikitable td, .wikitable th, .wiki-table td, .wiki-table th {
-    border: 1px solid #ccc;
-    padding: 3px 4px 3px 4px;
-}
-.wikitable th, .wiki-table th {
-    background: #f0f0f0;
-    text-align: center;
-}
-BODY,td,tr,table                {color: #343434; font-size: 17px; font-family: baskerville,times}
-TEXTAREA            {color: #343434; font-size: 11px; font-family: monospace}
-.heading-1	    {color: #343434; font-size: 13px; font-family: tahoma,arial,helvetica,sans-serif}
-.heading-1-1	    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif}
-.tb		    {color: #343434; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.wtb		    {color: #FFFFFF; font-size: 11px; font-family: tahoma,arial,helvetica,sans-serif; font-weight: bold}
-.bold               {FONT-WEIGHT: bold}
-LI                  {margin-left: -10px; margin-right: 12px}
-.title 		    {font-size: 11px; font-family: arial,helvetica,sans-serif}
-.code               {padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #ccccff; border-bottom: 1px solid #ccccff; color: #555577; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px}
-.code-alt           {background-color: #8F7771; padding-top: 1px; padding-bottom: 2px; padding-left: 24px; border-top: 1px solid #FFFFFF; border-bottom: 1px solid #FFFFFF; color: #FFFFFF; margin-bottom: 6px; font-family: tahoma, arial; font-weight: bold; font-size: 11px; text-transform: lowercase}
-.rv                 {font-size: 11px; font-family: tahoma, arial; font-weight: bold; color: #FFFFFF }
-.rby                {font-size: 11px; font-family: tahoma, arial; color: #685049; padding-bottom: 8px }
-.java-keyword       {color: #000080}
-.java-object        {color: #660E7A}
-.java-quote         {color: #008000}
-A	 	    {FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover 	    {FONT-WEIGHT: bold; TEXT-DECORATION: underline}
-A:link.dkblue       {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.dkblue    {COLOR: #1144AA; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.dkblue 	    {COLOR: #1144AA; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.white 	    {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.white     {COLOR: #FFFFFF; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.white 	    {COLOR: #FFFFFF; TEXT-DECORATION: underline}
-A:link.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:visited.rev	    {COLOR: #65532B; FONT-WEIGHT: bold; FONT-FAMILY: verdana,arial; FONT-SIZE: 10px; TEXT-DECORATION: none}
-A:hover.rev	    {COLOR: #65532B; TEXT-DECORATION: underline}
-A:link.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.can	    {COLOR: #000000; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.can	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-A:link.canlt 	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:visited.canlt	    {COLOR: #555577; FONT-WEIGHT: bold; TEXT-DECORATION: none}
-A:hover.canlt	    {COLOR: #5500AA; TEXT-DECORATION: underline}
-
diff --git a/groovy/jsr/spec/src/wiki/groovy-logo.png b/groovy/jsr/spec/src/wiki/groovy-logo.png
deleted file mode 100644
index 54af4c1..0000000
--- a/groovy/jsr/spec/src/wiki/groovy-logo.png
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/spec/src/wiki/index b/groovy/jsr/spec/src/wiki/index
deleted file mode 100644
index c6931f4..0000000
--- a/groovy/jsr/spec/src/wiki/index
+++ /dev/null
@@ -1,25 +0,0 @@
-*Groovy Specification*
-
-h1. Table of Contents
-
-* Chapter 1: [Introduction|Chapter01Introduction.html]
-* Chapter 2: Grammars
-* Chapter 3: [Lexical Structure|Chapter03Lexical.html]
-* Chapter 4: [Types, Values, and Variables|Chapter04Types.html]
-* Chapter 5: [Conversions and Promotions|Chapter05Conversions.html]
-* Chapter 6: [Names|Chapter06Names.html]
-* Chapter 7: Packages
-* Chapter 8: Classes
-* Chapter 9: Interfaces
-* Chapter 10: Arrays
-* Chapter 11: Exceptions
-* Chapter 12: Execution
-* Chapter 13: Binary Compatibility
-* Chapter 14: [Blocks and Statements|Chapter14Blocks.html]
-* Chapter 15: [Expressions|Chapter15Expressions.html]
-* Chapter 16: Definite Assignment
-* Chapter 17: Threads and Locks
-* Chapter 18: [Syntax|Chapter18Syntax.html]
-* Notes for spec. developers.
-* [Java Language Specification Differences|JLSDifferences.html]
-* [Test Compatibility Kit|../tck/index.html]
diff --git a/groovy/jsr/tck/README.txt b/groovy/jsr/tck/README.txt
deleted file mode 100644
index ea7e4cf..0000000
--- a/groovy/jsr/tck/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Contains the Test Compatibility Kit for the Groovy language
-
diff --git a/groovy/jsr/tck/build.xml b/groovy/jsr/tck/build.xml
deleted file mode 100644
index d0e86ba..0000000
--- a/groovy/jsr/tck/build.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0"?>
-<project name="tck" default="default">
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   compile settings                -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="build.debug" value="on"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="src.dir" value="src"/>
-  <property name="build.dir" value="build"/>
-  <property name="build.classes.dir" value="${build.dir}/classes"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="lib.dir" value="lib"/>
-  <property name="standalone.working.dir" value="temp"/>
-  <property name="standalone.dir" value="standalone"/>
-
-  <!-- javadoc properties -->
-  <property name="javadoc.dir" value="doc"/>
-  <property name="javadoc.packages" value="org.codehaus.groovy.*"/>
-
-  <!-- junit properties -->
-  <property name="junit.style.dir" value="styles"/>
-  <property name="testcase.src.dir" value="test"/>
-  <property name="generated.test.src.dir"	value="gentest"/>
-  <property name="test.lib.dir" value="testlib"/>
-  <property name="test.classes.dir" value="${build.dir}/test/classes"/>
-  <property name="test.reports.dir" value="reports"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                     datatypes                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <path id="compile.classpath">
-    <pathelement location="${build.classes.dir}"/>
-    <fileset dir="${lib.dir}">
-      <include name="**/*.jar" />
-      <include name="**/*.zip" />
-    </fileset>
-      <!-- TODO limit exposure to JSR parser during compliation (needed by TestGeneratorHelper classes)-->
-      <fileset dir="${test.lib.dir}">
-        <include name="**/*.jar"/>
-      </fileset>
-
-  </path>
-  
-  <!-- intentionally doesn't include the compile classpath -->
-  <path id="test.classpath">
-    <pathelement location="${test.classes.dir}"/>
-    <fileset dir="${test.lib.dir}">
-      <include name="**/*.jar"/>
-    </fileset>
-
-    <!-- TODO limit exposure to TCK helper classes -->
-    <pathelement location="${build.classes.dir}"/>
-
-  </path>
-
-  <path id="my.classpath">
-    <fileset dir="${standalone.dir}">
-      <include name="**/*.jar" />
-    </fileset>
-  </path>
-
-  <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpathref="compile.classpath"/>
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="pretty-test" 
-          description="default: run the groovy test suite"
-  />
-  
-  <target name="all" 
-          depends="test,dist" 
-          description="build and test everything"
-  />
-
-  <target name="clean" description="remove all built files">
-    <delete dir="${javadoc.dir}" />
-    <delete dir="${build.dir}" />
-    <delete dir="${dist.dir}" />
-    <delete dir="${generated.test.src.dir}" />
-    <delete dir="${standalone.dir}" />
-    <delete dir="${standalone.working.dir}" />
-    <delete dir="${test.reports.dir}" />
-  </target>
-
-  <target name="dist" 
-          depends="compile" 
-          description="create distributables (jars etc)">
-    <mkdir dir="${dist.dir}" />
-    <jar jarfile="${dist.dir}/tck.jar" 
-         manifest="${src.dir}/manifest.txt">
-      <fileset dir="${build.classes.dir}"/>
-    </jar>
-  </target>
-
-    <target name="standalone" depends="dist" description="merge all jars together">
-        <mkdir dir="${standalone.working.dir}"/>
-        <unzip dest="${standalone.working.dir}">
-            <fileset dir="${lib.dir}">
-                <include name="*.jar"/>
-            </fileset>
-            <fileset dir="${dist.dir}">
-                <include name="*.jar"/>
-            </fileset>
-        </unzip>
-        <mkdir dir="${standalone.dir}"/>
-        <jar jarfile="${standalone.dir}/tck.jar"
-            manifest="${src.dir}/manifest.txt">
-            <fileset dir="${standalone.working.dir}"/>
-        </jar>
-        <!--<delete dir="${standalone.working.dir}"/>-->
-
-    </target>
-
-  <target name="docs" depends="init" description="generate documentation">
-    <mkdir dir="${javadoc.dir}" />
-    <javadoc sourcepath="${src.dir}" 
-             destdir="${javadoc.dir}" 
-             packagenames="${javadoc.packages}"
-             use="true"
-             windowtitle="tck"
-             private="true"/>
-  </target>
-
-  <target name="run" depends="compile" description="compile and run">
-    <java classname="org.codehaus.groovy.tck.GenerateTestCases" 
-          fork="yes" 
-          classpathref="compile.classpath"/>
-  </target>
-
-  <target name="test"
-          depends="test-compile" 
-          description="run all test cases">
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="plain" usefile="false"/>
-      <batchtest>
-        <fileset dir="${test.classes.dir}">
-          <include name="**/*Test.class" />
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-        
-  <target name="pretty-test" 
-          depends="test-compile" 
-          description="HTML output of test cases">
-    <mkdir dir="${test.reports.dir}"/>
-    <junit haltonfailure="false" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="xml" usefile="true"/>
-
-      <batchtest todir="${test.reports.dir}">
-        <fileset dir="${test.classes.dir}">
-            <include name="**/*Test.class" /> 
-        </fileset>
-      </batchtest>
-
-    </junit>
-
-    <junitreport todir="${test.reports.dir}">
-      <fileset dir="${test.reports.dir}">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report format="frames" styledir="${junit.style.dir}" todir="${test.reports.dir}"/>
-    </junitreport>
-    <echo>
-+-------------------------+
-| open reports/index.html |
-+-------------------------+
-</echo>
-  </target>
-
-
-
-  <target name="compile" depends="init" description="compile java and groovy sources">
-    <mkdir dir="${build.classes.dir}" />
-    <groovyc destdir="${build.classes.dir}"
-             srcdir="${src.dir}"
-             listfiles="true">
-        <classpath refid="test.classpath"/>
-    </groovyc>
-    <javac srcdir="${src.dir}"
-           destdir="${build.classes.dir}"
-           classpathref="compile.classpath"
-           debug="${build.debug}"
-           deprecation="on"/>
-  </target>
-
-    <target name="generate" depends="standalone" description="generate test cases">
-      <mkdir dir="${generated.test.src.dir}" />
-      <taskdef name="gentests" classname="org.codehaus.groovy.tck.GenerateTestCases" classpathref="my.classpath"/>
-
-      <gentests destdir="${generated.test.src.dir}"
-                srcdir="${testcase.src.dir}"
-                listfiles="true"/>
-    </target>
-
-  <target name="test-compile" depends="generate" description="compile tests">
-    <mkdir dir="${test.classes.dir}" />
-    <javac srcdir="${generated.test.src.dir}"
-           destdir="${test.classes.dir}" 
-           classpathref="test.classpath" 
-           debug="${build.debug}" 
-           deprecation="on">
-    </javac>
-  </target>
-
-  <target name="init">
-    <tstamp />
-    <mkdir dir="${lib.dir}"/>
-  </target>
-       
-</project>
diff --git a/groovy/jsr/tck/lib/groovy-all-1.0-beta-8.jar b/groovy/jsr/tck/lib/groovy-all-1.0-beta-8.jar
deleted file mode 100644
index 69231a0..0000000
--- a/groovy/jsr/tck/lib/groovy-all-1.0-beta-8.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/jsr/tck/src/manifest.txt b/groovy/jsr/tck/src/manifest.txt
deleted file mode 100644
index 2dd0636..0000000
--- a/groovy/jsr/tck/src/manifest.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: org.codehaus.groovy.tck.GenerateTestCases
diff --git a/groovy/jsr/tck/src/org/codehaus/groovy/tck/BatchGenerate.groovy b/groovy/jsr/tck/src/org/codehaus/groovy/tck/BatchGenerate.groovy
deleted file mode 100644
index 43e6bef..0000000
--- a/groovy/jsr/tck/src/org/codehaus/groovy/tck/BatchGenerate.groovy
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * @author Jeremy Rayner
- */
-package org.codehaus.groovy.tck
-
-import java.io.File;
-
-class BatchGenerate {
-    property generator;
-    property srcDirPath;
-    property targetDir;
-    property srcEncoding;
-    property srcs;
-    property spew
-
-    public BatchGenerate() {
-        generator = new TestGenerator();
-        verbose = false;
-    }
-
-    public void setSrcdirPath(String pathName) {
-        if (spew) {println("srcDir:${pathName}") }
-        srcDirPath = pathName;
-    }
-
-    public void setTargetDirectory(File destDir) {
-        if (spew) { println("destDir:${destDir}") }
-        targetDir = destDir;
-    }
-
-    public void setSourceEncoding(String encoding) {
-        if (spew) { println("encoding:${encoding}") }
-        srcEncoding = encoding;
-    }
-
-    public void addSources( File[] compileList ) {
-        if (spew) { println("compileList:${compileList}") }
-        srcs = compileList
-    }
-
-    public void setVerbose(boolean verbose) {
-        spew = verbose
-    }
-
-    public void compile() {
-        if (spew) { println("compile()") }
-
-
-        for (src in srcs) {
-
-            // mung the ${test.src.dir}/gls/ch14/s4 path into ${dest.dir}/gls/ch14/s4
-            // first determine the relative path e.g. gls/ch14/s4
-            relativeSrcFilePathAndName = src.getAbsolutePath().substring(srcDirPath.length() + 1)
-            relativeSrcFileNameStartIndex = relativeSrcFilePathAndName.lastIndexOf(File.separator);
-            relativeOutputPath = ""
-            if (relativeSrcFileNameStartIndex >= 0) {
-                relativeOutputPath = relativeSrcFilePathAndName.substring(0,relativeSrcFileNameStartIndex);
-            }
-
-            // then determine the absolute output path
-            ghostOutputFile = new File(targetDir, relativeSrcFilePathAndName)
-            ghostOutputFilePath = ghostOutputFile.getAbsolutePath()
-            fileNameStartIndex = ghostOutputFilePath.lastIndexOf(File.separator);
-            realOutputPath = ghostOutputFilePath.substring(0,fileNameStartIndex);
-
-            // mkdir if doesn't exist
-            File directory = new File(realOutputPath)
-            if (directory != null && !directory.exists()) {
-                directory.mkdirs();
-            }
-
-            // generate a suitable java file to put there
-            fileStem = src.name.tokenize(".")[0]
-            targetFileName = "${fileStem}Test.java"
-            anOutputFile = new File(realOutputPath, targetFileName)
-
-            System.out.println("generating " + targetFileName)
-            someOutputText = generator.generate(relativeOutputPath, targetDir, src.name,src.text);
-            if (someOutputText != null && someOutputText != "") {
-                anOutputFile.write(someOutputText);
-            }
-        }
-    }
-}
diff --git a/groovy/jsr/tck/src/org/codehaus/groovy/tck/ClassicGroovyTestGeneratorHelper.java b/groovy/jsr/tck/src/org/codehaus/groovy/tck/ClassicGroovyTestGeneratorHelper.java
deleted file mode 100644
index 727fe63..0000000
--- a/groovy/jsr/tck/src/org/codehaus/groovy/tck/ClassicGroovyTestGeneratorHelper.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.codehaus.groovy.tck;
-
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.ArrayList;
-
-// JSR parser
-// @todo - refactor pulling generic parser interface up
-import org.codehaus.groovy.antlr.parser.GroovyLexer;
-import org.codehaus.groovy.antlr.parser.GroovyRecognizer;
-
-// codehaus reference implementation usage
-// @todo - remove classic references from the TCK
-import org.codehaus.groovy.control.CompilerConfiguration;
-import groovy.lang.GroovyShell;
-import antlr.RecognitionException;
-
-/** Helper methods for generated TCK test case using new JSR parser and classic groovy AST and evaluation */
-public class ClassicGroovyTestGeneratorHelper implements TestGeneratorHelper {
-
-    /** evaluate the source text against the classic AST with the JSR parser implementation*/
-    public void evaluate(String theSrcText, String testName) throws Exception {
-        parse(theSrcText, testName); // fail early with a direct message if possible')
-        GroovyShell groovy = new GroovyShell(new CompilerConfiguration());
-        groovy.run(theSrcText, "main", new ArrayList());
-        //@todo - work out how to ensure test failures throw exceptions
-    }
-
-    /** run the JSR parser implementation over the supplied source text*/
-    public void parse(String theSrcText, String testName) throws Exception {
-        System.out.println("-------------------------------");
-        System.out.println("  " + testName);
-        System.out.println("-------------------------------");
-        try {
-            Reader reader = new BufferedReader(new StringReader(theSrcText));
-            GroovyRecognizer recognizer = GroovyRecognizer.make(reader);
-            recognizer.compilationUnit();
-            System.out.println(decorateWithLineNumbers(theSrcText));
-
-        } catch (RecognitionException parseException) {
-            System.out.println(decorateWithLineNumbersAndErrorMessage(theSrcText,parseException));
-            throw parseException;
-        }
-        System.out.println("-------------------------------");
-
-    }
-
-    private String decorateWithLineNumbersAndErrorMessage(String theSrcText, RecognitionException parseException) {
-        try {
-            BufferedReader reader = new BufferedReader(new StringReader(theSrcText));
-            String line = null;
-            StringBuffer numberedSrcTextBuffer = new StringBuffer();
-            int lineNum = 1;
-            while ((line = reader.readLine() ) != null) {
-                numberedSrcTextBuffer.append(lineNum);
-                numberedSrcTextBuffer.append("\t");
-                numberedSrcTextBuffer.append(line);
-                numberedSrcTextBuffer.append(lineSep);
-
-                if (parseException != null) {
-                    if (lineNum == parseException.getLine()) {
-                        StringBuffer padding = new StringBuffer("\t");
-                        for (int col=1; col<parseException.getColumn();col++) {
-                            padding.append(" ");
-                        }
-                        numberedSrcTextBuffer.append(padding);
-                        numberedSrcTextBuffer.append("^");
-                        numberedSrcTextBuffer.append(lineSep);
-                        numberedSrcTextBuffer.append("ERROR:");
-                        numberedSrcTextBuffer.append(lineSep);
-                        numberedSrcTextBuffer.append(parseException.getMessage());
-                        numberedSrcTextBuffer.append(lineSep);
-                        numberedSrcTextBuffer.append(lineSep);
-                    }
-                }
-
-                lineNum++;
-
-            }
-            theSrcText = numberedSrcTextBuffer.toString();
-        } catch (IOException e) {
-            //ignore
-        }
-        return theSrcText;
-    }
-
-    private String decorateWithLineNumbers(String theSrcText) {
-        return decorateWithLineNumbersAndErrorMessage(theSrcText,null);
-    }
-
-    protected String lineSep = System.getProperty("line.separator");
-}
diff --git a/groovy/jsr/tck/src/org/codehaus/groovy/tck/GenerateTestCases.java b/groovy/jsr/tck/src/org/codehaus/groovy/tck/GenerateTestCases.java
deleted file mode 100644
index 9456fbf..0000000
--- a/groovy/jsr/tck/src/org/codehaus/groovy/tck/GenerateTestCases.java
+++ /dev/null
@@ -1,387 +0,0 @@
-/**
- * @author Jeremy Rayner
- */
-package org.codehaus.groovy.tck;
-
-import java.io.*;
-import java.nio.charset.Charset;
-
-import org.apache.tools.ant.*;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.*;
-import org.apache.tools.ant.util.*;
-
-/**
- * Generates test files. This task can take the following
- * arguments:
- * <ul>
- * <li>sourcedir
- * <li>destdir
- * </ul>
- * Both are required.
- * <p>
- * When this task executes, it will recursively scan the sourcedir
- * looking for source files to expand into testcases. This task makes its
- * generation decision based on timestamp.
- *
- * Based heavily on the Javac implementation in Ant
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-public class GenerateTestCases extends MatchingTask {
-
-    private BatchGenerate batchGenerate = new BatchGenerate();
-    private Path src;
-    private File destDir;
-    private Path compileClasspath;
-    private Path compileSourcepath;
-    private String encoding;
-
-    protected boolean failOnError = true;
-    protected boolean listFiles = false;
-    protected File[] compileList = new File[0];
-
-    public GenerateTestCases() {
-    }
-
-    /**
-     * Adds a path for source compilation.
-     *
-     * @return a nested src element.
-     */
-    public Path createSrc() {
-        if (src == null) {
-            src = new Path(getProject());
-        }
-        return src.createPath();
-    }
-
-    /**
-     * Recreate src.
-     *
-     * @return a nested src element.
-     */
-    protected Path recreateSrc() {
-        src = null;
-        return createSrc();
-    }
-
-    /**
-     * Set the source directories to find the source Java files.
-     * @param srcDir the source directories as a path
-     */
-    public void setSrcdir(Path srcDir) {
-        if (src == null) {
-            src = srcDir;
-        }
-        else {
-            src.append(srcDir);
-        }
-        batchGenerate.setSrcdirPath(src.toString());
-    }
-
-    /**
-     * Gets the source dirs to find the source java files.
-     * @return the source directorys as a path
-     */
-    public Path getSrcdir() {
-        return src;
-    }
-
-    /**
-     * Set the destination directory into which the Java source
-     * files should be compiled.
-     * @param destDir the destination director
-     */
-    public void setDestdir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    /**
-     * Enable verbose compiling which will display which files
-     * are being compiled
-     * @param verbose
-     */
-    public void setVerbose(boolean verbose) {
-        batchGenerate.setVerbose( verbose );
-    }
-
-    /**
-     * Gets the destination directory into which the java source files
-     * should be compiled.
-     * @return the destination directory
-     */
-    public File getDestdir() {
-        return destDir;
-    }
-
-    /**
-     * Set the sourcepath to be used for this compilation.
-     * @param sourcepath the source path
-     */
-    public void setSourcepath(Path sourcepath) {
-        if (compileSourcepath == null) {
-            compileSourcepath = sourcepath;
-        }
-        else {
-            compileSourcepath.append(sourcepath);
-        }
-    }
-
-    /**
-     * Gets the sourcepath to be used for this compilation.
-     * @return the source path
-     */
-    public Path getSourcepath() {
-        return compileSourcepath;
-    }
-
-    /**
-     * Adds a path to sourcepath.
-     * @return a sourcepath to be configured
-     */
-    public Path createSourcepath() {
-        if (compileSourcepath == null) {
-            compileSourcepath = new Path(getProject());
-        }
-        return compileSourcepath.createPath();
-    }
-
-    /**
-     * Adds a reference to a source path defined elsewhere.
-     * @param r a reference to a source path
-     */
-    public void setSourcepathRef(Reference r) {
-        createSourcepath().setRefid(r);
-    }
-
-    /**
-     * Set the classpath to be used for this compilation.
-     *
-     * @param classpath an Ant Path object containing the compilation classpath.
-     */
-    public void setClasspath(Path classpath) {
-        if (compileClasspath == null) {
-            compileClasspath = classpath;
-        }
-        else {
-            compileClasspath.append(classpath);
-        }
-    }
-
-    /**
-     * Gets the classpath to be used for this compilation.
-     * @return the class path
-     */
-    public Path getClasspath() {
-        return compileClasspath;
-    }
-
-    /**
-     * Adds a path to the classpath.
-     * @return a class path to be configured
-     */
-    public Path createClasspath() {
-        if (compileClasspath == null) {
-            compileClasspath = new Path(getProject());
-        }
-        return compileClasspath.createPath();
-    }
-
-    /**
-     * Adds a reference to a classpath defined elsewhere.
-     * @param r a reference to a classpath
-     */
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-    public String createEncoding() {
-        if (encoding == null) {
-            encoding = System.getProperty("file.encoding");
-        }
-        return encoding;
-    }
-
-    public void setEncoding(String encoding) {
-        this.encoding = encoding;
-    }
-
-    public String getEncoding() {
-        return encoding;
-    }
-
-    /**
-     * If true, list the source files being handed off to the compiler.
-     * @param list if true list the source files
-     */
-    public void setListfiles(boolean list) {
-        listFiles = list;
-    }
-
-    /**
-     * Get the listfiles flag.
-     * @return the listfiles flag
-     */
-    public boolean getListfiles() {
-        return listFiles;
-    }
-
-    /**
-     * Indicates whether the build will continue
-     * even if there are compilation errors; defaults to true.
-     * @param fail if true halt the build on failure
-     */
-    public void setFailonerror(boolean fail) {
-        failOnError = fail;
-    }
-
-    /**
-     * @param proceed inverse of failoferror
-     */
-    public void setProceed(boolean proceed) {
-        failOnError = !proceed;
-    }
-
-    /**
-     * Gets the failonerror flag.
-     * @return the failonerror flag
-     */
-    public boolean getFailonerror() {
-        return failOnError;
-    }
-
-    /**
-     * Executes the task.
-     * @exception BuildException if an error occurs
-     */
-    public void execute() throws BuildException {
-        checkParameters();
-        resetFileLists();
-
-        // scan source directories and dest directory to build up
-        // compile lists
-        String[] list = src.list();
-        for (int i = 0; i < list.length; i++) {
-            File srcDir = getProject().resolveFile(list[i]);
-            if (!srcDir.exists()) {
-                throw new BuildException("srcdir \"" + srcDir.getPath() + "\" does not exist!", getLocation());
-            }
-
-            DirectoryScanner ds = this.getDirectoryScanner(srcDir);
-            String[] files = ds.getIncludedFiles();
-
-            scanDir(srcDir, destDir != null ? destDir : srcDir, files);
-        }
-
-        compile();
-    }
-
-    /**
-     * Clear the list of files to be compiled and copied..
-     */
-    protected void resetFileLists() {
-        compileList = new File[0];
-    }
-
-    /**
-     * Scans the directory looking for source files to be compiled.
-     * The results are returned in the class variable compileList
-     *
-     * @param srcDir   The source directory
-     * @param destDir  The destination directory
-     * @param files    An array of filenames
-     */
-    protected void scanDir(File srcDir, File destDir, String[] files) {
-        GlobPatternMapper m = new GlobPatternMapper();
-        m.setFrom("*");
-        m.setTo("*.html");
-        SourceFileScanner sfs = new SourceFileScanner(this);
-        File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
-
-        if (newFiles.length > 0) {
-            File[] newCompileList = new File[compileList.length + newFiles.length];
-            System.arraycopy(compileList, 0, newCompileList, 0, compileList.length);
-            System.arraycopy(newFiles, 0, newCompileList, compileList.length, newFiles.length);
-            compileList = newCompileList;
-        }
-    }
-
-    /**
-     * Gets the list of files to be compiled.
-     * @return the list of files as an array
-     */
-    public File[] getFileList() {
-        return compileList;
-    }
-
-    protected void checkParameters() throws BuildException {
-        if (src == null) {
-            throw new BuildException("srcdir attribute must be set!", getLocation());
-        }
-        if (src.size() == 0) {
-            throw new BuildException("srcdir attribute must be set!", getLocation());
-        }
-
-        if (destDir != null && !destDir.isDirectory()) {
-            throw new BuildException(
-                "destination directory \"" + destDir + "\" does not exist " + "or is not a directory",
-                getLocation());
-        }
-
-        if (encoding != null && !Charset.isSupported(encoding)) {
-            throw new BuildException("encoding \"\" not supported");
-        }
-    }
-
-    protected void compile() {
-        if (compileList.length > 0) {
-            log(
-                "Generating Tests "
-                    + compileList.length
-                    + " source file"
-                    + (compileList.length == 1 ? "" : "s")
-                    + (destDir != null ? " to " + destDir : ""));
-
-            if (listFiles) {
-                for (int i = 0; i < compileList.length; i++) {
-                    String filename = compileList[i].getAbsolutePath();
-                    log(filename);
-                }
-            }
-
-            try {
-                Path classpath = getClasspath();
-                if (classpath != null) {
-                    //@todo - is this useful?
-                    //batchOfBiscuits.setClasspath(classpath.toString());
-                }
-                batchGenerate.setTargetDirectory(destDir);
-
-                if (encoding != null) {
-                    batchGenerate.setSourceEncoding(encoding);
-                }
-
-                batchGenerate.addSources( compileList );
-                batchGenerate.compile( );
-            }
-            catch (Exception e) {
-
-                StringWriter writer = new StringWriter();
-                //@todo --
-                e.printStackTrace();
-                //new ErrorReporter( e, false ).write( new PrintWriter(writer) );
-                String message = writer.toString();
-
-                if (failOnError) {
-                    throw new BuildException(message, e, getLocation());
-                }
-                else {
-                    log(message, Project.MSG_ERR);
-                }
-
-            }
-        }
-    }
-}
diff --git a/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGenerator.groovy b/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGenerator.groovy
deleted file mode 100644
index f6a6ede..0000000
--- a/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGenerator.groovy
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * This will take a groovy test file and turn it into a Java TestCase
- * @author Jeremy Rayner
- */
-package org.codehaus.groovy.tck
-import java.io.*;
-class TestGenerator{
-    public String generate(realOutputPath, targetDir, srcName,srcText) {
-//        System.out.println('single \\\\')
-//        System.out.println("double \\\\")
-        srcText = srcText.replaceAll('\\\\','\\\\\\\\') // need to escape a slash with slash slash
-
-        resultWriter = new StringWriter()
-        result = new PrintWriter(resultWriter)
-
-        fileName = srcName
-        fileStem = fileName.tokenize(".")[0]
-
-        comments = scrape(srcText," * ",".") // Take the first javadoc sentence, if it exists, for use as method name
-        if (comments == null || comments[0] == null) {comments = [""]}
-        behaviourDescription = comments[0].trim()
-
-        if ("" != realOutputPath) {
-            realOutputPackage = ''
-            if (File.separator != '\\')
-                realOutputPackage = realOutputPath.replaceAll(File.separator,'.')
-            else
-                realOutputPackage = realOutputPath.replaceAll('\\\\','.')
-            result.println("package ${realOutputPackage};")
-        }
-        result.println("import junit.framework.*;")
-        result.println("import org.codehaus.groovy.tck.*;")
-
-        result.println("public class ${fileStem}Test extends TestCase {")
-
-        //methodName = turnSentenceIntoJavaName(behaviourDescription)
-        methodName = ""
-        methodName = "test${methodName}"
-
-        // test for the source 'as is'
-        printCommonTestMethodStart(result, "${methodName}Pass",srcText)
-        result.println('        helper.evaluate(srcBuffer.toString(),"' + "${methodName}Pass" + '");')
-        result.println("    }")
-
-        // test for each of the '@pass' alternatives
-        passAlternatives = generateAlternatives(srcText,"@pass")
-        passAlternatives.eachWithIndex{anAlternative,i|
-            printCommonTestMethodStart(result, "${methodName}Pass${i+1}",anAlternative[0]);
-            result.println('        helper.evaluate(srcBuffer.toString(),"' + "${methodName}Pass${i+1}" + '");')
-            result.println("    }")
-        }
-
-        // test for each of the '@fail:parse' alternatives
-        failureToParseAlternatives = generateAlternatives(srcText,"@fail:parse")
-        failureToParseAlternatives.eachWithIndex{anAlternative,i|
-            printCommonTestMethodStart(result, "${methodName}FailParse${i+1}",anAlternative[0]);
-            result.println("        try {")
-            result.println('            helper.parse(srcBuffer.toString(),"' + "${methodName}FailParse${i+1}" + '");')
-
-
-            result.println('            fail("This line did not fail to parse: ' + anAlternative[1] + '");')
-            result.println("        } catch (Exception e) {")
-            result.println("            // ignore an exception as that is what we're hoping for in this case.")
-            result.println("        }")
-            result.println("    }")
-        }
-
-        // test for each of the '@fail' alternatives, i.e. without being followed by a colon
-        failureAlternatives = generateAlternatives(srcText,"@fail(?!:)")
-        failureAlternatives.eachWithIndex{anAlternative,i|
-            printCommonTestMethodStart(result, "${methodName}Fail${i+1}",anAlternative[0]);
-            result.println("        try {")
-            result.println('            helper.evaluate(srcBuffer.toString(),"' + "${methodName}Fail${i+1}" + '");')
-            result.println('            fail("This line did not fail to evaluate: ' + anAlternative[1] + '");')
-            result.println("        } catch (Exception e) {")
-            result.println("            // ignore an exception as that is what we're hoping for in this case.")
-            result.println("        }")
-            result.println("    }")
-        }
-        result.println('    protected String lineSep = System.getProperty("line.separator");')
-        result.println('    protected TestGeneratorHelper helper = new ClassicGroovyTestGeneratorHelper();')
-        result.println("}")
-        return resultWriter.toString()
-    }
-
-
-    // -- useful stuff
-
-    /**
-     * Creates alternative versions of the given source, one for each end of line comment tag e.g. //@fail
-     * will remove the double slash from the start of each of the matching line.
-     * e.g. src text of...
-     * <pre>
-     *     // a = 1 // @fail
-     *     // b = 2 // @fail
-     * </pre>
-     * will return
-     * <pre>
-     * [ "a = 1 // @fail NLS // b = 2 // @fail",
-     *   "// a = 1 // @fail NLS b = 2 // @fail" ]
-     * </pre>
-     *
-     */
-    List generateAlternatives(String srcText, String tag) {
-        alternatives = []
-        m = java.util.regex.Pattern.compile("//(.*?//\\s*" + tag + "\\S*)\\s").matcher(srcText)
-        while (m.find()) {
-            foundText = m.group(1)
-            uncommentedSrcText = (srcText.substring(0,m.start()) + "  " + srcText.substring(m.start() + 2))
-            alternatives << [uncommentedSrcText, foundText.replaceAll('"', '\\\\"')]
-        }
-        return alternatives
-    }
-
-
-    /**
-     * Common setup code for each test method
-     */
-    void printCommonTestMethodStart(result, fullMethodName,someSrcText) {
-        buffer = new java.io.StringReader(someSrcText)
-
-        result.println("    public void ${fullMethodName}() throws Exception {")
-        result.println("        StringBuffer srcBuffer = new StringBuffer();")
-
-        // append each line to the buffer
-        buffer.eachLine {line|
-            // escape double quotes
-            line = line.replaceAll('"','\\\\"')
-            result.println ('        srcBuffer.append("' + line + '").append(lineSep);')
-        }
-    }
-
-    /**
-     * Converts the given sentence into a Java style name like TheQuickBrownFox
-     */
-    String turnSentenceIntoJavaName(String sentence) {
-        //uppercase each word and remove spaces to give camel case
-        tokens = sentence.tokenize(" ,;");
-        methodName = ""
-        for (t in tokens) {
-            if (t.size() > 1) {
-                methodName += ( t[0].toUpperCase() + t[1...t.size()].toLowerCase() )
-            } else if (t.size() == 1) {
-                methodName += t[0].toUpperCase()
-            }
-        }
-
-        //remove nonalphanumeric characters
-        methodName = methodName.replaceAll("[^A-Za-z0-9]","")
-
-        return methodName
-    }
-
-    /**
-     * Fetches a list of all the occurances of text between a string delimiter.
-     */
-    List scrape(String txt, String tag) {
-        return scrape(txt,tag,tag)
-    }
-
-    /**
-     * Fetches a list of all the occurances of text between two string delimiters (tags).
-     */
-    List scrape(String txt, String openTag, String closeTag) {
-        i = 0; j = 0; k = 0;
-        contents = []
-        if (txt != null) {
-            while (i> -1 && k > -1) {
-              i = txt.indexOf(openTag,k)
-                if (i > -1) {
-                  j = i + openTag.length()
-                    if (j > -1) {
-                      k = txt.indexOf(closeTag,j)
-                        if (k > -1) {
-                          contents << txt.substring(j,k)
-                        }
-                    }
-                }
-            }
-        }
-        return contents
-    }
-
-}
diff --git a/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGeneratorHelper.java b/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGeneratorHelper.java
deleted file mode 100644
index e1b14a7..0000000
--- a/groovy/jsr/tck/src/org/codehaus/groovy/tck/TestGeneratorHelper.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.codehaus.groovy.tck;
-
-/** Helper methods used by generated TCK test cases */
-
-public interface TestGeneratorHelper {
-    void evaluate(String theSrcText, String testName) throws Exception;
-    void parse(String theSrcText, String testName) throws Exception;
-}
diff --git a/groovy/jsr/tck/styles/junit-frames.xsl b/groovy/jsr/tck/styles/junit-frames.xsl
deleted file mode 100644
index c208c5a..0000000
--- a/groovy/jsr/tck/styles/junit-frames.xsl
+++ /dev/null
@@ -1,723 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
-    xmlns:lxslt="http://xml.apache.org/xslt"
-    xmlns:redirect="http://xml.apache.org/xalan/redirect"
-    xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
-    extension-element-prefixes="redirect">
-<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
-<xsl:decimal-format decimal-separator="." grouping-separator=","/>
-<!--
-   Copyright 2001-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.
- -->
-
-<!--
-
- Sample stylesheet to be used with Ant JUnitReport output.
-
- It creates a set of HTML files a la javadoc where you can browse easily
- through all packages and classes.
-
- @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
- @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
- @author Martijn Kruithof <a href="mailto:martijn@kruithof.xs4all.nl"/>
-
--->
-<xsl:param name="output.dir" select="'.'"/>
-
-
-<xsl:template match="testsuites">
-    <!-- create the index.html -->
-    <redirect:write file="{$output.dir}/index.html">
-        <xsl:call-template name="index.html"/>
-    </redirect:write>
-
-    <!-- create the stylesheet.css -->
-    <redirect:write file="{$output.dir}/stylesheet.css">
-        <xsl:call-template name="stylesheet.css"/>
-    </redirect:write>
-
-    <!-- create the overview-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-summary.html">
-        <xsl:apply-templates select="." mode="overview.packages"/>
-    </redirect:write>
-
-    <!-- create the all-packages.html at the root -->
-    <redirect:write file="{$output.dir}/overview-frame.html">
-        <xsl:apply-templates select="." mode="all.packages"/>
-    </redirect:write>
-
-    <!-- create the all-classes.html at the root -->
-    <redirect:write file="{$output.dir}/allclasses-frame.html">
-        <xsl:apply-templates select="." mode="all.classes"/>
-    </redirect:write>
-
-    <!-- process all packages -->
-    <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-        <xsl:call-template name="package">
-            <xsl:with-param name="name" select="@package"/>
-        </xsl:call-template>
-    </xsl:for-each>
-</xsl:template>
-
-
-<xsl:template name="package">
-    <xsl:param name="name"/>
-    <xsl:variable name="package.dir">
-        <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
-        <xsl:if test="$name = ''">.</xsl:if>
-    </xsl:variable>
-    <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
-    <!-- create a classes-list.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
-        <xsl:call-template name="classes.list">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- create a package-summary.html in the package directory -->
-    <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
-        <xsl:call-template name="package.summary">
-            <xsl:with-param name="name" select="$name"/>
-        </xsl:call-template>
-    </redirect:write>
-
-    <!-- for each class, creates a @name.html -->
-    <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
-    <xsl:for-each select="/testsuites/testsuite[@package = $name]">
-        <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
-            <xsl:apply-templates select="." mode="class.details"/>
-        </redirect:write>
-        <xsl:if test="string-length(./system-out)!=0">
-            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt">
-                <xsl:value-of select="./system-out" />
-            </redirect:write>
-        </xsl:if>
-        <xsl:if test="string-length(./system-err)!=0">
-            <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt">
-                <xsl:value-of select="./system-err" />
-            </redirect:write>
-        </xsl:if>
-    </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="index.html">
-<html>
-    <head>
-        <title>Groovy TCK Results.</title>
-    </head>
-    <frameset cols="20%,80%">
-        <frameset rows="30%,70%">
-            <frame src="overview-frame.html" name="packageListFrame"/>
-            <frame src="allclasses-frame.html" name="classListFrame"/>
-        </frameset>
-        <frame src="overview-summary.html" name="classFrame"/>
-        <noframes>
-            <h2>Frame Alert</h2>
-            <p>
-                This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
-            </p>
-        </noframes>
-    </frameset>
-</html>
-</xsl:template>
-
-<!-- this is the stylesheet css to use for nearly everything -->
-<xsl:template name="stylesheet.css">
-body {
-    font:normal 68% verdana,arial,helvetica;
-    color:#000000;
-}
-table tr td, table tr th {
-    font-size: 68%;
-}
-table.details tr th{
-    font-weight: bold;
-    text-align:left;
-    background:#a6caf0;
-}
-table.details tr td{
-    background:#eeeee0;
-}
-
-p {
-    line-height:1.5em;
-    margin-top:0.5em; margin-bottom:1.0em;
-}
-h1 {
-    margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
-}
-h2 {
-    margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
-}
-h3 {
-    margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
-}
-h4 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h5 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-h6 {
-    margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
-}
-.Error {
-    font-weight:bold; color:red;
-}
-.Failure {
-    font-weight:bold; color:purple;
-}
-.Properties {
-  text-align:right;
-}
-</xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every testsuite class.
-    It prints a summary of the testsuite and detailed information about
-    testcase methods.
-     ====================================================================== -->
-<xsl:template match="testsuite" mode="class.details">
-    <xsl:variable name="package.name" select="@package"/>
-    <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
-    <html>
-        <head>
-          <title>Groovy TCK Results: <xsl:value-of select="$class.name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$package.name"/>
-            </xsl:call-template>
-       <script type="text/javascript" language="JavaScript">
-        var TestCases = new Array();
-        var cur;
-        <xsl:apply-templates select="properties"/>
-       </script>
-       <script type="text/javascript" language="JavaScript"><![CDATA[
-        function displayProperties (name) {
-          var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
-          var doc = win.document.open();
-          doc.write("<html><head><title>Properties of " + name + "</title>");
-          doc.write("<style type=\"text/css\">");
-          doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
-          doc.write("table tr td, table tr th { font-size: 68%; }");
-          doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
-          doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
-          doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
-          doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
-          doc.write("</style>");
-          doc.write("</head><body>");
-          doc.write("<h3>Properties of " + name + "</h3>");
-          doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
-          doc.write("<table class='properties'>");
-          doc.write("<tr><th>Name</th><th>Value</th></tr>");
-          for (prop in TestCases[name]) {
-            doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
-          }
-          doc.write("</table>");
-          doc.write("</body></html>");
-          doc.close();
-          win.focus();
-        }
-      ]]>
-      </script>
-        </head>
-        <body>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Class <xsl:value-of select="$class.name"/></h3>
-
-
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="testsuite.test.header"/>
-                <xsl:apply-templates select="." mode="print.test"/>
-            </table>
-            <h2>Tests</h2>
-            <xsl:if test="string-length(./system-out)!=0">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
-                        sources &#187;
-                    </a>
-            </xsl:if>
-            <p/>
-            <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <xsl:call-template name="testcase.test.header"/>
-              <!--
-              test can even not be started at all (failure to load the class)
-              so report the error directly
-              -->
-                <xsl:if test="./error">
-                    <tr class="Error">
-                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
-                    </tr>
-                </xsl:if>
-                <xsl:apply-templates select="./testcase" mode="print.test"/>
-            </table>
-            <div class="Properties">
-                <a>
-                    <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
-                    Properties &#187;
-                </a>
-            </div>
-            <xsl:if test="string-length(./system-out)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
-                        System.out &#187;
-                    </a>
-                </div>
-            </xsl:if>
-            <xsl:if test="string-length(./system-err)!=0">
-                <div class="Properties">
-                    <a>
-                        <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
-                        System.err &#187;
-                    </a>
-                </div>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-  <!--
-   Write properties into a JavaScript data structure.
-   This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
-   -->
-  <xsl:template match="properties">
-    cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
-    <xsl:for-each select="property">
-    <xsl:sort select="@name"/>
-        cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
-    </xsl:for-each>
-  </xsl:template>
-
-
-<!-- ======================================================================
-    This page is created for every package.
-    It prints the name of all classes that belongs to this package.
-    @param name the package name to print classes.
-     ====================================================================== -->
-<!-- list of classes in a package -->
-<xsl:template name="classes.list">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <title>Groovy TCK Classes: <xsl:value-of select="$name"/></title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <table width="100%">
-                <tr>
-                    <td nowrap="nowrap">
-                        <h2><a href="package-summary.html" target="classFrame">
-                            <xsl:value-of select="$name"/>
-                            <xsl:if test="$name = ''">&lt;none&gt;</xsl:if>
-                        </a></h2>
-                    </td>
-                </tr>
-            </table>
-
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
-                    <xsl:sort select="@name"/>
-                    <tr>
-                        <td nowrap="nowrap">
-                            <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
-                        </td>
-                    </tr>
-                </xsl:for-each>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    Creates an all-classes.html file that contains a link to all package-summary.html
-    on each class.
--->
-<xsl:template match="testsuites" mode="all.classes">
-    <html>
-        <head>
-            <title>All Groovy TCK Classes</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2>Classes</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite" mode="all.classes">
-                    <xsl:sort select="@name"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.classes">
-    <xsl:variable name="package.name" select="@package"/>
-    <tr>
-        <td nowrap="nowrap">
-            <a target="classFrame">
-                <xsl:attribute name="href">
-                    <xsl:if test="not($package.name='')">
-                        <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
-                    </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
-                </xsl:attribute>
-                <xsl:value-of select="@name"/>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!--
-    Creates an html file that contains a link to all package-summary.html files on
-    each package existing on testsuites.
-    @bug there will be a problem here, I don't know yet how to handle unnamed package :(
--->
-<xsl:template match="testsuites" mode="all.packages">
-    <html>
-        <head>
-            <title>All Groovy TCK Packages</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
-            <h2>Packages</h2>
-            <table width="100%">
-                <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
-                    <xsl:sort select="@package"/>
-                </xsl:apply-templates>
-            </table>
-        </body>
-    </html>
-</xsl:template>
-
-<xsl:template match="testsuite" mode="all.packages">
-    <tr>
-        <td nowrap="nowrap">
-            <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
-                <xsl:value-of select="@package"/>
-                <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
-            </a>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<xsl:template match="testsuites" mode="overview.packages">
-    <html>
-        <head>
-            <title>Groovy TCK Results: Summary</title>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-        <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
-        <xsl:call-template name="pageHeader"/>
-        <h2>Summary</h2>
-        <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
-        <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
-        <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
-        <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
-        <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-        <tr valign="top">
-            <th>Tests</th>
-            <th>Failures</th>
-            <th>Errors</th>
-            <th>Success rate</th>
-            <th>Time</th>
-        </tr>
-        <tr valign="top">
-            <xsl:attribute name="class">
-                <xsl:choose>
-                    <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
-                    <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
-                    <xsl:otherwise>Pass</xsl:otherwise>
-                </xsl:choose>
-            </xsl:attribute>
-            <td><xsl:value-of select="$testCount"/></td>
-            <td><xsl:value-of select="$failureCount"/></td>
-            <td><xsl:value-of select="$errorCount"/></td>
-            <td>
-                <xsl:call-template name="display-percent">
-                    <xsl:with-param name="value" select="$successRate"/>
-                </xsl:call-template>
-            </td>
-            <td>
-                <xsl:call-template name="display-time">
-                    <xsl:with-param name="value" select="$timeCount"/>
-                </xsl:call-template>
-            </td>
-
-        </tr>
-        </table>
-        <table border="0" width="95%">
-        <tr>
-        <td style="text-align: justify;">
-        Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
-        </td>
-        </tr>
-        </table>
-
-        <h2>Packages</h2>
-        <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-            <xsl:call-template name="testsuite.test.header"/>
-            <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
-                <xsl:sort select="@package" order="ascending"/>
-                <!-- get the node set containing all testsuites that have the same package -->
-                <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
-                <tr valign="top">
-                    <!-- display a failure if there is any failure/error in the package -->
-                    <xsl:attribute name="class">
-                        <xsl:choose>
-                            <xsl:when test="sum($insamepackage/@errors) &gt; 0">Error</xsl:when>
-                            <xsl:when test="sum($insamepackage/@failures) &gt; 0">Failure</xsl:when>
-                            <xsl:otherwise>Pass</xsl:otherwise>
-                        </xsl:choose>
-                    </xsl:attribute>
-                    <td><a href="./{translate(@package,'.','/')}/package-summary.html">
-                        <xsl:value-of select="@package"/>
-                        <xsl:if test="@package = ''">&lt;none&gt;</xsl:if>
-                    </a></td>
-                    <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
-                    <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
-                    <td>
-                    <xsl:call-template name="display-time">
-                        <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
-                    </xsl:call-template>
-                    </td>
-                </tr>
-            </xsl:for-each>
-        </table>
-        </body>
-        </html>
-</xsl:template>
-
-
-<xsl:template name="package.summary">
-    <xsl:param name="name"/>
-    <html>
-        <head>
-            <xsl:call-template name="create.stylesheet.link">
-                <xsl:with-param name="package.name" select="$name"/>
-            </xsl:call-template>
-        </head>
-        <body>
-            <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
-            <xsl:call-template name="pageHeader"/>
-            <h3>Package <xsl:value-of select="$name"/></h3>
-
-            <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
-                <xsl:call-template name="class.metrics.header"/>
-                <xsl:apply-templates select="." mode="print.metrics"/>
-            </table-->
-
-            <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
-            <xsl:if test="count($insamepackage) &gt; 0">
-                <h2>Classes</h2>
-                <p>
-                <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
-                    <xsl:call-template name="testsuite.test.header"/>
-                    <xsl:apply-templates select="$insamepackage" mode="print.test">
-                        <xsl:sort select="@name"/>
-                    </xsl:apply-templates>
-                </table>
-                </p>
-            </xsl:if>
-        </body>
-    </html>
-</xsl:template>
-
-
-<!--
-    transform string like a.b.c to ../../../
-    @param path the path to transform into a descending directory path
--->
-<xsl:template name="path">
-    <xsl:param name="path"/>
-    <xsl:if test="contains($path,'.')">
-        <xsl:text>../</xsl:text>
-        <xsl:call-template name="path">
-            <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
-        </xsl:call-template>
-    </xsl:if>
-    <xsl:if test="not(contains($path,'.')) and not($path = '')">
-        <xsl:text>../</xsl:text>
-    </xsl:if>
-</xsl:template>
-
-
-<!-- create the link to the stylesheet based on the package name -->
-<xsl:template name="create.stylesheet.link">
-    <xsl:param name="package.name"/>
-    <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
-</xsl:template>
-
-
-<!-- Page HEADER -->
-<xsl:template name="pageHeader">
-    <img src="http://groovy.codehaus.org/images/groovy-logo.png" alt="Groovy"/>
-    <h1>TCK Results</h1>
-    <table width="100%">
-    <tr>
-        <td align="left"></td>
-        <td align="right"><a href="http://groovy.codehaus.org/jsr/spec">Specification</a>.</td>
-    </tr>
-    </table>
-    <hr size="1"/>
-</xsl:template>
-
-<!-- class header -->
-<xsl:template name="testsuite.test.header">
-    <tr valign="top">
-        <th width="80%">Name</th>
-        <th>Tests</th>
-        <th>Errors</th>
-        <th>Failures</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-<!-- method header -->
-<xsl:template name="testcase.test.header">
-    <tr valign="top">
-        <th>Name</th>
-        <th>Status</th>
-        <th width="80%">Type</th>
-        <th nowrap="nowrap">Time(s)</th>
-    </tr>
-</xsl:template>
-
-
-<!-- class information -->
-<xsl:template match="testsuite" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
-                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
-                <xsl:otherwise>Pass</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
-        <td><xsl:apply-templates select="@tests"/></td>
-        <td><xsl:apply-templates select="@errors"/></td>
-        <td><xsl:apply-templates select="@failures"/></td>
-        <td><xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-    </tr>
-</xsl:template>
-
-<xsl:template match="testcase" mode="print.test">
-    <tr valign="top">
-        <xsl:attribute name="class">
-            <xsl:choose>
-                <xsl:when test="error">Error</xsl:when>
-                <xsl:when test="failure">Failure</xsl:when>
-                <xsl:otherwise>TableRowColor</xsl:otherwise>
-            </xsl:choose>
-        </xsl:attribute>
-        <td><xsl:value-of select="@name"/></td>
-        <xsl:choose>
-            <xsl:when test="failure">
-                <td>Failure</td>
-                <td><xsl:apply-templates select="failure"/></td>
-            </xsl:when>
-            <xsl:when test="error">
-                <td>Error</td>
-                <td><xsl:apply-templates select="error"/></td>
-            </xsl:when>
-            <xsl:otherwise>
-                <td>Success</td>
-                <td></td>
-            </xsl:otherwise>
-        </xsl:choose>
-        <td>
-            <xsl:call-template name="display-time">
-                <xsl:with-param name="value" select="@time"/>
-            </xsl:call-template>
-        </td>
-    </tr>
-</xsl:template>
-
-
-<!-- Note : the below template error and failure are the same style
-            so just call the same style store in the toolkit template -->
-<xsl:template match="failure">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<xsl:template match="error">
-    <xsl:call-template name="display-failures"/>
-</xsl:template>
-
-<!-- Style for the error and failure in the testcase template -->
-<xsl:template name="display-failures">
-    <xsl:choose>
-        <xsl:when test="not(@message)">N/A</xsl:when>
-        <xsl:otherwise>
-            <xsl:value-of select="@message"/>
-        </xsl:otherwise>
-    </xsl:choose>
-    <!-- display the stacktrace -->
-    <br/><br/>
-    <code>
-        <xsl:call-template name="br-replace">
-            <xsl:with-param name="word" select="."/>
-        </xsl:call-template>
-    </code>
-    <!-- the latter is better but might be problematic for non-21" monitors... -->
-    <!--pre><xsl:value-of select="."/></pre-->
-</xsl:template>
-
-<xsl:template name="JS-escape">
-    <xsl:param name="string"/>
-    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
-    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
-    <xsl:value-of select="$tmp2"/>
-</xsl:template>
-
-
-<!--
-    template that will convert a carriage return into a br tag
-    @param word the text from which to convert CR to BR tag
--->
-<xsl:template name="br-replace">
-    <xsl:param name="word"/>
-    <xsl:param name="br"><br/></xsl:param>
-    <xsl:value-of select='stringutils:replace(string($word),"&#xA;",$br)'/>
-</xsl:template>
-
-<xsl:template name="display-time">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.000')"/>
-</xsl:template>
-
-<xsl:template name="display-percent">
-    <xsl:param name="value"/>
-    <xsl:value-of select="format-number($value,'0.00%')"/>
-</xsl:template>
-</xsl:stylesheet>
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s01/Unicode1.groovy b/groovy/jsr/tck/test/gls/ch03/s01/Unicode1.groovy
deleted file mode 100644
index 177b94e..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s01/Unicode1.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-package gls.ch03.s01;
-/**
- * Except for comments, identifiers and the contents of ... string 
- * literals, all input elements are formed from ASCII characters.
- *
- * TODO: Find a better way to test these things
- * Note that this is a little hard to test since the input file is ASCII.
- */
-
-class Unicode1 extends GroovyTestCase {
-    public void testComments() {
-        // Unicode is allowed in comments
-        // This is a comment \u0410\u0406\u0414\u0419
-        /* Another comment \u05D0\u2136\u05d3\u05d7 */
-
-        /**/ // Tiny comment
-        /***/ // Also valid
-
-        // Need to test string literals and identifiers
-        println "All is well"
-    }
-}
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s02/Longest1.groovy b/groovy/jsr/tck/test/gls/ch03/s02/Longest1.groovy
deleted file mode 100644
index 430c899..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s02/Longest1.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-package gls.ch03.s02
-
-/**
- * GLS 3.2: The longest possible translation is used at each step, even if the 
- * result does not ultimately make a correct program while another lexical 
- * translation would.
- * 
- * This is fundamental to the way the lexer works. If there is a problem with
- * it, other tests (e.g. to test functionality of operators or identifier
- * names) would expose it quickly. Nevertheless, we test some combinations
- * here for consistency.
- */
-class Longest1 extends GroovyTestCase {
-
-    // Increment and decrement operators
-    void testPrefixIncDec() {
-        def a = 20
-        def b = 10
-        def c = a - b
-        //c = a -- b // @fail:parse 
-        //c = a ++ b // @fail:parse
-        //c = a +- b // @pass
-        //c = a -+ b // @pass
-    }
-}
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s03/CommentSeparatesTokens.groovy b/groovy/jsr/tck/test/gls/ch03/s03/CommentSeparatesTokens.groovy
deleted file mode 100644
index b3e54e3..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s03/CommentSeparatesTokens.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-package gls.ch03.s03
-/**
- * GLS 3.3: ...comments (§3.7) can serve to separate tokens that, if adjacent,
- * might be tokenized in another manner.
- *
- * See also the Whitespace tests (3.6)
- */
-class CommentSeparatesTokens extends GroovyTestCase {
-
-    void testCommentSeparates() {
-        def a = 1
-        a -= 1
-        // a -/* a comment */= 1 // fail: parse
-
-        def/* another comment */b = 2
-        assert b == 2
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy b/groovy/jsr/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy
deleted file mode 100644
index 30d8d98..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy
+++ /dev/null
@@ -1,77 +0,0 @@
-package gls.ch03.s03
-/**
- * GLS 3.3:
- * Implementations first recognize Unicode escapes in their input, translating 
- * the ASCII characters backslash and 'u' followed by four hexadecimal digits
- * to the Unicode character with the indicated hexadecimal value, and passing
- * all other characters unchanged.  
- */
-
-class UnicodeEscapes1 extends GroovyTestCase {
-
-    void testAllHexDigits() {
-        // All hex digits work (char def0 is a special codepoint)
-        def s = "\u1234\u5678\u9abc\u0fed\u9ABC\u0FEC"
-        assert s.charAt(0) == 0x1234
-        assert s.charAt(1) == 0x5678
-        assert s.charAt(2) == 0x9abc
-        assert s.charAt(3) == 0x0fed
-        assert s.charAt(4) == 0x9abc
-        assert s.charAt(5) == 0x0fec
-    }
-
-    // GLS: If an even number of backslashes precede the 'u', it is not 
-    // an escape
-    void testCountBackslash() {
-        def a = 1
-        assert \u0061 == 1 // char 61 is 'a'
-        
-        // Not intepreted as an escape
-        // \\u0061 == 1 // @fail:parse
-
-        assert "\u0061".length() == 1
-        // Double backslash interpreted as a single backslash in string
-        assert "\\u0061".length() == 6
-        assert "\\\u0061".length() == 2
-        
-    }
-
-    // There can be 1 or more u's after the backslash
-    void testMultipleUs() {
-        assert "\uu0061" == "a"
-        assert "\uuu0061" == "a"
-        assert "\uuuuu0061" == "a"
-    }
-
-    // GLS: If an eligible \ is followed by u, or more than one u, and the last u
-    // is not followed by four hexadecimal digits, then a compile-time error
-    // occurs.
-    void testFourHexDigits() {
-        // these next lines won't work. The backslash has been replace by a 
-        // forwards slash so that the file parses. (Comments don't comment out
-        // unicode escapes.)
-        // assert "/u7" == "\07" //@fail:parse 
-        // def /u61 = 2 //@fail:parse 
-        // def /u061 = 2 //@fail:parse 
-
-        // If five digits, only the first four count
-        def \u00610 = 2 
-        assert a0 == 2
-    }
-
-    void testOtherVariations() {
-        // Capital 'U' not allowed
-        // def \U0061 = 1 // @fail:parse 
-    }
-
-    // GLS: Implementations should use the \ uxxxx notation as an output format to
-    // display Unicode characters when a suitable font is not available.
-    // (to be tested as part of the standard library)
-
-    // GLS: Representing supplementary characters requires two consecutive Unicode
-    // escapes. 
-    // (not sure how to test)
-
-    // Also: test unicode escapes last in file
-    // and invalid escapes at end of file
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators1.groovy b/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators1.groovy
deleted file mode 100644
index 994d225..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators1.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package gls.ch03.s04
-/**
- * GLS 3.4:
- * This definition of lines determines the line numbers
- * produced by a Java compiler or other system component.
- */
-
-class AllowedLineTerminators1 extends GroovyTestCase {
-    void testMessageLineNumbers() {
-        
-        // Need to execute compiler and check for correct line numbers 
-        // in messages
-
-        // Test CR, LF and CRLF. Be careful that CRLF counts as one line, not
-        // two
-        assertFalse("Can't test this, yet")
-    }
-}
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators2.groovy b/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators2.groovy
deleted file mode 100644
index 8f46352..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s04/AllowedLineTerminators2.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package gls.ch03.s04
-/**
- * GLS 3.4:
- * ...  It also * specifies the termination of the // form of a comment
- * (§3.7).
- */
-class AllowedLineTerminators2 extends GroovyTestCase {
-
-    void testLineEndings() {
-        def a = 1
-        // This comment ends with a CR \u0013 a = 2
-        assert a == 2
-        // This comment ends with a LF \u000a a = 3
-        assert a == 3
-        // This comment ends with a CRLF \u0013\u000a a = 4
-        assert a == 4
-    }
-}
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB1.groovy b/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB1.groovy
deleted file mode 100644
index 46755bb..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB1.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-//vi: binary:noeol
-package gls.ch03.s05
-
-// Note: this file must not have a trailing EOL. For this reason, 
-// it should be stored in CVS as a binary file (-kb)
-
-/**
- * GLS 3.5:
- * As a special concession for compatibility with certain operating
- * systems, the ASCII SUB character (\u001a, or control-Z) is ignored if
- * it is the last character in the escaped input stream.
- *
- * This file tests ASCII SUBs expressed as unicode escapes
- */
-public class EndWithSUB2 extends GroovyTestCase {
-
-    void testMe() {
-        // Inline SUBs are not allowed
-        // int a\u001a = 2//@fail:parse
-    }
-// Next line ends with ASCII SUB, expressed as a unicode escape
-} \u001a
diff --git a/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB2.groovy b/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB2.groovy
deleted file mode 100644
index 331e92c..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s05/EndWithSUB2.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-//vi: binary:noeol
-package gls.ch03.s05
-
-// Note: this file must not have a trailing EOL. For this reason, 
-// it should be stored in CVS as a binary file (-kb)
-
-/**
- * GLS 3.5:
- * As a special concession for compatibility with certain operating
- * systems, the ASCII SUB character (\u001a, or control-Z) is ignored if
- * it is the last character in the escaped input stream.
- */
-public class EndWithSUB1 extends GroovyTestCase {
-
-    void testMe() {
-        // Inline SUBs are not allowed
-        // int a = 2//@fail:parse
-    }
-// Next line ends with ASCII SUB character
-} 
diff --git a/groovy/jsr/tck/test/gls/ch03/s06/WhitespaceChars.groovy b/groovy/jsr/tck/test/gls/ch03/s06/WhitespaceChars.groovy
deleted file mode 100644
index 64c12cf..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s06/WhitespaceChars.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-package gls.ch03.s06
-
-/**
- * GLS 3.6:
- * White space is defined as the ASCII space, horizontal tab, and form feed
- * characters, as well as line terminators.
- */
-class WhitespaceChars extends GroovyTestCase {
-
-    void testWhitespace() {
-        // Space (would otherwise be "defa = 1")
-        def\u0020a = 1;
-        assert a == 1
-
-        // Tab
-        def\u0009b = 2
-        assert b == 2
-
-        // Formfeed
-        def\u000cc = 3 
-        assert c == 3
-
-        // Newline - careful, can also be a terminator
-        def\u000dd = 4
-        assert d == 4
-    }
-
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s07/HashComment.groovy b/groovy/jsr/tck/test/gls/ch03/s07/HashComment.groovy
deleted file mode 100644
index 0f1fabd..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s07/HashComment.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-# This is a comment: @#$%^@@#$;@#$@#$4!!
-package gls.ch03.s07
-/**
- * GLS 3.7:
- * In addition, if the first non-space character of a Groovy program is the
- * ASCII sharp sign ('#'), the whole line is treated as a comment. In other
- * words, the program is treated exactly as if two slash characters ('//') were
- * inserted before the sharp sign. This unusual rule makes it easier to write
- * Groovy scripts on some systems.
- */
-//# This is not a comment (1) //@fail:parse
-class HashComment extends GroovyTestCase {
-
-//# This is not a comment (2) //@fail:parse
-
-    void testHashComment() {
-        //# This is not a comment (3) //@fail:parse
-        assert true 
-    }
-
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s07/NormalComment.groovy b/groovy/jsr/tck/test/gls/ch03/s07/NormalComment.groovy
deleted file mode 100644
index 0b7e269..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s07/NormalComment.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-package gls.ch03.s07
-/**
- * GLS 3.7:
- *    There are two kinds of comments:
- *        /* text * / 
- *            A traditional comment: all the text from the ASCII
- *            characters /* to the ASCII characters * / is ignored
- *            (as in C and C++).
- *        // text 
- *            A end-of-line comment: all the text from the ASCII
- *            characters // to the end of the line is ignored (as in 
- *            C++).
- */
-class NormalComment extends GroovyTestCase {
-
-    void testEolComment() {
-        def a = 1
-
-        def b = 1
-        // a = a + (
-        b = 2
-        // )
-        assert a == 1
-        assert b == 2
-
-        // GLS: ... some line terminators are transformed into significant
-        // newlines.
-        a = 3 // Significant new line follows this comment
-        // / b //@fail:parse 
-    }
-
-    void testTraditionalComment() {
-        // "def a" doesn't work
-        def a = 1
-
-        a = 10/*comment*//2
-        assert a == 5
-        a = 20//*comment*/2
-        assert a == 10
-
-        a = 10*/*comment*/2
-        assert a == 20
-        a = 20/*comment*/*2
-        assert a == 40
-    }
-
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s08/IdentifierChars.groovy b/groovy/jsr/tck/test/gls/ch03/s08/IdentifierChars.groovy
deleted file mode 100644
index 903e6ea..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s08/IdentifierChars.groovy
+++ /dev/null
@@ -1,71 +0,0 @@
-package gls.ch03.s08
-/**
- * JLS 3.8:
- * An identifier is an unlimited-length sequence of Java letters and Java
- * digits, the first of which must be a Java letter. ... 
- *
- * Letters and digits may be drawn from the entire Unicode character set... 
- *
- * A “Java letter” is a character for which the method
- * Character.isJavaIdentifierStart(int) returns true. A “Java letter-or-digit”
- * is a character for which the method Character.isJavaIdentifierPart(int)
- * returns true.  
- */
-class IdentifierChars extends GroovyTestCase {
-
-    void testASCIIChars() {
-        // Identifier may not start with a digit
-        //def 1a = 1 //@fail:parse
-
-        // Identifier may contain digits after the first letter
-        def a1 = 2 
-        assert a1 == 2
-
-        // Identifier may contain any of the ASCII digits
-        def a1234567890 = "Hello"
-        assert a1234567890 == "Hello"
-
-        // Identifier may contain any of the ASCII upper or lower case letters
-        def ZYXWVUTSRQPONMLKJIHGFEDCBA = "backwords"
-        assert ZYXWVUTSRQPONMLKJIHGFEDCBA == "backwords"
-
-        // Identifier may contain any of the ASCII upper or lower case letters
-        def zyxwvutsrqponmlkjighfedcba = "BACKWORDS"
-        assert zyxwvutsrqponmlkjighfedcba == "BACKWORDS"
-    }
-
-    void testNonAsciiChars() {
-        // Non-ascii chars encoded directly in the stream of text
-        def a = 2
-        def a² = a * a  // a-squared in latin-1 encoding
-        assert a² == 4
-        def µ = 10e-6 
-        assert µ = 10e-6
-    }
-
-    void testEncodedAsciiChars() {
-        // Non-ascii chars encoded directly in the stream of text
-        def a = 2
-        def a² = a * a  // a-squared in latin-1 encoding
-        assert a² == 4
-        def µ = 10e-6 
-        assert µ = 10e-6
-    }
-
-    
-    void testComposedChar() {
-        // Example taken from JLS
-        def \u00c1 = "LATIN CAPITAL LETTER A ACUTE"
-        //assert \u004a\0301 == "LATIN CAPITAL LETTER A ACUTE" //@fail
-    }
-
-    void testVisualEquivalents() {
-        // Example taken from JLS
-        def A = "A"
-        //assert a == A //@fail
-        //assert \u0391 == A //@fail
-        //assert \u0430 == A //@fail
-        //assert \ud835\udc82 == A //@fail
-    }
-}
-
diff --git a/groovy/jsr/tck/test/gls/ch03/s08/IdentifierLength.groovy b/groovy/jsr/tck/test/gls/ch03/s08/IdentifierLength.groovy
deleted file mode 100644
index fc6260f..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s08/IdentifierLength.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-package gls.ch03.s08
-/**
- * GLS 3.8:
- * An identifier is an unlimited-length sequence of Java letters and Java
- * digits, the first of which must be a Java letter.
- *
- * This test case checks that the compiler can handle a 620 character
- * identifier.
- */
-class IdentifierLength extends GroovyTestCase {
-
-    void testLongVarName() {
-        def abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 = 1
-
-        abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 += 1
-
-        assert abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 == 1
-
-    }
-
-    // TODO: test long class name (top level classes interact with the file 
-    // system in interesting ways)
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s10/BooleanLiterals.groovy b/groovy/jsr/tck/test/gls/ch03/s10/BooleanLiterals.groovy
deleted file mode 100644
index 30db5e8..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s10/BooleanLiterals.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-package gls.ch03.s10;
-/**
- * JLS: 3.10.3
- * The boolean type has two values, represented by the literals true and false,
- * formed from ASCII letters.  A boolean literal is always of type boolean.
- */
-class BooleanLiterals extends GroovyTestCase {
-
-    void testBool() {
-        // Try some simple things with literals
-        assert (true != false)
-        assert true
-        assert !false
-
-        // boolean results must be equal to a boolean literal
-        assert (1 > 2) == false
-        assert (3 < 4) == true
-    }
-
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s10/IntegerLiterals.groovy b/groovy/jsr/tck/test/gls/ch03/s10/IntegerLiterals.groovy
deleted file mode 100644
index 75b7da9..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s10/IntegerLiterals.groovy
+++ /dev/null
@@ -1,120 +0,0 @@
-package gls.ch03.s10;
-/**
- * JLS: 3.10.1
- * An integer literal may be expressed in decimal (base 10), hexadecimal (base
- * 16), or octal (base 8)...
- *
- * An integer literal is of type long if it is suffixed with an ASCII letter L
- * or l (ell); otherwise it is of type int (§4.2.1)...
- *
- * Integer literals
- * -- explicitly integer if ends with 'i' type specifier
- *    (can also create integers in other ways too)
- * -- come in Decimal, Octal and Hex varieties
- * -- represented in 32 bits, two's complement
- */
-class IntegerLiterals extends GroovyTestCase {
-
-    void testDecInt() {
-        assertEquals(2i, (1i + 1i))
-        assertEquals(0i, (1i - 1i))
-
-        // Play games with most significant bit
-        assertEquals((-2147483647i - 1), (2147483647i + 1))
-
-        // Large positive literals
-        //def a = 2147483647i //@pass
-        //def a = 2147483648i //@fail:parse
-        //def a = 2147483649i //@fail:parse
-
-        // Large negative literals
-        //def a = -2147483647i //@pass
-        //def a = -2147483648i //@pass
-        //def a = -2147483649i //@fail:parse
-
-        assertEquals(99i, 99I)
-    }
-
-    void testHexInt() {
-        // Check literals get correct values
-        assertEquals(0, 0x0i)
-        assertEquals(1, 0x1i)
-        assertEquals(2, 0x2i)
-        assertEquals(3, 0x3i)
-        assertEquals(4, 0x4i)
-        assertEquals(5, 0x5i)
-        assertEquals(6, 0x6i)
-        assertEquals(7, 0x7i)
-        assertEquals(8, 0x8i)
-        assertEquals(9, 0x09i)
-        assertEquals(10, 0xai)
-        assertEquals(11, 0xbi)
-        assertEquals(12, 0xci)
-        assertEquals(13, 0xdi)
-        assertEquals(14, 0xei)
-        assertEquals(15, 0xfi)
-        assertEquals(16, 0x10i)
-
-        assertEquals(65535i, 0xffffi)
-        assertEquals(10140894i, 0x9abcdei)
-        assertEquals(11259375i, 0xabcdefi)
-        assertEquals(305419896i, 0x12345678i)
-        assertEquals(2147483647i, 0x7fffffffi)
-
-        // extra zeroes after the 'x' should not affect result
-        assertEquals(1, 0x01i)
-        assertEquals(1, 0x000001i)
-        assertEquals(1, 0x0000000000000000000000000001i)
-
-        //def a = 0x7fffffffi//@pass
-        //def a = 0x80000000i//@fail:parse
-        //def a = 0x80000001i//@fail:parse
-
-        //def a = -0x7fffffffi//@pass
-        //def a = -0x80000000i//@pass
-        //def a = -0x80000001i//@fail:parse
-
-        // Check that compiler handles the unary '-' as a separate token
-        //def a = - 0x80000000i//@pass
-        //def a = -/* */0x80000000i//@pass
-        //def a = - 0x80000001i//@fail:parse
-        //def a = -/* */0x80000001i//@fail:parse
-    }
-
-    void testOctInt() {
-        // Check literals get correct values
-        assertEquals(0i, 00)
-        assertEquals(1i, 01i)
-        assertEquals(2i, 02i)
-        assertEquals(3i, 03i)
-        assertEquals(4i, 04i)
-        assertEquals(5i, 05i)
-        assertEquals(6i, 06i)
-        assertEquals(7i, 07i)
-
-        assertEquals(65535, 0177777i)
-        assertEquals(10140894, 046536336)
-        assertEquals(11259375, 052746757i)
-        assertEquals(305419896, 02215053170)
-        assertEquals(2147483647, 017777777777i)
-
-        // extra zeroes should not affect result
-        assertEquals(1, 001i)
-        assertEquals(1, 0000001i)
-        assertEquals(1, 00000000000000000000000000001i)
-
-        //def a = 017777777777i//@pass
-        //def a = 020000000000i//@fail
-        //def a = 020000000001i//@fail
-
-        //def a = -017777777777i//@pass
-        //def a = -020000000000i//@pass
-        //def a = -020000000001i//@fail
-
-
-        //def a = - 020000000000i//@pass
-        //def a = -/* */020000000000i//@pass
-        //def a = - 020000000001i//@fail
-        //def a = -/* */020000000001i//@fail
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s10/NullLiteral.groovy b/groovy/jsr/tck/test/gls/ch03/s10/NullLiteral.groovy
deleted file mode 100644
index e9ec885..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s10/NullLiteral.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-package gls.ch03.s10;
-/**
- * JLS: 3.10.7
- * The null type has one value, the null reference, represented by the literal
- * null, which is formed from ASCII characters. A null literal is always of the
- * null type.  
- *
- *
- * Test implementation notes:
- * Can show that the null literal exists, however the null type has no name
- * and can be implicitly converted to any reference type, so it is hard to 
- * tell if null is of the null type. 
- */
-class NullLiteral extends GroovyTestCase {
-
-    void testNull() {
-        // Null literal exists
-        String s = null
-        assert s == null
-
-        try {
-            print s.length()
-            fail("Should have thrown exception")
-        } catch (NullPointerException e) {
-            // OK
-        }
-    }
-
-}
diff --git a/groovy/jsr/tck/test/gls/ch03/s10/StringEscapes.groovy b/groovy/jsr/tck/test/gls/ch03/s10/StringEscapes.groovy
deleted file mode 100644
index f06d05f..0000000
--- a/groovy/jsr/tck/test/gls/ch03/s10/StringEscapes.groovy
+++ /dev/null
@@ -1,52 +0,0 @@
-package gls.ch03.s10;
-/**
- * JLS: 3.10.5
- * [S]tring escape sequences allow for the representation of some nongraphic
- * characters as well as the single quote, double quote, and backslash
- * characters in ... string literals (§3.10.5).
- *
- * GLS 3.10.5
- * In all strings, the escape sequence '\$' is legal, and stands for the ASCII
- * dollar character.
- */
-class StringEscapes extends GroovyTestCase {
-
-    void testStandardJavaEscapeChars() {
-        String s = "\b\t\n\f\r\"\'\\"
-        assert s.charAt(0) == 0x8
-        assert s.charAt(1) == 0x9
-        assert s.charAt(2) == 0xa
-        assert s.charAt(3) == 0xc
-        assert s.charAt(4) == 0xd
-        assert s.charAt(5) == 0x22
-        assert s.charAt(6) == 0x27
-        assert s.charAt(7) == 0x5c
-
-        // A selction of invalid, non-standard escapes
-        //String s2 = "\q"//@fail:parse
-        //String s2 = "\}"//@fail:parse
-        //String s2 = "\^"//@fail:parse
-        //String s2 = "\N"//@fail:parse
-        //String s2 = "\@"//@fail:parse
-        //String s2 = "\a"//@fail:parse
-        //String s2 = "\A"//@fail:parse
-    }
-
-    void testOctalEscapes() {
-        String s = "\0\00\000\1\377\042\42"
-        assert s.charAt(0) == 0
-        assert s.charAt(1) == 0
-        assert s.charAt(2) == 0
-        assert s.charAt(3) == 1
-        assert s.charAt(4) == 255
-        assert s.charAt(5) == 042
-        assert s.charAt(6) == 042
-
-        String s2 = "\0007"
-        assert s2.length() == 2
-        assert s2.charAt(0) == 0
-        assert s2.charAt(1) == "7"
-
-        // A selection of invalid escapes
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements1.groovy b/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements1.groovy
deleted file mode 100644
index 4a5eb08..0000000
--- a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements1.groovy
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * A local variable declaration statement declares one or more local variable names
- */
-class Foo {
-    def run() {
-        runIntTests
-        runDefIntTests
-        runDefTests
-        runStringTests
-        runDefStringTests
-        runModifierTests
-        runNonTypeTests
-    }
-    // The type can be a builtin type keyword.
-    def runIntTests() {
-        int a
-        int b = 1
-        int c,d,e
-        int f,g = 2
-        int h = 3,i = 4  // extra permutations
-        int j = 5,k      // extra permutations
-        //int int p//@fail:parse
-    }
-    // With type keywords, the 'def' keyword is optional.
-    def runDefIntTests() {
-        def int a
-        def int b = 1
-        def int c,d,e
-        def int f,g = 2
-        //def int int p//@fail:parse
-    }
-    // With the 'def' the type is optional.
-    // (It defaults to the type of the expression.)
-    def runDefTests() {
-        def a
-        def b = 1
-        def c,d,e
-        def f,g = 2
-        def h = "h"
-        def java.lang.String i = 'i'
-        //def def p//@fail:parse
-    }
-    // Capitalized names are taken to be declaration types.
-    // With such names, the 'def' keyword is optional.
-    def runStringTests() {
-        Strange z
-        String a
-        String b = '1'
-        String c,d,e
-        String f,g = '2'
-        String h = 3,i = 4  // extra permutations
-        String j = 5,k      // extra permutations
-        //String String p//@fail:parse
-    }
-    // With capitalized type names, the 'def' keyword is optional.
-    def runDefStringTests() {
-        def String a
-        def String b = '1'
-        def String c,d,e
-        def String f,g = '2'
-        //def String String p//@fail:parse
-        def Strange z // Will parse, though not a type! //@fail:check
-    }
-    // When a modifier is present, the 'def' keyword is optional.
-    def runModifierTests() {
-        final a = 1, b = 2
-        final int c = 12
-        def final d = 3, e = 4
-        def final int f = 5
-        //int final p  //@fail:parse
-        //final def q = 9//@fail:parse
-    }
-    def nonType =  // not capitalized...
-        {println "nonType invoked on $it"}
-    def one=1
-    // The parser accepts uncapitalized type names only when required by context.
-    // The requiring context is a modifier ('final') or the 'def' keyword.
-    // Of course, built-in type keywords like 'int' are always types.
-    // All other uncapitalized names are taken to be commands.
-    def runNonTypeTests() {
-        nonType one  // Parses as a command.
-        def nonType a; // Will parse, though not a type! //@fail:check
-        final nonType b = 0; //@fail:check  // Will parase, though not a type!
-        //nonType p = 1 //@fail:parse
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements2.groovy b/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements2.groovy
deleted file mode 100644
index 502525d..0000000
--- a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements2.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Every local variable declaration statement is immediately contained by a block.
- */
-class Foo {
-    def run() {
-        int a = 1
-        {
-            int b = 2
-            assert a == 1
-            assert b == 2
-        }
-        assert a == 1
-        //assert b == 2 //@fail
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements3.groovy b/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements3.groovy
deleted file mode 100644
index 2be3bdd..0000000
--- a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements3.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Local variable declaration statements may be intermixed freely with other kinds of statements in the block.
- */
-class Foo {
-    def run() {
-        int a = 1
-        assert a == 1
-        int b = 2
-        assert b == 2
-    }
-}
diff --git a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements4.groovy b/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements4.groovy
deleted file mode 100644
index 346d2d4..0000000
--- a/groovy/jsr/tck/test/gls/ch14/s4/LocalVariableDeclarationStatements4.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * A local variable declaration can also appear in the header of a for statement.
- * In this case it is executed in the same manner as if it were part of a local variable declaration statement.
- */
-class Foo {
-    def run() {
-        //for (int i = 0;i < 10;i++) {} //@pass
-        //for (i = 0;i < 10; i++) {} //@fail
-    }
-}
diff --git a/groovy/jsr/tck/test/misc/AnnotationTest.groovy b/groovy/jsr/tck/test/misc/AnnotationTest.groovy
deleted file mode 100644
index 2db75a3..0000000
--- a/groovy/jsr/tck/test/misc/AnnotationTest.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-class AnnotationTest extends GroovyTestCase {
-    @Property String foo
-    @Property protected def bar
-    protected @Property def mooky
-    
-    @Property
-    String wibble = "wobble"
-
-    @Property String gouda, edam, wensleydale, gorgonzola, parmesan,
-    mozarella, 
-    cheddar
-
-    def bazouki = "off"
-
-    public void testValues() {
-        assert bazouki == "off"
-
-        assert wibble == "wobble"
-        assert getWibble() == "wobble"
-    }
-}
-
diff --git a/groovy/jsr/tck/test/misc/BadMethod.groovy b/groovy/jsr/tck/test/misc/BadMethod.groovy
deleted file mode 100644
index 49f82b9..0000000
--- a/groovy/jsr/tck/test/misc/BadMethod.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Various good and bad methods and constructors
- */
-class Foo {
-
-    static blah() {}  //@fail:parse looks like constructor with bad name
-
-    static void blah() {} // OK
-    private Foo() {
-    }
-
-    Foo(String x) {
-    }
-
-
-    def Foo(int x) {} //@fail:parse cannot use def with constructors
-}
diff --git a/groovy/jsr/tck/test/misc/FieldPropertyMethodDisambiguationTest.groovy b/groovy/jsr/tck/test/misc/FieldPropertyMethodDisambiguationTest.groovy
deleted file mode 100644
index 7f489e4..0000000
--- a/groovy/jsr/tck/test/misc/FieldPropertyMethodDisambiguationTest.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-class FieldPropertyMethodDisambiguationTest extends GroovyTestCase {
-    String bar = "field"
-
-    String getBar() {
-        return "propertyMethod"
-    }
-
-    String bar() {
-        return "method"
-    }
-
-
-    String bar(param) {
-        return "method with param: " + param
-    }
-
-
-    void testCase() {
-        def answer = bar()
-        assert answer == "method"
-        assert this.bar() == "method"
-
-        assert bar(1) == "method with param: 1"
-        assert this.bar(1) == "method with param: 1"
-
-
-        assert getBar() == "propertyMethod"
-        assert this.getBar() == "propertyMethod"
-
-        // TODO should these 2 expressions call the getter or return the field?
-        assert bar == "field"
-        assert this.bar == "field"
-
-
-        def value = this.@bar
-        assert value == "field"
-
-        assert this.@bar == "field"
-
-        def tmp = this
-        assert tmp.@bar == "field"
-
-        tmp.@bar = "whatnot"
-
-        assert bar == "whatnot"
-        assert this.@bar == "whatnot"
-    }
-}
\ No newline at end of file
diff --git a/groovy/jsr/tck/test/misc/JohnRoseExamples.groovy b/groovy/jsr/tck/test/misc/JohnRoseExamples.groovy
deleted file mode 100644
index 9c83834..0000000
--- a/groovy/jsr/tck/test/misc/JohnRoseExamples.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * John Rose Example test cases.
- */
-class Nifty {
-    def stuff() {
-    ([a,b,c] = n)
-    System.'in'.read
-    println """hello, world!"""
-    def l = [foo, bar, *baz, ]
-    l.forEach{println it}
-    while (def String it = asa) { println it }
-    with (html) { head{}; body{ *"hello" } }
-    //foo() bar() //@fail:parse
-    for (i in 0--a.length)  println a[i]
-  }
-  //interface def {};
-
-  def foo(x) { 1+x }
-  def bar() {
-    def int v = 0
-    def x = (1
-              +2); def y = 3
-    def
-      z =
-         y +
-             x
-}
-def cat = {x,y| "$x$y"}
-def fun() {
-    def id1 = {it}
-    def id2 = {x|x}
-    def id3 = {{id1}}
-}
-
-}
diff --git a/groovy/jsr/tck/test/misc/PropertyCalledNameTest.groovy b/groovy/jsr/tck/test/misc/PropertyCalledNameTest.groovy
deleted file mode 100644
index 14bdfda..0000000
--- a/groovy/jsr/tck/test/misc/PropertyCalledNameTest.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-
-class PropertyCalledNameTest extends GroovyTestCase {
-
-    @Property String name
-
-    void setName(String name) {
-        // JUnit doesn't like it if we overload the setName() so lets keep it working :)
-        super.setName(name)
-        this.name = name
-    }
-
-    void testProperty() {
-
-        def foo = this.name
-        assert foo == "testProperty"
-
-        assert name == "testProperty"
-        assert this.getName() == "testProperty"
-        assert this.name == "testProperty"
-
-        def bar = this
-        assert bar.getName() == "testProperty"
-        assert bar.name == "testProperty"
-
-        name = "cheddar"
-
-        assert this.getName() == "cheddar"
-        assert this.name == "cheddar"
-
-    }
-}
\ No newline at end of file
diff --git a/groovy/jsr/tck/test/misc/PropertyTest.groovy b/groovy/jsr/tck/test/misc/PropertyTest.groovy
deleted file mode 100644
index 605c5ad..0000000
--- a/groovy/jsr/tck/test/misc/PropertyTest.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-
-class PropertyTest extends GroovyTestCase {
-
-
-    // TODO should barf as TestCase has a private setter?
-    // @Property String name = "abc"
-
-    @Property String cheese = "edam"
-
-    /** TODO can't do constructors :)
-    PropertyTest() {
-    }
-    */
-
-    void testProperty() {
-
-        def foo = this.cheese
-        assert foo == "edam"
-
-        assert cheese == "edam"
-        assert this.getCheese() == "edam"
-        assert this.cheese == "edam"
-
-        def bar = this
-        assert bar.getCheese() == "edam"
-        assert bar.cheese == "edam"
-
-        cheese = "cheddar"
-
-        assert this.getCheese() == "cheddar"
-        assert this.cheese == "cheddar"
-
-    }
-}
\ No newline at end of file
diff --git a/groovy/jsr/tck/test/misc/SampleMain.groovy b/groovy/jsr/tck/test/misc/SampleMain.groovy
deleted file mode 100644
index 3e119a2..0000000
--- a/groovy/jsr/tck/test/misc/SampleMain.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-package foo.bar
-
-class SampleMain {
-
-    @Property String name = "James"
-
-
-    static void main(args) {
-        foo = new SampleMain()
-        println "Hello ${foo.name}"
-
-        assert foo.getName() == "James"
-    }
-}
\ No newline at end of file
diff --git a/groovy/jsr/tck/test/misc/SampleTest.groovy b/groovy/jsr/tck/test/misc/SampleTest.groovy
deleted file mode 100644
index b806fb0..0000000
--- a/groovy/jsr/tck/test/misc/SampleTest.groovy
+++ /dev/null
@@ -1,393 +0,0 @@
-package foo.bar
-
-import java.io.File
-import java.util.Date as UDate
-
-// TODO allow annotations on classes again :)
-//@Bean(cool=true)
-
-class SampleTest extends GroovyTestCase {
-
-    String foo = "John"
-    String bar = "Jez"
-    private static def dummyx = 123
-    protected final def dummyY = 456
-
-    void testRange() {
-        def range = 1..3
-        assert range == [1, 2, 3]
-
-        for (i in 1..10) {
-            println "Range loop at $i"
-        }
-
-        (10..1).each { println "Range closure loop at $it" }
-    }
-
-
-    void testListClosure() {
-        def list = [1, 2, 3]
-
-        println "list is $list"
-
-        // TODO sort out parser
-        // list.each {|e| println("List contains $e") }
-    }
-
-    void testMap() {
-        n = [:]
-        assert n instanceof java.util.Map
-
-        m = ["y":2, "foo":"bar", "x":4.2]
-
-        // TODO
-        //m.each { (k, v)| println "key $k and value $v" }
-
-        println "Created map $m"
-
-        m2 = [x:123, y:456, z:"whatnot"]
-
-        println "Created map with named arguments $m2"
-
-        // TODO parser can't handle this!
-        //m3 = [123:456, 678:"whatnot"]
-        m3 = [(123):456, (678):"whatnot"]
-        println "Created map with named arguments $m3"
-    }
-
-    void testMultiLineString() {
-        println """
-this is
-a very
-long string
-which spans
-many lines
-"""
-    }
-
-    void testStrings() {
-        assert "\\" == '\\'
-        assert "\\" != "\\\\"
-    }
-
-    void testNew() {
-        x = new ArrayList()
-        x.add(123)
-
-        assert x.size() == 1
-
-        println "created list $x"
-    }
-
-    void testNewWithImports() {
-        f = new File("foo.txt")
-
-        def name = f.name
-        def name2 = f.getName()
-        assert name == name2
-
-
-        println "File name $name"
-
-        println new UDate()
-
-        def sd = new java.sql.Date(105, 11, 5)
-        println "created SQL date of value $sd"
-    }
-
-    void testAsCastAndInstanceof() {
-        def x = "foo"
-
-        def foo = x as String
-        def bar = (String) x
-
-        assert foo == bar
-        assert foo instanceof String
-    }
-
-    void testComplexExpression() {
-        def list = [1, [1, [1, 2], 3], 3]
-
-        def x = list[1][1][1]
-
-        assert x == 2
-
-        def y = list.get(1)[1].get(1)
-
-        assert x == y
-    }
-
-    void testCase() {
-        println "Hello"
-        println 123
-        println 123.456
-
-        println "Hello $foo!"
-        println "Hello ${bar}!"
-
-
-        def f = this
-        def answer = f.foo("hello ", "James")
-
-        println "Received answer $answer"
-
-        assert answer == "hello James"
-
-        answer = foo2("hello ", "Guillaume")
-        assert answer == "hello Guillaume"
-
-        println "Now the answer is $answer"
-    }
-
-    void testSubscript() {
-        list = [1, 2, 3]
-
-        def x = list[2]
-        assert x == 3
-    }
-
-    void testIf() {
-        def x = 123
-        def y = 1
-        if (x > 100) {
-            y = 2
-        }
-
-        assert y == 2
-    }
-
-    void testIfElse() {
-        def x = 123
-        def y = 1
-        if (x > 100) {
-            y = 2
-        }
-        else {
-            y = 3
-        }
-        assert y == 2
-    }
-
-    void testWhile() {
-        def x = 10
-
-        while (x > 0) {
-            println "loop value with x=$x"
-            x = x - 1
-
-            if (x == 3) {
-                break
-            }
-        }
-    }
-
-    void testWhileWithLabel() {
-        def x = 10
-
-        while (x > 0) {
-            println "loop value with x=$x"
-            x = x - 1
-
-            if (x == 3) {
-                break FOO
-            }
-        }
-
-        FOO: println "Done"
-    }
-
-    String foo(a, b) {
-        return a + b
-    }
-
-
-    def foo2(a, b) {
-        def answer = a + b
-        return answer
-    }
-
-    void testTryCatchWithException() {
-        try {
-            methodThatThrowsException()
-            fail "Should have thrown an exception by now!"
-        }
-        catch (Exception e) {
-            println "Worked! Caught expected exception $e"
-
-        }
-    }
-
-    void methodThatThrowsException() {
-        throw new Exception("Test exception")
-    }
-
-    void testSwitch() {
-        x = 12
-        switch (x) {
-            case 1:
-                fail "not 1"
-                break
-
-            case  12:
-                println "Switch worked! answer is 12!"
-                break
-
-            case "text":
-                fail "not text"
-                break
-
-            default:
-                fail "Not defailt"
-                break
-        }
-
-        x = 5
-        switch (x) {
-            case 1:
-                fail "not 1"
-                break
-
-            case  12:
-                fail "not 12"
-                break
-
-            case "text":
-                fail "not text"
-                break
-
-            default:
-                println "worked, the default answer"
-                break
-        }
-    }
-
-
-    void testFor() {
-        def list = [1, 2, 3]
-
-        println "normal iteration loop on list $list"
-
-        for (i in list) {
-            println "for item: $i"
-        }
-
-        println "typed iteration loop on list $list"
-
-        for (Integer i in list) {
-            println "for item: $i"
-        }
-    }
-
-
-    void testTryCatch() {
-        try {
-            methodThatDoesNotThrowException()
-        }
-        catch (Exception e) {
-            fail "Should not throw exception $e"
-        }
-    }
-
-    void testTryCatchFinally() {
-        try {
-            methodThatDoesNotThrowException()
-        }
-        catch (Exception e) {
-            fail "Should not throw exception $e"
-        }
-        finally {
-            println "Called from finally block"
-        }
-    }
-
-    void methodThatDoesNotThrowException() {
-        println "Normal method invocation..."
-    }
-
-
-    void testBug675() {
-        assert "\\"!="\\\\"
-
-        // Are the following valid now? Must $ be escaped?
-
-        // TODO  assert "\\$"=="\\"+"$"
-
-
-        assert ("\\\\"+"\\").length() == 3
-        // TODO assert "\\3 $1$2" == "\\" + "3" + " " + "$" + "1" + "$" + "2"
-        // TODO assert "\\\\3 \\$1$2" == "\\" + "\\" + "3" + " " + "\\"+ "$" + "1" + "$" + "2"
-        // TODO assert "\\\\\\3 \\\\$1$2" == "\\" + "\\\\" + "3" + " " + "\\\\"+ "$" + "1" + "$" + "2"
-        // TODO assert "\\\\\\\\3 \\\\\\$1$2" == "\\\\" + "\\\\" + "3" + " " + "\\\\\\"+ "$" + "1" + "$" + "2"
-
-        assert "\\\\" == "\\" + "\\"
-        assert "\\\\".length() == 2
-
-        z = 100 + 200
-        assert "Hello\\, \\World\\".charAt(4) == "o".charAt(0)
-        assert "Hello\\, \\World\\".charAt(5) == "\\".charAt(0)
-        assert "Hello\\, \\World\\".charAt(6) == ",".charAt(0)
-
-        // TODO failing tests...
-        // assert "\\"+"\\\\" == "\\"+"\\"+"\\" && "\\\\"+"\\" == "\\"+"\\"+"\\"
-        // assert "\\\\ \\ ${z}" == "\\\\ \\ 300"
-        // assert "\\\\ \\ ${z}" == "\\" + "\\" + " " + "\\" + " " + "300"
-    }
-
-
-    @webService void methodWithAnnotations() {
-        println "Hey"
-    }
-
-    protected synchronized static void something() {
-        println "Hey, I'm synchronized and static"
-    }
-
-    void testPrePostFix() {
-        def x = 123
-
-        println("value is $x")
-
-        if (x > 100) {
-            ++x
-        }
-
-        assert x == 124
-        assert ++x == 125
-
-        assert x++ == 125
-        assert --x == 125
-        assert x-- == 125
-
-        println("value is now ${x}")
-        
-        assert x == 124
-    }
-
-
-    // TODO when parser fixed
-    //-------------------------------------------------------------------------
-
-
-    /*
-
-    void testArrays() {
-        // TODO this line seems to cause a stack overflow...
-        String[] array = { "a", "b", "c" }
-
-        List list = array.asList()
-
-        assert list == ["a", "b", "c"]
-    }
-
-
-    void testMapWithIntegerKey() {
-        m = [1:2, "foo":"bar", "x":4.2]
-
-        println "Created map $m"
-
-        m.each { (k, v)| println "key $k and value $v" }
-    }
-
-    */
-
-}
\ No newline at end of file
diff --git a/groovy/jsr/tck/test/proposals/Closures.groovy b/groovy/jsr/tck/test/proposals/Closures.groovy
deleted file mode 100644
index d208800..0000000
--- a/groovy/jsr/tck/test/proposals/Closures.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Closure Example test cases.
- */
-class Closures {
-    def someClosures() {
-        // c1 = {print "hello"}   //@pass
-        // c2 = {foo| print foo}  //@fail:parse
-        // c3 = {|bar| print bar} //@pass
-        // c4 = {|String telson| println telson} //@pass
-        // c5 = {|Cool car, funky, Moped yeah| println yeah + funky + car} //@pass
-        // c6 = {|String name, age| println "${name) is ${age} years old"} //@pass
-        // myList.each{print it}   //@pass
-        // myList.each{foo|print foo} //@fail:parse
-        // myList.each{|bar|print bar} //@pass
-  }
-}
diff --git a/groovy/jsr/tck/testlib/README.txt b/groovy/jsr/tck/testlib/README.txt
deleted file mode 100644
index 19b370e..0000000
--- a/groovy/jsr/tck/testlib/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-This directory is where to put the runtime jars that are under test...
\ No newline at end of file
diff --git a/groovy/jsr/tck/testlib/antlr-2.7.5.jar b/groovy/jsr/tck/testlib/antlr-2.7.5.jar
deleted file mode 100644
index fbe5e3c..0000000
--- a/groovy/jsr/tck/testlib/antlr-2.7.5.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/.cvsignore b/groovy/modules/.cvsignore
deleted file mode 100644
index e43b0f9..0000000
--- a/groovy/modules/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-.DS_Store
diff --git a/groovy/modules/classic/README.txt b/groovy/modules/classic/README.txt
deleted file mode 100644
index 3647fcc..0000000
--- a/groovy/modules/classic/README.txt
+++ /dev/null
@@ -1 +0,0 @@
-This module contains the classic parser, which has since been superceded by the JSR parser
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/AbstractCharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/AbstractCharStream.java
deleted file mode 100644
index e2c82c0..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/AbstractCharStream.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-public abstract class AbstractCharStream
-    implements CharStream
-{
-    private String description;
-
-    public AbstractCharStream()
-    {
-        this( "<unknown>" );
-    }
-
-    public AbstractCharStream(String description)
-    {
-        this.description = description;
-    }
-
-    public String getDescription()
-    {
-        return this.description;
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/CharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/CharStream.java
deleted file mode 100644
index b956977..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/CharStream.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-import org.codehaus.groovy.syntax.ReadException;
-
-/** Conduit of characters  to a lexer.
- *
- *  @see Lexer
- *  @see AbstractCharStream
- *
- *  @author <a href="mailto:bob@werken.com">bob mcwhirter</a>
- *
- *  @version $Id$
- */
-public interface CharStream {
-    // ----------------------------------------------------------------------
-    //     Constants
-    // ----------------------------------------------------------------------
-
-    /** End-of-stream value. */
-    final char EOS = (char) - 1;
-
-    // ----------------------------------------------------------------------
-    //     Interface
-    // ----------------------------------------------------------------------
-
-    String getDescription();
-
-    /** Consume the next character.
-     *
-     *  @return The consumed character or -1 if no more characters
-     *          available.
-     *
-     *  @throws ReadException If an error occurs attempting to consume
-     *          a character.
-     */
-    char consume() throws ReadException;
-
-    void close() throws ReadException;
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Delimiter.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Delimiter.java
deleted file mode 100644
index d91bfd0..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Delimiter.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-
-/**
- *  An interface for Lexers that delimit content from a larger source.
- *
- *  @author Chris Poirier
- */
-
-public interface Delimiter
-{
-
-
-   /**
-    *  Turns delimiting on or off.  This should affect <code>la()</code>
-    *  and <code>consume()</code>.  However, once the delimiter has been
-    *  reached, this routine should have no effect.
-    */
-
-    public void delimit( boolean delimiter );
-
-
-
-   /**
-    *  Returns true if the lexer is applying its delimiter policy.
-    */
-
-    public boolean isDelimited();
-
-
-
-   /**
-    *  Returns true if the lexer stream is dry.
-    */
-
-    public boolean isFinished();
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/FileCharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/FileCharStream.java
deleted file mode 100644
index 5ae9ca4..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/FileCharStream.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import org.codehaus.groovy.syntax.ReadException;
-
-public class FileCharStream
-    implements CharStream
-{
-    private File file;
-    private CharStream charStream;
-
-    public FileCharStream(File file)
-    {
-        this.file = file;
-    }
-
-    public File getFile()
-    {
-        return this.file;
-    }
-
-    protected CharStream getCharStream()
-        throws ReadException
-    {
-        try
-        {
-            if ( this.charStream == null )
-            {
-                this.charStream = new InputStreamCharStream( new FileInputStream( getFile() ) );
-            }
-        }
-        catch( IOException e )
-        {
-            throw new ReadException( e );
-        }
-
-        return this.charStream;
-    }
-
-    public String getDescription()
-    {
-        return getFile().getPath();
-    }
-
-    public char consume()
-        throws ReadException
-    {
-        return getCharStream().consume();
-    }
-
-    public void close()
-        throws ReadException
-    {
-        getCharStream().close();
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GStringLexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GStringLexer.java
deleted file mode 100644
index 8177e8b..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GStringLexer.java
+++ /dev/null
@@ -1,318 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-//{{{ imports
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.Token;
-//}}}
-
-/**
- *  A lexer for GStrings, usually run on a LexerFilter base.
- *
- *  @author Chris Poirier
- */
-
-public class GStringLexer extends LexerBase
-{
-
-    protected boolean sentStartToken      = false;
-    protected boolean sentEndToken        = false;
-
-    protected StringBuffer       fullText = new StringBuffer();
-    protected int       fullTextStartLine = 0;
-    protected int     fullTextStartColumn = 0;
-
-    protected GroovyExpressionLexer child = null;
-    protected boolean        inExpression = false;
-
-
-   /**
-    *  Finds and returns (consuming) the next token from the underlying stream.
-    *  Returns null when out of tokens.
-    */
-
-    protected Token undelegatedNextToken() throws ReadException, LexerException
-    {
-        // System.out.println( "" + this + "undelegatedNextToken()" );
-        Token token = null;
-
-
-        //
-        // Handle bracketing tokens and EOS
-
-        if( !sentStartToken )
-        {
-            mark();
-            fullTextStartLine   = getStartLine();
-            fullTextStartColumn = getStartColumn();
-            sentStartToken      = true;
-
-            // System.out.println( "" + this + "returning GSTRING_START" );
-            return symbol( Types.GSTRING_START );
-        }
-        else if( la(1) == CharStream.EOS )
-        {
-            if( !sentEndToken )
-            {
-                sentEndToken = true;
-                token = Token.newSymbol( Types.GSTRING_END, fullTextStartLine, fullTextStartColumn );
-                token.setText( fullText.toString() );
-            }
-
-            // System.out.println( "" + this + "returning " + token );
-            return token;
-        }
-
-
-        //
-        // If we get this far, we are no longer delegated.  If
-        // we just processed an expression, the next character
-        // had better be a '}'...
-
-        if( inExpression && la(1) != '}' )
-        {
-            mark();
-            unexpected( la(1), 0 );
-        }
-
-
-        //
-        // Otherwise, it's a lex...
-
-        mark();
-        StringBuffer segment = new StringBuffer();
-
-        char c;
-        MAIN_LOOP: while( true )
-        {
-            c = la(1);
-
-            ROOT_SWITCH: switch( c )
-            {
-                case CharStream.EOS:
-                {
-                    break MAIN_LOOP;
-                }
-
-                case '\r':
-                case '\n':
-                {
-                    readEOL( segment );
-                    break ROOT_SWITCH;
-                }
-
-                case '\\':
-                {
-                    ESCAPE_SWITCH: switch( la(2) )
-                    {
-                        case '$':
-                        {
-                            consume();
-                            segment.append( consume() );
-                            break ESCAPE_SWITCH;
-                        }
-
-                        default:
-                        {
-                            segment.append( consume() );
-                            break ESCAPE_SWITCH;
-                        }
-                    }
-
-                    break ROOT_SWITCH;
-                }
-
-                case '$':
-                {
-                    if( la(2) == '{' )
-                    {
-                        if( segment.length() == 0 )
-                        {
-                            sourceDelimiting( false );  // ensures ${"..."} works
-
-                            mark();
-                            consume();
-                            consume();
-
-                            token = symbol( Types.GSTRING_EXPRESSION_START );
-                            inExpression = true;
-
-                            if( child == null )
-                            {
-                                child = new GroovyExpressionLexer();
-                            }
-                            else
-                            {
-                                child.reset();
-                            }
-
-                            delegate( child );
-
-                            break MAIN_LOOP;
-                        }
-                        else
-                        {
-                            break MAIN_LOOP;
-                        }
-                    }
-                    else
-                    {
-                        segment.append( consume() );
-                    }
-
-                    break ROOT_SWITCH;
-                }
-
-                case '}':
-                {
-                    if( inExpression )
-                    {
-                        mark();
-                        consume();
-                        token = symbol( Types.GSTRING_EXPRESSION_END );
-
-                        inExpression = false;
-
-                        break MAIN_LOOP;
-                    }
-                    else
-                    {
-                        segment.append( consume() );
-                        break ROOT_SWITCH;
-                    }
-                }
-
-                default:
-                {
-                    segment.append( consume() );
-                    break ROOT_SWITCH;
-                }
-            }
-        }
-
-
-        if( token != null )
-        {
-            // System.out.println( "" + this + "returning " + token );
-            return token;
-        }
-        else
-        {
-            // System.out.println( "" + this + "returning string of " + segment );
-            return Token.newString( segment.toString(), getStartLine(), getStartColumn() );
-        }
-
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // DELEGATION
-
-
-   /**
-    *  Coordinates with our source about delimiting.  When
-    *  entering or processing sub-expressions, source delimiting
-    *  should be off.
-    */
-
-    protected void sourceDelimiting( boolean delimit )
-    {
-        if( source instanceof Delimiter )
-        {
-            ((Delimiter)source).delimit( delimit );
-        }
-    }
-
-
-
-   /**
-    *  Delegates our duties to another Lexer.
-    */
-
-    public void delegate( Lexer to )
-    {
-        this.delegate = to;
-        sourceDelimiting( false );
-        to.setSource( this );
-    }
-
-
-
-   /**
-    *  Retakes responsibility for our duties.
-    */
-
-    public void undelegate()
-    {
-        if( delegate != null )
-        {
-            delegate.unsetSource( );
-            delegate = null;
-            sourceDelimiting( true );
-        }
-    }
-
-
-
-   /**
-    *  Sets the source lexer.
-    */
-
-    public void setSource( Lexer source )
-    {
-        super.setSource( source );
-
-        sentStartToken = false;
-        sentEndToken   = false;
-
-        fullTextStartLine   = getStartLine();
-        fullTextStartColumn = getStartColumn();
-        fullText            = new StringBuffer();
-
-        inExpression = false;
-    }
-
-
-
-   /**
-    *  Unsets the source lexer.
-    */
-
-    public void unsetSource()
-    {
-        super.unsetSource();
-
-        sentStartToken = false;
-        sentEndToken   = false;
-        fullText       = null;
-        inExpression   = false;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-
-   /**
-    *  Eats a character from the input stream.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        char c = super.consume();
-
-        if( c != CharStream.EOS )
-        {
-            fullText.append(c);
-        }
-
-        return c;
-    }
-
-
-}
-
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyExpressionLexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyExpressionLexer.java
deleted file mode 100644
index 8fac5a9..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyExpressionLexer.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- *  Lexes Groovy, counting braces.  Considers itself at end of stream
- *  when the } count exceeds the { count.
- *
- *  @author Chris Poirier
- */
-
-public class GroovyExpressionLexer extends GroovyLexerBase implements Delimiter
-{
-
-    protected boolean delimited = true;   // When true, the lexer can do its delimiting
-    protected boolean finished  = false;  // Set when we reach the delimiter
-    protected int     balance   = 0;      // The current number of unmatched open-braces
-
-
-   /**
-    *  Finds and returns (and consumes) the next token from the underlying stream.
-    *  Returns null when out of tokens.  We let the GroovyLexerBase version deal
-    *  with delegation stuff.
-    */
-
-    public Token nextToken() throws ReadException, LexerException
-    {
-        if( finished )
-        {
-            return null;
-        }
-        else
-        {
-            return super.nextToken();
-        }
-
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // DELIMITER ROUTINES
-
-
-   /**
-    *  Turns delimiting on or off.  This should affect <code>la()</code>
-    *  and <code>consume()</code>.  However, once the delimiter has been
-    *  reached, this routine should have no effect.
-    */
-
-    public void delimit( boolean delimited )
-    {
-        this.delimited = delimited;
-    }
-
-
-
-   /**
-    *  Returns true if the lexer is applying its delimiter policy.
-    */
-
-    public boolean isDelimited()
-    {
-        return this.delimited;
-    }
-
-
-
-   /**
-    *  Returns true if the lexer stream is dry.
-    */
-
-    public boolean isFinished()
-    {
-        return finished;
-    }
-
-
-
-   /**
-    *  Restarts the lexer stream after a <code>finish()</code>
-    *  and some intevening act (like a new source).
-    */
-
-    protected void restart()
-    {
-        finished = false;
-    }
-
-
-
-   /**
-    *  Stops the lexer stream.
-    */
-
-    protected void finish()
-    {
-        finished = true;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // DELEGATION
-
-
-   /**
-    *  Delegates our duties to another Lexer.
-    */
-
-    public void delegate( Lexer to )
-    {
-        this.delegate = to;
-        delimit( false );
-        to.setSource( this );
-    }
-
-
-
-   /**
-    *  Retakes responsibility for our duties.
-    */
-
-    public void undelegate()
-    {
-        if( delegate != null )
-        {
-            delegate.unsetSource( );
-            delegate = null;
-            delimit( true );
-        }
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException
-    {
-        if( source != null )
-        {
-            if( delimited )
-            {
-                char c = ' ';
-                int balance = this.balance;
-                for( int i = 1; i <= k && balance >= 0; i++ )
-                {
-                    c = source.la(k);
-                    switch( c )
-                    {
-                        case '{':
-                            balance++;
-                            break;
-                        case '}':
-                            balance--;
-                            break;
-                    }
-                }
-
-                if( balance >= 0 )
-                {
-                    return c;
-                }
-                else
-                {
-                    return CharStream.EOS;
-                }
-
-            }
-            else
-            {
-                return source.la(k);
-            }
-
-        }
-        else
-        {
-            return CharStream.EOS;
-        }
-    }
-
-
-
-   /**
-    *  Eats a character from the input stream.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        if( source != null )
-        {
-            if( delimited )
-            {
-                char c = source.la(1);
-                switch( c )
-                {
-                    case '{':
-                        balance++;
-                        break;
-                    case '}':
-                        balance--;
-                        break;
-                }
-
-                if( balance >= 0 )
-                {
-                    return source.consume();
-                }
-                else
-                {
-                    finish();
-                }
-            }
-            else
-            {
-                return source.consume();
-            }
-        }
-
-        return CharStream.EOS;
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexer.java
deleted file mode 100644
index 2a413a3..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexer.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.GroovyBugError;
-
-
-/**
- *  Identifies and returns tokens from a source text.  <code>nextToken()</code>
- *  is the primary entry point.  This is the primary lexer for the Groovy language.
- *  It can delegate operations, but will not accept being delegated to.
- *
- *  @author Bob Mcwhirter
- *  @author James Strachan
- *  @author John Wilson
- *  @author Chris Poirier
- */
-
-public class GroovyLexer extends GroovyLexerBase
-{
-
-    private CharStream charStream;           // the source of data for the lexer
-    protected int line;                      // the current line in the source
-    protected int column;                    // the current column in the source
-
-
-
-   /**
-    *  Initializes the <code>Lexer</code> from an opened <code>CharStream</code>.
-    */
-
-    public GroovyLexer(CharStream charStream)
-    {
-        this.charStream = charStream;
-        this.line = 1;
-        this.column = 1;
-    }
-
-
-   /**
-    *  Returns the underlying <code>CharStream</code>.
-    */
-
-    public CharStream getCharStream()
-    {
-        return this.charStream;
-    }
-
-
-
-   /**
-    *  Refuses to set a source.
-    */
-
-    public void setSource( Lexer source )
-    {
-        throw new GroovyBugError( "you can't set a source on the GroovyLexer" );
-    }
-
-
-
-   /**
-    *  Similarly refuses to clear a source.
-    */
-
-    public void unsetSource()
-    {
-        throw new GroovyBugError( "you can't unset a source on the GroovyLexer" );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM PROCESSING
-
-    private final char[] buf       = new char[5];          // ??
-    private final int[]  charWidth = new int[buf.length];  // ??
-
-    private int cur = 0;                                   // ??
-    private int charsInBuffer = 0;                         // ??
-    private boolean eosRead = false;                       // ??
-    private boolean escapeLookahead = false;               // ??
-    private char escapeLookaheadChar;                      // ??
-
-    private boolean boundary = false;                      // set true when the lexer is on a line boundary
-
-
-
-   /**
-    *  Returns the current line number.
-    */
-
-    public int getLine()
-    {
-        return line;
-    }
-
-
-
-   /**
-    *  Returns the current column within that line.
-    */
-
-    public int getColumn()
-    {
-        return column;
-    }
-
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException
-    {
-        if (k > this.charsInBuffer)
-        {
-            if( k > this.buf.length )
-            {
-                throw new GroovyBugError( "Could not look ahead for character: " + k + " due to buffer exhaustion" );
-            }
-
-            for (int i = 0; i != this.charsInBuffer; i++, this.cur++)
-            {
-               this.buf[i] = this.buf[this.cur];
-               this.charWidth[i] = this.charWidth[this.cur];
-            }
-
-            fillBuffer();
-        }
-
-        return this.buf[this.cur + k - 1];
-    }
-
-
-
-   /**
-    *  Eats a character from the input stream.  We don't
-    *  support sources here, as we own the CharStream on which
-    *  we are working.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        if (this.charsInBuffer == 0)
-        {
-            fillBuffer();
-        }
-
-
-        //
-        // Consume the next character
-
-        this.charsInBuffer--;
-
-        int  width   = this.charWidth[this.cur];
-        char c       = this.buf[this.cur++];
-        this.column += width;
-
-
-        //
-        // Mark line boundaries as necessary.  Only relevant
-        // non-manufactured tokens need apply.
-
-        if( boundary || (c == '\n' && width == 1) )
-        {
-            boundary = false;
-            line++;
-            column = 1;
-        }
-        else if( c == '\r' && width == 1 )
-        {
-            if( la(1) != '\n' )
-            {
-                line++;
-                column = 1;
-            }
-            else /* it is '\n' and */ if( this.charWidth[this.cur] == 1 )
-            {
-                boundary = true;
-            }
-        }
-
-
-        return c;
-    }
-
-
-
-   /**
-    *  Fills the lookahead buffer from the stream.
-    */
-
-    private void fillBuffer() throws ReadException, LexerException
-    {
-        this.cur = 0;
-
-        do
-        {
-            if( this.eosRead )
-            {
-                this.buf[this.charsInBuffer] = CharStream.EOS;
-            }
-            else
-            {
-                char c = this.escapeLookahead ? this.escapeLookaheadChar : charStream.consume();
-
-                this.escapeLookahead = false;
-                this.charWidth[this.charsInBuffer] = 1;
-
-                if(c == CharStream.EOS)
-                {
-                    this.eosRead = true;
-                }
-
-                if( c == '\\' )
-                {
-                    c = charStream.consume();
-
-                    if( c == 'u' )
-                    {
-                        do
-                        {
-                            this.charWidth[this.charsInBuffer]++;
-                            c = charStream.consume();
-                        }
-                        while (c == 'u'); // the spec allows any number of u characters after the \	
-
-                        try
-                        {
-                            c =
-                                (char) Integer.parseInt(
-                                    new String(
-                                        new char[] {
-                                            c,
-                                            charStream.consume(),
-                                            charStream.consume(),
-                                            charStream.consume()    }),
-                                    16);
-                            this.charWidth[this.charsInBuffer] += 4;
-                        }
-                        catch (NumberFormatException e)
-                        {
-                            throw new UnexpectedCharacterException(
-                                getStartLine(),
-                                getStartColumn() + 1,
-                                c,
-                                new char[] {
-                            });
-                        }
-                    }
-                    else
-                    {
-                        this.escapeLookahead = true;
-                        this.escapeLookaheadChar = c;
-                        c = '\\';
-                    }
-                }
-
-                this.buf[this.charsInBuffer] = c;
-            }
-        }
-        while (++this.charsInBuffer != this.buf.length);
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexerBase.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexerBase.java
deleted file mode 100644
index adacb8c..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/GroovyLexerBase.java
+++ /dev/null
@@ -1,967 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Numbers;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- *  The core code used in lexing Groovy.
- *
- *  @author Bob Mcwhirter
- *  @author James Strachan
- *  @author John Wilson
- *  @author Chris Poirier
- */
-
-public class GroovyLexerBase extends LexerBase
-{
-
-    protected StringLexer  stringLexer  = new StringLexer();   // support lexer for processing strings
-    protected GStringLexer gstringLexer = new GStringLexer();  // support lexer for processing GStrings
-
-
-   /**
-    *  Finds and returns (and consumes) the next token from the underlying stream.
-    *  Returns null when out of tokens.
-    */
-
-    public Token nextToken() throws ReadException, LexerException
-    {
-        // System.out.println( "entering GroovyLexerBase.nextToken() on " + this );
-
-        Token token = null;
-        OUTER_LOOP : while (token == null)
-        {
-
-            //
-            // Get from the delegate, if available
-
-            if( delegate != null )
-            {
-                token = delegate.nextToken();
-
-                if( token == null )
-                {
-                    undelegate();
-                }
-                else
-                {
-                    break OUTER_LOOP;
-                }
-            }
-
-
-            //
-            // Otherwise, do it the hard way.
-
-            char c = la();
-
-            ROOT_SWITCH : switch (c)
-            {
-                case (CharStream.EOS) :
-                {
-                    break OUTER_LOOP;
-                }
-                case (' ') :
-                case ('\t') :
-                {
-                    consume();
-                    token = null;
-                    break ROOT_SWITCH;
-                }
-                case ('\r') :
-                case ('\n') :
-                {
-                    mark();
-                    token = tokenizeEOL();
-                    break ROOT_SWITCH;
-                }
-                case ('{') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.LEFT_CURLY_BRACE );
-                    break ROOT_SWITCH;
-                }
-                case ('}') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.RIGHT_CURLY_BRACE );
-                    break ROOT_SWITCH;
-                }
-                case ('[') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.LEFT_SQUARE_BRACKET );
-                    break ROOT_SWITCH;
-                }
-                case (']') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.RIGHT_SQUARE_BRACKET );
-                    break ROOT_SWITCH;
-                }
-                case ('(') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.LEFT_PARENTHESIS );
-                    break ROOT_SWITCH;
-                }
-                case (')') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.RIGHT_PARENTHESIS );
-                    break ROOT_SWITCH;
-                }
-                case ('#') :
-                {
-                    consume();
-
-                    token = symbol( Types.NEWLINE, -1 );
-
-                    CONSUME_LOOP : while( true )
-                    {
-                        switch (c = la())
-                        {
-                            case ('\r') :
-                            case ('\n') :
-                            {
-                                readEOL();
-                                break CONSUME_LOOP;
-                            }
-                            case CharStream.EOS :
-                            {
-                                break CONSUME_LOOP;
-                            }
-                            default :
-                            {
-                                consume();
-                            }
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('/') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.DIVIDE_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('/') :
-                        {
-                            consume();
-                            token = symbol( Types.NEWLINE, -2 );
-
-                            CONSUME_LOOP : while (true)
-                            {
-                                switch (c = la())
-                                {
-                                    case ('\r') :
-                                    case ('\n') :
-                                    {
-                                        readEOL();
-                                        break CONSUME_LOOP;
-                                    }
-                                    case CharStream.EOS :
-                                    {
-                                        break CONSUME_LOOP;
-                                    }
-                                    default :
-                                    {
-                                        consume();
-                                    }
-                                }
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('*') :
-                        {
-                            CONSUME_LOOP : while (true)
-                            {
-                                CONSUME_SWITCH : switch (c = la())
-                                {
-                                    case ('*') :
-                                    {
-                                        consume();
-                                        if (la() == '/')
-                                        {
-                                            consume();
-                                            break CONSUME_LOOP;
-                                        }
-                                        break CONSUME_SWITCH;
-                                    }
-                                    case ('\r') :
-                                    case ('\n') :
-                                    {
-                                        readEOL();
-                                        break CONSUME_SWITCH;
-                                    }
-                                    case CharStream.EOS :
-                                    {
-                                        break CONSUME_LOOP;
-                                    }
-                                    default :
-                                    {
-                                        consume();
-                                    }
-                                }
-                            }
-                            token = null;
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.DIVIDE );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('%') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.MOD_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.MOD );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('\\') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.INTDIV_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.INTDIV );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('~') :
-                {
-                    mark();
-                    consume();
-
-                    token = symbol( Types.REGEX_PATTERN );
-                    break ROOT_SWITCH;
-                }
-                case ('!') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            if( la() == '=' )
-                            {
-                                consume();
-                                token = symbol( Types.COMPARE_NOT_IDENTICAL );
-                            }
-                            else
-                            {
-                                token = symbol( Types.COMPARE_NOT_EQUAL );
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.NOT );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('=') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            c = la();
-
-                            switch (c)
-                            {
-                                case '=' :
-                                {
-                                    consume();
-                                    token = symbol( Types.COMPARE_IDENTICAL );
-                                    break;
-                                }
-                                case '~' :
-                                {
-                                    consume();
-                                    token = symbol( Types.MATCH_REGEX );
-                                    break;
-                                }
-                                default :
-                                {
-                                    token = symbol( Types.COMPARE_EQUAL );
-                                }
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        case '~' :
-                        {
-                            consume();
-                            token = symbol( Types.FIND_REGEX );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('&') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('&') :
-                        {
-                            consume();
-
-                            if( la() == '=' )
-                            {
-                                consume();
-                                token = symbol( Types.LOGICAL_AND_EQUAL );
-                            }
-                            else
-                            {
-                                token = symbol( Types.LOGICAL_AND );
-                            }
-
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.BITWISE_AND_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.BITWISE_AND );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('|') :
-                {
-                    mark();
-                    consume();
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('|') :
-                        {
-                            consume();
-
-                            if( la() == '=' )
-                            {
-                                consume();
-                                token = symbol( Types.LOGICAL_OR_EQUAL );
-                            }
-                            else
-                            {
-                                token = symbol( Types.LOGICAL_OR );
-                            }
-
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('=') :
-                        {
-                            consume();
-
-			    token = symbol( Types.BITWISE_OR_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.PIPE );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('+') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('+') :
-                        {
-                            consume();
-                            token = symbol( Types.PLUS_PLUS );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.PLUS_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.PLUS );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('-') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('-') :
-                        {
-                            consume();
-                            token = symbol( Types.MINUS_MINUS );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.MINUS_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('>') :
-                        {
-                            consume();
-                            token = symbol( Types.NAVIGATE );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.MINUS );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('*') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.MULTIPLY_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('*') :
-                        {
-                            consume();
-                            c = la();
-                            if( c == '=' )
-                            {
-                                consume();
-                                token = symbol( Types.POWER_EQUAL );
-                            } 
-                            else
-                            {	
-			        token = symbol( Types.POWER );
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.MULTIPLY );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('^') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.BITWISE_XOR_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.BITWISE_XOR );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case (':') :
-                {
-                    mark();
-                    consume();
-
-                    token = symbol( Types.COLON );
-                    break ROOT_SWITCH;
-                }
-                case (',') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.COMMA );
-                    break ROOT_SWITCH;
-                }
-                case (';') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.SEMICOLON );
-                    break ROOT_SWITCH;
-                }
-                case ('?') :
-                {
-                    mark();
-                    consume();
-                    token = symbol( Types.QUESTION );
-                    break ROOT_SWITCH;
-                }
-                case ('<') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            c = la();
-                            if (c == '>')
-                            {
-                                consume();
-                                token = symbol( Types.COMPARE_TO );
-                            }
-                            else
-                            {
-                                token = symbol( Types.COMPARE_LESS_THAN_EQUAL );
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('<') :
-                        {
-                            consume();
-                            c = la();
-
-                            //
-                            // It's a "here-doc", created using <<<TOK ... \nTOK.   The terminator
-                            // runs from the <<< to the end of the line.  The marker is then used
-                            // to create a HereDocLexer which becomes our delegate until the heredoc
-                            // is finished.
-
-                            if (c == '<')
-                            {
-                                consume();
-
-                                StringBuffer marker = new StringBuffer();
-                                while( (c = la()) != '\n' && c != '\r' && c != CharStream.EOS )
-                                {
-                                    marker.append( consume() );
-                                }
-
-                                readEOL();
-
-                                Lexer child = new HereDocLexer( marker.toString() );
-                                delegate( child );
-
-                                gstringLexer.reset();
-                                child.delegate( gstringLexer );
-
-                                break ROOT_SWITCH;
-                            }
-                            else if (c == '=')
-                            {
-                                consume();
-                                token = symbol( Types.LEFT_SHIFT_EQUAL );
-                                break MULTICHAR_SWITCH;
-                            }
-                            else
-                            {
-                                token = symbol( Types.LEFT_SHIFT );
-                                break ROOT_SWITCH;
-                            }
-                        }
-                        default :
-                        {
-                            token = symbol( Types.COMPARE_LESS_THAN );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('>') :
-                {
-                    mark();
-                    consume();
-
-                    c = la();
-
-                    MULTICHAR_SWITCH : switch (c)
-                    {
-                        case ('=') :
-                        {
-                            consume();
-                            token = symbol( Types.COMPARE_GREATER_THAN_EQUAL );
-                            break MULTICHAR_SWITCH;
-                        }
-                        case ('>') :
-                        {
-                            consume();
-                            c = la();
-                            if( c == '>' )
-                            {
-                                consume();
-                                c = la();
-                                if (c == '=')
-                                {
-                                    consume();
-                                    token = symbol( Types.RIGHT_SHIFT_UNSIGNED_EQUAL );
-                                }
-				else
-                                {
-                                    token = symbol( Types.RIGHT_SHIFT_UNSIGNED );
-                                }
-                            } 
-                            else if (c == '=')
-                            {
-                                consume();
-                                token = symbol( Types.RIGHT_SHIFT_EQUAL );
-                            }
-                            else
-                            {	
-                            	token = symbol( Types.RIGHT_SHIFT );
-                            }
-                            break MULTICHAR_SWITCH;
-                        }
-                        default :
-                        {
-                            token = symbol( Types.COMPARE_GREATER_THAN );
-                            break MULTICHAR_SWITCH;
-                        }
-                    }
-                    break ROOT_SWITCH;
-                }
-                case ('\'') :
-                {
-                    mark();
-
-                    stringLexer.reset();
-                    stringLexer.allowGStrings(false);
-                    delegate( stringLexer );
-
-                    break ROOT_SWITCH;
-                }
-                case ('"') :
-                {
-                    mark();
-
-                    stringLexer.reset();
-                    stringLexer.allowGStrings(true);
-                    delegate( stringLexer );
-
-                    gstringLexer.reset();
-                    stringLexer.delegate( gstringLexer );
-
-                    break ROOT_SWITCH;
-                }
-                case ('0') :
-                case ('1') :
-                case ('2') :
-                case ('3') :
-                case ('4') :
-                case ('5') :
-                case ('6') :
-                case ('7') :
-                case ('8') :
-                case ('9') :
-                case ('.') :
-                {
-                    mark();
-
-                    //
-                    // If it is a '.' and not followed by a digit,
-                    // it's an operator.
-
-                    if( c == '.' && !Numbers.isDigit(la(2)) )
-                    {
-                        consume();
-                        if( la() == '.' )
-                        {
-                            consume();
-                            if( la() == '.' )
-                            {
-                                consume();
-                                token = symbol( Types.DOT_DOT_DOT );
-                            }
-                            else
-                            {
-                                token = symbol( Types.DOT_DOT );
-                            }
-                        }
-                        else
-                        {
-                            token = symbol( Types.DOT );
-                        }
-                        break ROOT_SWITCH;
-                    }
-
-
-                    //
-                    // Otherwise, we are processing a number (integer or decimal).
-
-                    StringBuffer numericLiteral = new StringBuffer();
-                    boolean      isDecimal      = false;
-
-
-                    //
-                    // If it starts 0 and isn't a decimal number, we give
-                    // special handling for hexadecimal or octal notation.
-
-                    char c2 = la(2);
-                    if( c == '0' && (c2 == 'X' || c2 == 'x' || Numbers.isDigit(c2)) )
-                    {
-                        numericLiteral.append( consume() );
-
-                        if( (c = la()) == 'X' || c == 'x' )
-                        {
-                            numericLiteral.append( consume() );
-                            if( Numbers.isHexDigit(la()) )
-                            {
-                                while( Numbers.isHexDigit(la()) )
-                                {
-                                    numericLiteral.append( consume() );
-                                }
-                            }
-                            else
-                            {
-                                unexpected( la(), numericLiteral.length(), "expected hexadecimal digit" );
-                            }
-                        }
-                        else
-                        {
-                            while( Numbers.isOctalDigit(la()) )
-                            {
-                                numericLiteral.append( consume() );
-                            }
-
-                            if( Numbers.isDigit(la()) )
-                            {
-                                unexpected( la(), numericLiteral.length(), "expected octal digit" );
-                            }
-                        }
-                    }
-
-
-                    //
-                    // Otherwise, it's in base 10, integer or decimal.
-
-                    else
-                    {
-                        while( Numbers.isDigit(la()) )
-                        {
-                            numericLiteral.append( consume() );
-                        }
-
-
-                        //
-                        // Next, check for a decimal point
-
-                        if( la() == '.' && Numbers.isDigit(la(2)) )
-                        {
-                            isDecimal = true;
-
-                            numericLiteral.append( consume() );
-                            while( Numbers.isDigit(la()) )
-                            {
-                                numericLiteral.append( consume() );
-                            }
-
-                            //
-                            // Check for an exponent
-
-                            if( (c = la()) == 'e' || c == 'E' )
-                            {
-                                numericLiteral.append( consume() );
-
-                                if (la() == '+' || la() == '-')
-                                {
-                                    numericLiteral.append(consume());
-                                }
-
-                                if( Numbers.isDigit(la()) )
-                                {
-                                    while( Numbers.isDigit(la()) )
-                                    {
-                                        numericLiteral.append( consume() );
-                                    }
-                                }
-                                else
-                                {
-                                    unexpected( la(), numericLiteral.length(), "expected exponent" );
-                                }
-                            }
-                        }
-                    }
-
-
-                    //
-                    // If there is a type suffix, include it.
-
-                    if( Numbers.isNumericTypeSpecifier(la(), isDecimal) )
-                    {
-                        numericLiteral.append( consume() );
-                    }
-
-
-                    //
-                    // For good error reporting, make sure there is nothing invalid next.
-
-                    if( Character.isJavaIdentifierPart(c = la()) )
-                    {
-                        unexpected( c, numericLiteral.length(), "expected end of numeric literal" );
-                    }
-
-
-                    //
-                    // Finally, create the token.
-
-                    if( isDecimal )
-                    {
-                        token = Token.newDecimal( numericLiteral.toString(), getStartLine(), getStartColumn() );
-                    }
-                    else
-                    {
-                        token = Token.newInteger( numericLiteral.toString(), getStartLine(), getStartColumn() );
-                    }
-
-                    break ROOT_SWITCH;
-                }
-                default :
-                {
-                    mark();
-                    if (Character.isJavaIdentifierStart(c))
-                    {
-                        StringBuffer identifier = new StringBuffer();
-
-                        IDENTIFIER_LOOP : while (true)
-                        {
-                            c = la();
-
-                            if (Character.isJavaIdentifierPart(c))
-                            {
-                                identifier.append(consume());
-                            }
-                            else
-                            {
-                                break IDENTIFIER_LOOP;
-                            }
-                        }
-
-                        String text = identifier.toString();
-                        token = Token.newKeyword( text, getStartLine(), getStartColumn() );
-
-                        if (token == null)
-                        {
-                            token = Token.newIdentifier( text, getStartLine(), getStartColumn() );
-                        }
-                    }
-                    else
-                    {
-                        unexpected( c, 1 );
-                    }
-
-                    break ROOT_SWITCH;
-                }
-            }
-        }
-
-        // System.out.println( "" + this + ".nextToken() returning [" + token + "]" );
-
-        return token;
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/HereDocLexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/HereDocLexer.java
deleted file mode 100644
index 91691c5..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/HereDocLexer.java
+++ /dev/null
@@ -1,271 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-
-/**
- *  A Lexer for processing here docs.  It reads a line at a time from
- *  the underlying stream (leaving the EOL for the next read), then
- *  offers that data for users.
- *
- *  @author Chris Poirier
- */
-
-public class HereDocLexer extends TextLexerBase
-{
-
-    protected String  marker   = null;   // The marker to watch for
-    protected boolean onmargin = true;   // If false, the marker can be indented
-    protected String  data     = "";     // The current data
-    protected int     consumed = -1;     // The last index consumed
-    protected boolean last     = false;  // Set after the last line is read
-
-
-   /**
-    *  Initializes the lexer to read up to (and including) the marker
-    *  on a line by itself.
-    */
-
-    public HereDocLexer( String marker )
-    {
-        if( marker.startsWith("-") )
-        {
-            this.marker = marker.substring( 1, marker.length() );
-            this.onmargin = false;
-        }
-        else
-        {
-            this.marker = marker;
-            this.onmargin = true;
-        }
-    }
-
-
-
-   /**
-    *  Sets the source lexer and sets the lexer running.
-    */
-
-    public void setSource( Lexer source )
-    {
-        super.setSource( source );
-
-        data     = "";
-        consumed = -1;
-        last     = false;
-
-        restart();
-        delimit( true );
-    }
-
-
-
-   /**
-    *  Unsets the source lexer.
-    */
-
-    public void unsetSource()
-    {
-        finish();
-        super.unsetSource();
-    }
-
-
-
-   /**
-    *  Sets delimiting on.  The first thing we to is check for and eat our
-    *  delimiter.
-    */
-
-    public void delimit( boolean delimit )
-    {
-        super.delimit( delimit );
-
-        if( delimit )
-        {
-            try
-            {
-                if( !finished && la(1) == CharStream.EOS )
-                {
-                    finish();
-                }
-            }
-            catch( Exception e )
-            {
-                finished = true;
-            }
-        }
-    }
-
-
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException
-    {
-
-        if( !finished && source != null )
-        {
-            if( consumed + k >= data.length() )
-            {
-                refill();
-            }
-
-            if( consumed + k < data.length() )
-            {
-                return data.charAt( consumed + k );
-            }
-        }
-
-        return CharStream.EOS;
-    }
-
-
-
-
-   /**
-    *  Eats a character from the input stream.  Searches for the delimiter if
-    *  filtered.  Note that turning delimiting on also checks if we are at the
-    *  delimiter, so if we aren't finished, there is something to consume.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        if( !finished && source != null )
-        {
-            char c = data.charAt( ++consumed );
-            if( delimited && la(1) == CharStream.EOS )
-            {
-                finish();
-            }
-
-            return c;
-        }
-
-        return CharStream.EOS;
-    }
-
-
-
-   /**
-    *  Reads the next line from the underlying stream.  If delimited, checks for
-    *  the marker.  We don't update finished here, though, as that would prevent
-    *  any buffered data from being read.
-    */
-
-    protected void refill() throws LexerException, ReadException
-    {
-        if( !finished && source != null && !last )
-        {
-            StringBuffer read = new StringBuffer();
-
-            //
-            // Read any residual data into the buffer.
-
-            for( int i = consumed + 1; i < data.length(); i++ )
-            {
-                read.append( data.charAt(i) );
-            }
-
-
-            //
-            // Read line ends until we have some non-blank lines to read.
-            // Note that we have to be careful with the line ends, as the
-            // end of one line belongs to the next, when it comes to discards
-            // due to marker identification!
-
-            char c;
-            StringBuffer raw = new StringBuffer();
-            while( (c = source.la()) == '\n' || c == '\r' )
-            {
-                if( raw.length() > 0 )
-                {
-                    read.append( raw );
-                    raw.setLength( 0 );
-                }
-
-                if( !((LexerBase)source).readEOL(raw) ) // bad cast, but for now...
-                {
-                    throw new UnterminatedStringLiteralException(getStartLine(), getStartColumn());
-                }
-            }
-
-
-            //
-            // Read the next line, checking for the end marker, if delimited.
-            // We leave the EOL for the next read...
-
-            boolean use = true;
-
-            if( !isDelimited() )
-            {
-                while( (c = source.la()) != '\n' && c != '\r' && c != CharStream.EOS )
-                {
-                    raw.append( source.consume() );
-                }
-            }
-
-            else
-            {
-                //
-                // If the marker started with the "-" modifier, whitespace is
-                // allowed before the marker.  The marker can be followed on
-                // the same line by code, so if it matches the beginning
-                // pattern, we stop after reading the last character.
-
-                if( !onmargin )
-                {
-                    while( (c = source.la()) == ' ' || c == '\t' )
-                    {
-                        raw.append( source.consume() );
-                    }
-                }
-
-                int testing = 0, length = marker.length();
-                boolean found = false, lost = false;
-                while( (c = source.la()) != '\n' && c != '\r' && c != CharStream.EOS && !found )
-                {
-                    if( !lost && c == marker.charAt(testing) )
-                    {
-                        testing++;
-                        if( testing == length )
-                        {
-                            found = true;
-                        }
-                    }
-                    else
-                    {
-                        lost = true;
-                    }
-
-                    raw.append( source.consume() );
-                }
-
-                if( found )
-                {
-                    use  = false;
-                }
-            }
-
-
-            //
-            // It's either our delimiter or a line of data.
-
-            if( use )
-            {
-                read.append( raw );
-            }
-            else
-            {
-                last = true;
-            }
-
-
-            data = read.toString();
-            consumed = -1;
-        }
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/InputStreamCharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/InputStreamCharStream.java
deleted file mode 100644
index b88f2d9..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/InputStreamCharStream.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import java.io.InputStream;
-import java.io.IOException;
-import org.codehaus.groovy.syntax.ReadException;
-
-public class InputStreamCharStream
-    extends AbstractCharStream
-{
-    private InputStream in;
-
-    public InputStreamCharStream(InputStream in)
-    {
-        this.in = in;
-    }
-
-    public InputStreamCharStream(InputStream in,
-                                 String description)
-    {
-        super( description );
-        this.in = in;
-    }
-
-    public InputStream getInputStream()
-    {
-        return in;
-    }
-
-    public char consume()
-        throws ReadException
-    {
-        try
-        {
-            return (char) getInputStream().read();
-        }
-        catch( IOException e )
-        {
-           throw new ReadException( e );
-        }
-    }
-
-    public void close()
-        throws ReadException
-    {
-        try
-        {
-            getInputStream().close();
-        }
-        catch( IOException e )
-        {
-            throw new ReadException( e );
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Lexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Lexer.java
deleted file mode 100644
index e29c6bb..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/Lexer.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- *  The minimal interface provided by all Lexers.
- *
- *  @author Bob Mcwhirter
- *  @author James Strachan
- *  @author John Wilson
- *  @author Chris Poirier
- */
-
-public interface Lexer
-{
-
-
-   /**
-    *  Gets the lexer that is actually doing the <code>nextToken()</code>
-    *  work, if it isn't us.
-    */
-
-    public Lexer getDelegate();
-
-
-
-   /**
-    *  Gets the lexer from which this lexer is obtaining characters.
-    */
-
-    public Lexer getSource();
-
-
-
-   /**
-    *  Finds and returns (consuming) the next token from the underlying stream.
-    *  Returns null when out of tokens.
-    */
-
-    public Token nextToken() throws ReadException, LexerException;
-
-
-
-
-  //---------------------------------------------------------------------------
-  // DELEGATION
-
-
-   /**
-    *  Resets a lexer for reuse.
-    */
-
-    public void reset();
-
-
-
-   /**
-    *  Delegates our duties to another Lexer.
-    */
-
-    public void delegate( Lexer to );
-
-
-
-   /**
-    *  Retakes responsibility for our duties.
-    */
-
-    public void undelegate();
-
-
-
-   /**
-    *  Returns true if we are delegated.
-    */
-
-    public boolean isDelegated();
-
-
-
-   /**
-    *  Sets the source lexer.
-    */
-
-    public void setSource( Lexer source );
-
-
-
-   /**
-    *  Unsets the source lexer.
-    */
-
-    public void unsetSource( );
-
-
-
-   /**
-    *  Returns true if we have an external source.
-    */
-
-    public boolean isExternallySourced();
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-
-   /**
-    *  Returns the current line number.
-    */
-
-    public int getLine();
-
-
-
-   /**
-    *  Returns the current column on that line.
-    */
-
-    public int getColumn();
-
-
-
-
-   /**
-    *  Returns the next character, without consuming it.
-    */
-
-    public char la() throws LexerException, ReadException;
-
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException;
-
-
-
-   /**
-    *  Eats a single character from the input stream.
-    */
-
-    public char consume() throws LexerException, ReadException;
-
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerBase.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerBase.java
deleted file mode 100644
index fe09bc9..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerBase.java
+++ /dev/null
@@ -1,467 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.GroovyBugError;
-
-
-/**
- *  A base class for all other lexers.
- *
- *  @author Bob Mcwhirter
- *  @author James Strachan
- *  @author John Wilson
- *  @author Chris Poirier
- */
-
-public class LexerBase implements Lexer
-{
-
-    protected int startLine;                 // the start line of the current token
-    protected int startColumn;               // the start column of the current token
-
-    protected Lexer delegate = null;         // another lexer currently satisfying our requests
-    protected Lexer source   = null;         // a lexer we are obtaining data from
-
-
-
-   /**
-    *  Initializes the <code>LexerBase</code>.
-    */
-
-    public LexerBase( )
-    {
-    }
-
-
-
-   /**
-    *  Gets the lexer that is actually doing the <code>nextToken()</code>
-    *  work, if it isn't us.
-    */
-
-    public Lexer getDelegate()
-    {
-        return delegate;
-    }
-
-
-
-   /**
-    *  Gets the lexer from which this lexer is obtaining characters.
-    */
-
-    public Lexer getSource()
-    {
-        return source;
-    }
-
-
-
-   /**
-    *  Finds and returns (consuming) the next token from the underlying stream.
-    *  Returns null when out of tokens.  This implementation correctly handles
-    *  delegation, and subclasses implement undelegatedNextToken(), which will
-    *  be called by this routine when appropriate.
-    */
-
-    public Token nextToken() throws ReadException, LexerException
-    {
-        //
-        // If we are delegated, use it until it returns null.
-
-        if( delegate != null )
-        {
-            Token next = delegate.nextToken();
-
-            if( next == null )
-            {
-                undelegate();
-            }
-            else
-            {
-                return next;
-            }
-
-        }
-
-        mark();
-        return undelegatedNextToken();
-    }
-
-
-
-   /**
-    *  Does undelegated nextToken() operations.  You supply your
-    *  lexer-specific nextToken() code by overriding this method.
-    */
-
-    protected Token undelegatedNextToken() throws ReadException, LexerException
-    {
-        return null;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // SPECIAL HANDLERS
-
-
-   /**
-    *  Process an end-of-line marker and returns a NEWLINE token.
-    *  Returns null if not at an end-of-line.
-    */
-
-    protected Token tokenizeEOL() throws LexerException, ReadException
-    {
-        Token token = null;
-
-        char c = la();
-        switch( c )
-        {
-            case '\r':
-            case '\n':
-                token = symbol( Types.NEWLINE );
-
-                consume();
-                if (c == '\r' && la() == '\n')
-                {
-                    consume();
-                }
-        }
-
-        return token;
-    }
-
-
-
-   /**
-    *  Reads an end-of-line marker and writes the text into the
-    *  specified buffer, if supplied.
-    */
-
-    protected boolean readEOL( StringBuffer destination ) throws LexerException, ReadException
-    {
-        boolean read = false;
-
-        char c = la();
-        switch( c )
-        {
-            case '\r':
-            case '\n':
-                if( destination == null )
-                {
-                    consume();
-                    if (c == '\r' && la() == '\n')
-                    {
-                        consume();
-                    }
-                }
-                else
-                {
-                    destination.append( consume() );
-                    if (c == '\r' && la() == '\n')
-                    {
-                        destination.append( consume() );
-                    }
-                }
-
-                read = true;
-        }
-
-        return read;
-    }
-
-
-
-   /**
-    *  Synonym for <code>readEOL(null)</code>.
-    */
-
-    protected void readEOL() throws LexerException, ReadException
-    {
-        readEOL( null );
-    }
-
-
-
-
-
-  //---------------------------------------------------------------------------
-  // DELEGATION
-
-
-   /**
-    *  Resets a lexer for reuse.
-    */
-
-    public void reset()
-    {
-        delegate = null;
-        source   = null;
-    }
-
-
-
-   /**
-    *  Delegates our duties to another Lexer.
-    */
-
-    public void delegate( Lexer to )
-    {
-        this.delegate = to;
-        to.setSource( this );
-    }
-
-
-
-   /**
-    *  Retakes responsibility for our duties.
-    */
-
-    public void undelegate()
-    {
-        if( delegate != null )
-        {
-            delegate.unsetSource( );
-            delegate = null;
-        }
-    }
-
-
-
-   /**
-    *  Sets the source lexer.
-    */
-
-    public void setSource( Lexer source )
-    {
-        if( source == null )
-        {
-            throw new GroovyBugError( "use unsetSource() to remove a source from a lexer" );
-        }
-        this.source = source;
-    }
-
-
-
-   /**
-    *  Unsets the source lexer.
-    */
-
-    public void unsetSource()
-    {
-        this.source = null;
-    }
-
-
-
-   /**
-    *  Returns true if we are delegated to another lexer.
-    */
-
-    public boolean isDelegated()
-    {
-        return delegate != null;
-    }
-
-
-
-   /**
-    *  Returns true if we are obtaining our characters
-    *  from another lexer.
-    */
-
-    public boolean isExternallySourced()
-    {
-        return source != null;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // ERROR HANDLING
-
-
-   /**
-    *  Creates and throws a new <code>UnexpectedCharacterException</code>.
-    */
-
-    protected void unexpected( char c, int offset, String message ) throws UnexpectedCharacterException
-    {
-        throw new UnexpectedCharacterException( getStartLine(), getStartColumn() + offset, c, message );
-    }
-
-
-
-   /**
-    *  Creates and throws a new <code>UnexpectedCharacterException</code>.
-    */
-
-    protected void unexpected( char c, char[] expected, int offset ) throws UnexpectedCharacterException
-    {
-        throw new UnexpectedCharacterException( getStartLine(), getStartColumn() + offset, c, expected );
-    }
-
-
-
-   /**
-    *  Synonym for <code>unexpected( c, null, offset )</code>.
-    */
-
-    protected void unexpected( char c, int offset ) throws UnexpectedCharacterException
-    {
-        unexpected( c, null, offset );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // SUPPORT ROUTINES
-
-
-   /**
-    *  Creates a new symbol token, and allows you to alter the starting
-    *  column.
-    */
-
-    protected Token symbol( int type, int columnOffset )
-    {
-        return Token.newSymbol( type, getStartLine(), getStartColumn() - columnOffset );
-    }
-
-
-
-   /**
-    *  Creates a new symbol token.
-    */
-
-    protected Token symbol( int type )
-    {
-        return Token.newSymbol( type, getStartLine(), getStartColumn() );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-
-   /**
-    *  Returns the current line number.
-    */
-
-    public int getLine()
-    {
-        if( source != null )
-        {
-            return source.getLine();
-        }
-
-        return -1;
-    }
-
-
-
-   /**
-    *  Returns the current column within that line.
-    */
-
-    public int getColumn()
-    {
-        if( source != null )
-        {
-            return source.getColumn();
-        }
-
-        return -1;
-    }
-
-
-
-   /**
-    *  Saves information about the current position, for tracking token extents.
-    */
-
-    protected void mark()
-    {
-        startLine   = getLine();
-        startColumn = getColumn();
-    }
-
-
-
-   /**
-    *  Returns the starting line of the current token.
-    */
-
-    protected int getStartLine()
-    {
-        return this.startLine;
-    }
-
-
-
-   /**
-    *  Returns the starting column of the current token.
-    */
-
-    protected int getStartColumn()
-    {
-        return this.startColumn;
-    }
-
-
-
-   /**
-    *  Returns the next character, without consuming it.
-    */
-
-    public char la() throws LexerException, ReadException
-    {
-        return la(1);
-    }
-
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException
-    {
-        if( source != null )
-        {
-            return source.la(k);
-        }
-        else
-        {
-            return CharStream.EOS;
-        }
-    }
-
-
-
-   /**
-    *  Eats a character from the input stream.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        if( source != null )
-        {
-            return source.consume();
-        }
-        else
-        {
-            return CharStream.EOS;
-        }
-    }
-
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerException.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerException.java
deleted file mode 100644
index 53b8f1b..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerException.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-import org.codehaus.groovy.syntax.SyntaxException;
-
-/** Base exception indicating a lexical error.
- *
- *  @author <a href="mailto:bob@werken.com">bob mcwhirter</a>
- *
- *  @version $Id$
- */
-public class LexerException extends SyntaxException {
-
-    /** 
-     *  @param line Line upon which the error occurred.
-     *  @param column Column upon which the error occurred.
-     */
-    public LexerException(String message, int line, int column) {
-//        super(message + " at " + line + ":" + column, line, column);
-        super(message, line, column);
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerTokenStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerTokenStream.java
deleted file mode 100644
index 9f908e6..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/LexerTokenStream.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.parser.AbstractTokenStream;
-import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.parser.AbstractTokenStream;
-
-
-/**
- *  Implements a <code>TokenStream</code> on a <code>Lexer</code>.
- */
-
-public class LexerTokenStream
-    extends AbstractTokenStream
-{
-    private Lexer lexer;
-
-   /**
-    *  Initializes the <code>LexerTokenStream</code>.
-    */
-
-    public LexerTokenStream(Lexer lexer)
-    {
-        this.lexer = lexer;
-    }
-
-
-   /**
-    *  Returns the underlying <code>Lexer</code>.
-    */
-
-    public Lexer getLexer()
-    {
-        return this.lexer;
-    }
-
-
-   /**
-    *  Returns the next token from the <code>Lexer</code>.
-    */
-
-    public Token nextToken() throws ReadException, SyntaxException
-    {
-        return getLexer().nextToken();
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/ReaderCharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/ReaderCharStream.java
deleted file mode 100644
index 651cdc7..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/ReaderCharStream.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import java.io.Reader;
-import java.io.IOException;
-import org.codehaus.groovy.syntax.ReadException;
-
-public class ReaderCharStream
-    extends AbstractCharStream
-{
-    private Reader in;
-
-    public ReaderCharStream(Reader in)
-    {
-        this.in = in;
-    }
-
-    public ReaderCharStream(Reader in,
-                            String description)
-    {
-        super( description );
-        this.in = in;
-    }
-
-    public Reader getReader()
-    {
-        return in;
-    }
-
-    public char consume()
-        throws ReadException
-    {
-        try
-        {
-            return (char) getReader().read();
-        }
-        catch( IOException e )
-        {
-            throw new ReadException( e );
-        }
-    }
-
-    public void close()
-        throws ReadException
-    {
-        try
-        {
-            getReader().close();
-        }
-        catch( IOException e )
-        {
-            throw new ReadException( e );
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringCharStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringCharStream.java
deleted file mode 100644
index 45071d4..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringCharStream.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-
-public class StringCharStream extends AbstractCharStream {
-    private int cur;
-    private String text;
-
-    public StringCharStream(String text) {
-        this.text = text;
-        this.cur = 0;
-    }
-
-    public StringCharStream(String text, String description) {
-        super(description);
-        this.text = text;
-        this.cur = 0;
-    }
-
-    public char consume() throws ReadException {
-        if (this.cur >= this.text.length()) {
-            return CharStream.EOS;
-        }
-
-        char c = this.text.charAt(this.cur);
-
-        ++this.cur;
-
-        return c;
-    }
-
-    public void close() throws ReadException {
-        // do nothing
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringLexer.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringLexer.java
deleted file mode 100644
index e4c175b..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/StringLexer.java
+++ /dev/null
@@ -1,445 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-//{{{ imports
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.GroovyBugError;
-//}}}
-
-/**
- *  A Lexer for processing standard strings.
- *
- *  @author Chris Poirier
- */
-
-public class StringLexer extends TextLexerBase
-{
-
-    protected String  delimiter = null;
-    protected char    watchFor;
-    protected boolean allowGStrings = false;
-    protected boolean emptyString   = true;   // If set, we need to send an empty string
-
-
-   /**
-    *  If set true, the filter will allow \\ and \$ to pass through unchanged.
-    *  You should set this appropriately BEFORE setting source!
-    */
-
-    public void allowGStrings( boolean allow )
-    {
-        allowGStrings = allow;
-    }
-
-
-
-   /**
-    *  Returns a single STRING, then null.   The STRING is all of the processed
-    *  input.  Backslashes are stripped, with the \r, \n, and \t converted
-    *  appropriately.
-    */
-
-    public Token undelegatedNextToken( ) throws ReadException, LexerException
-    {
-        if( emptyString )
-        {
-            emptyString = false;
-            return Token.newString( "", getStartLine(), getStartColumn() );
-        }
-        else if( finished )
-        {
-            return null;
-        }
-        else
-        {
-            StringBuffer string = new StringBuffer();
-
-            while( la(1) != CharStream.EOS )
-            {
-                string.append( consume() );
-            }
-            
-            if( la(1) == CharStream.EOS && string.length() == 0 )
-            {
-                finished = true;
-            }
-
-            return Token.newString( string.toString(), getStartLine(), getStartColumn() );
-        }
-    }
-
-
-
-   /**
-    *  Controls delimiter search.  When turned on, the first thing we do
-    *  is check for and eat our delimiter.
-    */
-
-    public void delimit( boolean delimit )
-    {
-        super.delimit( delimit );
-
-        if( delimit )
-        {
-            try
-            {
-                if( !finished && la(1) == CharStream.EOS )
-                {
-                    finishUp();
-
-                    //
-                    // The GStringLexer will correctly handle the empty string.
-                    // We don't.  In order to ensure that an empty string is
-                    // supplied, we set a flag that is checked during
-                    // undelegatedNextToken().
-
-                    if( !allowGStrings )
-                    {
-                        emptyString = true;
-                    }
-                }
-            }
-            catch( Exception e )
-            {
-                finished = true;
-            }
-        }
-    }
-
-
-
-
-   /**
-    *  Sets the source lexer and identifies and consumes the opening delimiter.
-    */
-
-    public void setSource( Lexer source )
-    {
-        super.setSource( source );
-
-        emptyString = false;
-
-        try
-        {
-            char c = source.la();
-            switch( c )
-            {
-                case '\'':
-                case '"':
-                    mark();
-                    source.consume();
-
-                    if( source.la() == c && source.la(2) == c )
-                    {
-                        source.consume(); source.consume();
-                        delimiter = new StringBuffer().append(c).append(c).append(c).toString();
-                    }
-                    else
-                    {
-                        delimiter = new StringBuffer().append(c).toString();
-                    }
-
-                    watchFor = delimiter.charAt(0);
-                    break;
-
-
-                default:
-                {
-                    throw new GroovyBugError( "at the time of StringLexer.setSource(), the source must be on a single or double quote" );
-                }
-            }
-
-            restart();
-            delimit( true );
-        }
-        catch( Exception e )
-        {
-            //
-            // If we couldn't read our delimiter, we'll just
-            // cancel our source.  nextToken() will return null.
-
-            e.printStackTrace();
-            unsetSource( );
-        }
-    }
-
-
-
-   /**
-    *  Unsets our source.
-    */
-
-    public void unsetSource()
-    {
-        super.unsetSource();
-        delimiter   = null;
-        finished    = true;
-        emptyString = false;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-    private int    lookahead  = 0;             // the number of characters identified
-    private char[] characters = new char[3];   // the next characters identified by la()
-    private int[]  widths     = new int[3];    // the source widths of the next characters
-
-
-    public char la() throws LexerException, ReadException
-    {
-		return la(1);
-    }
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException
-    {
-
-        if( !finished && source != null )
-        {
-
-            if( delimited )
-            {
-
-                if( k > characters.length )
-                {
-                    throw new GroovyBugError( "StringLexer lookahead tolerance exceeded" );
-                }
-
-                if( lookahead >= k && k >= 1)
-                {
-                    lookahead = 1;
-                    return characters[k-1];
-                }
-
-                lookahead = 0;
-
-                char c = ' ', c1 = ' ', c2 = ' ';
-                int offset = 1, width = 0;
-                for( int i = 1; i <= k; i++ )
-                {
-                    c1 = source.la(offset);
-                    C1_SWITCH: switch( c1 )
-                    {
-                        case CharStream.EOS:
-                        {
-                            return c1;
-                        }
-
-                        case '\\':
-                        {
-                            c2 = source.la( offset + 1 );
-
-                            ESCAPE_SWITCH: switch( c2 )
-                            {
-
-                                case CharStream.EOS:
-                                    return c2;
-
-                                case '\\':
-                                    c = '\\';
-                                    characters[0] = c;
-                                    widths[0] = 2;
-                                    lookahead = 1;
-                                    return c;
-
-                                case 'n':
-                                    c = '\n';
-                                    width = 2;
-                                    break ESCAPE_SWITCH;
-
-                                case 'r':
-                                    c = '\r';
-                                    width = 2;
-                                    break ESCAPE_SWITCH;
-
-                                case 't':
-                                    c = '\t';
-                                    width = 2;
-                                    break ESCAPE_SWITCH;
-
-                                case 'b':
-                                    c = '\b';
-                                    width = 2;
-                                    break ESCAPE_SWITCH;
-
-                                case 'f':
-                                    c = '\f';
-                                    width = 2;
-                                    break ESCAPE_SWITCH;
-
-                                case '$':
-                                    if ( allowGStrings )
-                                    {
-                                        c = c1;
-                                        width = 1;
-                                    }
-                                    else
-                                    {
-                                        c = c2;
-                                        width = 2;
-                                    }
-                                    break ESCAPE_SWITCH;
-
-
-                                case '"':
-                                case '\'':
-                                    c = c2;
-                                    characters[0] = c;
-                                    widths[0] = 2;
-                                    lookahead = 1;
-                                    return c;
-
-                                default:
-                                    c = '\\';
-                                    characters[0] = c;
-                                    widths[0] = 1;
-                                    lookahead = 1;
-                                    return c;
-                            }
-                            break C1_SWITCH;
-                        }
-
-                        default:
-                        {
-                            if( c1 == watchFor )
-                            {
-                                boolean atEnd = true;
-                                if (delimiter.length() == 1)
-                                {
-                                    if (source.la(offset) != watchFor)
-                                    {
-                                        atEnd = false;
-                                        c = c1;
-                                        break C1_SWITCH;
-                                    }
-                                }
-                                else {
-                                    for( int j = 1; j < delimiter.length(); j++ )
-                                    {
-                                        if( source.la(offset+j) != delimiter.charAt(j) )
-                                        {
-                                            atEnd = false;
-                                            break;
-                                        }
-                                    }
-                                }
-
-                                if( atEnd )
-                                {
-                                    return CharStream.EOS;
-                                }
-                            }
-
-                            c = c1;
-                            width = 1;
-                            if (c == '$' && allowGStrings)
-                            {
-                                lookahead = 0;
-                            }
-                            break C1_SWITCH;
-                        }
-                    }
-
-
-                    characters[lookahead] = c;
-                    widths[lookahead]     = width;
-
-                    offset += width;
-                    lookahead += 1;
-                }
-
-                return c;                                         // <<< FLOW CONTROL <<<<<<<<<
-            }
-
-            lookahead = 0;
-            return source.la(k);
-        }
-
-        return CharStream.EOS;
-
-    }
-
-
-
-   /**
-    *  Eats a character from the input stream.  Searches for the delimiter if
-    *  delimited.  Note that turning delimiting on also checks if we are at the
-    *  delimiter, so if we aren't finished, there is something to consume.
-    */
-
-    public char consume() throws LexerException, ReadException
-    {
-        if( !finished && source != null )
-        {
-            char c = CharStream.EOS;
-
-            if( delimited )
-            {
-                if( lookahead < 1 )
-                {
-                    la( 1 );
-                }
-
-                if( lookahead >= 1 )
-                {
-                    c = characters[0];
-                    for( int i = 0; i < widths[0]; i++ )
-                    {
-                        source.consume();
-                    }
-
-                    lookahead = 0;
-                }
-
-                if( la(1) == CharStream.EOS )
-                {
-                    finishUp();
-                }
-            }
-            else
-            {
-                c = source.consume();
-            }
-
-            lookahead = 0;
-            return c;
-        }
-
-        return CharStream.EOS;
-    }
-
-
-
-   /**
-    *  Eats our delimiter from the stream and marks us finished.
-    */
-
-    protected void finishUp() throws LexerException, ReadException
-    {
-        for( int i = 0; i < delimiter.length(); i++ )
-        {
-            char c = source.la(1);
-            if( c == CharStream.EOS )
-            {
-                throw new UnterminatedStringLiteralException(getStartLine(), getStartColumn());
-            }
-            else if( c == delimiter.charAt(i) )
-            {
-                source.consume();
-            }
-            else
-            {
-                throw new GroovyBugError( "la() said delimiter [" + delimiter + "], finishUp() found [" + c + "]" );
-            }
-        }
-
-        finish();
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/TextLexerBase.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/TextLexerBase.java
deleted file mode 100644
index c3ed838..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/TextLexerBase.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import org.codehaus.groovy.syntax.ReadException;
-
-/**
- *  A base class for Lexers that process embedded text.
- * 
- *  @author Chris Poirier
- */
-
-public class TextLexerBase extends LexerBase implements Delimiter 
-{
-
-    protected boolean delimited = true;   // When true, the lexer can do its delimiting
-    protected boolean finished  = true;   // When true, the lexer is dry
-
-
-   /**
-    *  Turns delimiting on or off.  This should affect <code>la()</code>
-    *  and <code>consume()</code>.  However, once the delimiter has been
-    *  reached, this routine should have no effect.
-    */
-
-    public void delimit( boolean delimited ) 
-    {
-        this.delimited = delimited;
-    }
-
-
-
-   /**
-    *  Returns true if the lexer is applying its delimiter policy.
-    */
-
-    public boolean isDelimited() 
-    {
-        return this.delimited;
-    }
-
-
-
-   /**
-    *  Returns true if the lexer stream is dry.
-    */
-
-    public boolean isFinished() 
-    {
-        return finished;
-    }
-
-
-
-   /**
-    *  Restarts the lexer stream after a <code>finish()</code>
-    *  and some intevening act (like a new source).
-    */
-
-    protected void restart() 
-    {
-        finished = false;
-    }
-
-
-
-   /**
-    *  Stops the lexer stream.
-    */
-
-    protected void finish() 
-    {
-        finished = true;
-    }
-
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STREAM ROUTINES
-
-
-   /**
-    *  Returns the next <code>k</code>th character, without consuming any.
-    */
-
-    public char la(int k) throws LexerException, ReadException 
-    {
-        if( finished ) 
-        {
-            return CharStream.EOS;
-        }
-        else if( source != null ) 
-        {
-            return source.la(k);
-        }
-        else 
-        {
-            return CharStream.EOS;
-        }
-    }
-
-
-
-   /**
-    *  Eats a character from the input stream.
-    */
-
-    public char consume() throws LexerException, ReadException 
-    {
-        if( finished ) 
-        {
-            return CharStream.EOS;
-        }
-        else if( source != null ) 
-        {
-            return source.consume();
-        }
-        else 
-        {
-            return CharStream.EOS;
-        }
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnexpectedCharacterException.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnexpectedCharacterException.java
deleted file mode 100644
index 02a92c1..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnexpectedCharacterException.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-public class UnexpectedCharacterException extends LexerException {
-    private char c;
-    private char[] expected;
-    private String message;
-
-    public UnexpectedCharacterException(int line, int column, char c, String message) {
-        super("unexpected character: " + c + (message == null ? "" : "; " + message), line, column);
-        this.c = c;
-        this.expected = null;
-        this.message  = message;
-    }
-
-    public UnexpectedCharacterException(int line, int column, char c, char[] expected) {
-        super("unexpected character: " + c, line, column);
-        this.c = c;
-        this.expected = expected;
-        this.message  = null;
-    }
-
-    public char getCharacter() {
-        return this.c;
-    }
-
-    public char[] getExpected() {
-        return this.expected;
-    }
-
-    public String getMessage() {
-        StringBuffer message = new StringBuffer();
-
-        if( this.message != null ) {
-            message.append( message );
-        }
-        else if( this.expected != null ) {
-            message.append("expected ");
-            if (this.expected.length == 1) {
-                message.append("'" + this.expected[0] + "'");
-            }
-            else {
-                message.append("one of {");
-
-                for (int i = 0; i < this.expected.length; ++i) {
-                    message.append("'" + this.expected[i] + "'");
-
-                    if (i < (this.expected.length - 1)) {
-                        message.append(", ");
-                    }
-                }
-
-                message.append("}");
-            }
-        }
-
-        message.append( "; found '" ).append( c ).append( "'" );
-
-        return message.toString();
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnterminatedStringLiteralException.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnterminatedStringLiteralException.java
deleted file mode 100644
index 7cb80e6..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/UnterminatedStringLiteralException.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-public class UnterminatedStringLiteralException extends LexerException {
-    public UnterminatedStringLiteralException(int line, int column) {
-        super("unterminated string literal", line, column);
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/package.html b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/package.html
deleted file mode 100644
index 54ca25b..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/lexer/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-  <head>
-    <title>package org.codehaus.groovy.syntax.lexer.*</title>
-  </head>
-  <body>
-    <p>Lexer.</p>
-  </body>
-</html>
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ASTBuilder.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ASTBuilder.java
deleted file mode 100644
index 6188a12..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ASTBuilder.java
+++ /dev/null
@@ -1,2081 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.syntax.parser;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.List;
-import java.util.ArrayList;
-
-import groovy.lang.BitwiseNegateEvaluatingException;
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.InnerClassNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.MixinNode;
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.PropertyNode;
-import org.codehaus.groovy.ast.Type;
-import org.codehaus.groovy.ast.expr.ArrayExpression;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.BooleanExpression;
-import org.codehaus.groovy.ast.expr.CastExpression;
-import org.codehaus.groovy.ast.expr.ClassExpression;
-import org.codehaus.groovy.ast.expr.ClosureExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.GStringExpression;
-import org.codehaus.groovy.ast.expr.ListExpression;
-import org.codehaus.groovy.ast.expr.MapExpression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.expr.NegationExpression;
-import org.codehaus.groovy.ast.expr.BitwiseNegExpression;
-import org.codehaus.groovy.ast.expr.NotExpression;
-import org.codehaus.groovy.ast.expr.PostfixExpression;
-import org.codehaus.groovy.ast.expr.PrefixExpression;
-import org.codehaus.groovy.ast.expr.PropertyExpression;
-import org.codehaus.groovy.ast.expr.RangeExpression;
-import org.codehaus.groovy.ast.expr.RegexExpression;
-import org.codehaus.groovy.ast.expr.TernaryExpression;
-import org.codehaus.groovy.ast.expr.TupleExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.AssertStatement;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.ast.stmt.BreakStatement;
-import org.codehaus.groovy.ast.stmt.CaseStatement;
-import org.codehaus.groovy.ast.stmt.CatchStatement;
-import org.codehaus.groovy.ast.stmt.ContinueStatement;
-import org.codehaus.groovy.ast.stmt.DoWhileStatement;
-import org.codehaus.groovy.ast.stmt.EmptyStatement;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.ForStatement;
-import org.codehaus.groovy.ast.stmt.IfStatement;
-import org.codehaus.groovy.ast.stmt.ReturnStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.ast.stmt.SwitchStatement;
-import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
-import org.codehaus.groovy.ast.stmt.ThrowStatement;
-import org.codehaus.groovy.ast.stmt.TryCatchStatement;
-import org.codehaus.groovy.ast.stmt.WhileStatement;
-import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.Numbers;
-import org.codehaus.groovy.syntax.ASTHelper;
-import org.codehaus.groovy.syntax.ParserException;
-import org.codehaus.groovy.syntax.CSTNode;
-import org.codehaus.groovy.GroovyBugError;
-import org.objectweb.asm.Constants;
-
-
-
-/**
- *  Builds an Abstract Syntax Tree from the Concrete Syntax Tree produced
- *  by the Parser.  The resulting AST is very preliminary, and must still
- *  be validated and massaged before it is ready to be used.
- *  <code>build()</code> is the primary entry point.
- *
- *  @author James Strachan
- *  @author Bob McWhirter
- *  @author Sam Pullara
- *  @author Chris Poirier
- */
-
-public class ASTBuilder extends ASTHelper
-{
-
-    public ASTBuilder( SourceUnit sourceUnit, ClassLoader classLoader )
-    {
-        super(sourceUnit, classLoader);
-    }
-
-
-
-
-    //---------------------------------------------------------------------------
-  // ENTRY POINT
-
-
-   /**
-    *  Builds an AST ModuleNode from a Parser.module() Reduction.
-    */
-
-    public ModuleNode build( CSTNode input ) throws ParserException
-    {
-        makeModule();
-
-       //
-        // input structure:
-        //    1: package
-        //    2: imports
-        //   3+: statements
-
-        setPackageName( packageDeclaration( input.get(1) ));
-
-        importStatements(input.get(2) );
-
-        for( int i = 3; i < input.size(); ++i )
-        {
-            topLevelStatement( output, input.get(i) );
-        }
-
-        if( output.isEmpty() )
-        {
-            output.addStatement( new BlockStatement() );
-        }
-
-        return output;
-    }
-
-
-
-
-    //---------------------------------------------------------------------------
-  // DECLARATIONS
-
-
-   /**
-    *  Processes the Reduction produced by Parser.packageDeclaration().
-    */
-
-    protected String packageDeclaration( CSTNode reduction )
-    {
-        if( reduction.hasChildren() )
-        {
-            return makeName( reduction.get(1) );
-        }
-
-        return null;
-
-    }
-
-
-
-   /**
-    *  Processes the imports Reduction produced by Parser.module().
-    */
-
-    protected void importStatements(CSTNode container)
-    {
-        for( int i = 1; i < container.size(); ++i)
-        {
-            importStatement( container.get(i) );
-        }
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.importStatement().
-    */
-
-    protected void importStatement(CSTNode reduction)
-    {
-        //
-        // First, get the package name (if supplied).
-
-        String importPackage = makeName( reduction.get(1), null );
-
-
-
-        //
-        // If the first clause is Types.STAR, it's a package import.
-
-        if( reduction.get(2).isA(Types.STAR) )
-        {
-            importPackageWithStar(importPackage);
-        }
-
-
-        //
-        // Otherwise, it's a series of specific imports.
-
-        else
-        {
-            for( int i = 2; i < reduction.size(); i++ )
-            {
-                CSTNode clause = reduction.get(i);
-                String  name   = identifier( clause );
-                String  as     = (clause.hasChildren() ? identifier(clause.get(1)) : name);
-
-                importClass(importPackage, name, as);
-
-            }
-        }
-    }
-
-
-    /**
-    *  Processes the Reduction produced by Parser.topLevelStatement().
-    */
-
-    protected void topLevelStatement( ModuleNode module, CSTNode reduction ) throws ParserException
-    {
-        int type = reduction.getMeaning();
-        switch( type )
-        {
-            case Types.SYNTH_CLASS:
-                module.addClass( classDeclaration(null, reduction) );
-                break;
-
-            case Types.SYNTH_INTERFACE:
-                module.addClass( interfaceDeclaration(null, reduction) );
-                break;
-
-            case Types.SYNTH_METHOD:
-                module.addMethod( methodDeclaration(null, reduction) );
-                break;
-
-            default:
-                module.addStatement( statement(reduction) );
-                break;
-        }
-
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.classDeclaration().
-    */
-
-    protected ClassNode classDeclaration( ClassNode context, CSTNode reduction ) throws ParserException
-    {
-        //
-        // Calculate the easy stuff
-
-        String   name = identifier( reduction );
-        addNewClassName(name);
-        int modifiers = modifiers( reduction.get(1) );
-        String parent = resolveName( reduction.get(2).get(1) );
-
-
-        //
-        // Then process the interface list.
-
-        CSTNode  interfaceReduction = reduction.get(3);
-        String[] interfaces = new String[interfaceReduction.children()];
-        for( int i = 1; i < interfaceReduction.size(); i++ )
-        {
-            interfaces[i-1] = resolveName( interfaceReduction.get(i) );
-        }
-
-
-        //
-        // Create the class.
-
-        ClassNode classNode = (
-            context == null
-                ? new ClassNode(               dot(getPackageName(), name), modifiers, parent, interfaces, MixinNode.EMPTY_ARRAY )
-                : new InnerClassNode( context, dot(getPackageName(), name), modifiers, parent, interfaces, MixinNode.EMPTY_ARRAY )
-        );
-
-        classNode.setCSTNode( reduction.get(0) );
-        typeBody( classNode, reduction.get(4), 0, 0 );
-        return classNode;
-    }
-
-
-    /**
-    *  Processes a type body for classDeclaration() and others.
-    */
-
-    protected void typeBody( ClassNode classNode, CSTNode body, int propertyModifiers, int methodModifiers ) throws ParserException
-    {
-        for( int i = 1; i < body.size(); i++ )
-        {
-            CSTNode statement = body.get(i);
-            switch( statement.getMeaning() )
-            {
-                case Types.SYNTH_PROPERTY:
-                    addPropertyDeclaration( classNode, statement, propertyModifiers );
-                    break;
-
-                case Types.SYNTH_METHOD:
-                    methodDeclaration( classNode, statement, methodModifiers );
-                    break;
-
-                case Types.SYNTH_CLASS:
-                    classDeclaration( classNode, statement );
-                    break;
-
-                case Types.SYNTH_INTERFACE:
-                    interfaceDeclaration( classNode, statement );
-                    break;
-
-                default:
-                    throw new GroovyBugError( "unrecognized type body statement [" + statement.toString() + "]" );
-            }
-        }
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.propertyDeclaration().
-    *  Adds the property to the supplied class.
-    */
-
-    protected void addPropertyDeclaration( ClassNode classNode, CSTNode reduction, int extraModifiers ) throws ParserException
-    {
-        String   name = identifier( reduction );
-        int modifiers = modifiers( reduction.get(1) ) | extraModifiers;
-        String   type = resolveName( reduction.get(2) );
-
-        Expression value = reduction.size() > 3 ? expression(reduction.get(3)) : null;
-
-        PropertyNode propertyNode = classNode.addProperty( name, modifiers, type, value, null, null );
-        propertyNode.setCSTNode( reduction.get(0) );
-
-    }
-
-
-
-   /**
-    *  A synonym for <code>addPropertyDeclaration( classNode, reduction, 0 )</code>.
-    */
-
-    protected void addPropertyDeclaration( ClassNode classNode, CSTNode reduction ) throws ParserException
-    {
-        addPropertyDeclaration( classNode, reduction, 0 );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.methodDeclaration().
-    *  Adds the method to the supplied class.
-    */
-
-    protected MethodNode methodDeclaration( ClassNode classNode, CSTNode reduction, int extraModifiers ) throws ParserException
-    {
-        String className = null;
-        if( classNode != null  )
-        {
-            className = classNode.getNameWithoutPackage();
-        }
-
-
-        //
-        // Get the basic method data
-
-        String   name = identifier( reduction );
-        int modifiers = modifiers( reduction.get(1) ) | extraModifiers;
-        String   type = resolveName( reduction.get(2) );
-
-        Parameter[] parameters = parameterDeclarations( reduction.get(3) );
-        BlockStatement    body = statementBody( reduction.get(5) );
-
-
-        //
-        // Process the throws clause
-
-        CSTNode  clause     = reduction.get(4);
-        String[] throwTypes = new String[clause.children()];
-        for( int i = 1; i < clause.size(); i++ )
-        {
-            throwTypes[i-1] = resolveName( clause.get(i) );
-        }
-
-        if( clause.hasChildren() ) { throw new GroovyBugError( "NOT YET IMPLEMENTED: throws clause" ); }
-
-
-        //
-        // An unnamed method is a static initializer
-
-        if( name.length() == 0 )
-        {
-            throw new GroovyBugError( "NOT YET IMPLEMENTED: static initializers" );
-
-            /*
-
-            ConstructorNode node = new ConstructorNode( modifiers | Constants.ACC_STATIC, parameters, body );
-            node.setCSTNode( reduction.get(0) );
-
-            classNode.addConstructor( node );
-            return null;
-
-            */
-        }
-
-
-        //
-        // A method with the class name is a constructor
-
-        else if( className != null && name.equals(className) )
-        {
-            ConstructorNode node = new ConstructorNode( modifiers, parameters, body );
-            node.setCSTNode( reduction.get(0) );
-
-            classNode.addConstructor( node );
-            return null;
-        }
-
-
-        //
-        // Anything else is a plain old method
-
-        else
-        {
-            MethodNode method = new MethodNode( name, modifiers, type, parameters, body );
-            method.setCSTNode( reduction.get(0) );
-
-            if( classNode != null )
-            {
-                classNode.addMethod( method );
-            }
-
-            return method;
-        }
-
-    }
-
-
-
-   /**
-    *  A synonym for <code>methodDeclaration( classNode, reduction, 0 )</code>.
-    */
-
-    protected MethodNode methodDeclaration( ClassNode classNode, CSTNode reduction ) throws ParserException
-    {
-        return methodDeclaration( classNode, reduction, 0 );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.parameterDeclarationList().
-    */
-
-    protected Parameter[] parameterDeclarations( CSTNode reduction ) throws ParserException
-    {
-        Parameter[] parameters = new Parameter[ reduction.children() ];
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            CSTNode node = reduction.get(i);
-
-            String identifier = identifier( node );
-            String type       = resolveName( node.get(1) );
-
-            if( node.size() > 2 )
-            {
-                parameters[i-1] = new Parameter( type, identifier, expression(node.get(2)) );
-            }
-            else
-            {
-                parameters[i-1] = new Parameter( type, identifier );
-            }
-        }
-
-        return parameters;
-
-    }
-
-
-
-   /**
-    * Processes the Reduction produced by Parser.interfaceDeclaration().
-    */
-
-    protected ClassNode interfaceDeclaration( ClassNode context, CSTNode reduction ) throws ParserException
-    {
-        throw new GroovyBugError( "NOT YET IMPLEMENTED: interfaces" );
-
-        /*
-
-        //
-        // Calculate the easy stuff
-
-        String   name = identifier( reduction );
-        int modifiers = modifiers( reduction.get(1) ) | Constants.ACC_ABSTRACT | Constants.ACC_STATIC;
-        String parent = null;
-
-
-        //
-        // Then process the interface list.
-
-        CSTNode  interfaceReduction = reduction.get(3);
-        String[] interfaces = new String[interfaceReduction.children()];
-        for( int i = 1; i < interfaceReduction.size(); i++ )
-        {
-            interfaces[i-1] = resolveName( interfaceReduction.get(i) );
-        }
-
-
-        //
-        // Create the interface.
-
-        ClassNode classNode = (
-            context == null
-                ? new ClassNode(               dot(getPackageName(), name), modifiers, parent, interfaces, MixinNode.EMPTY_ARRAY )
-                : new InnerClassNode( context, dot(getPackageName(), name), modifiers, parent, interfaces, MixinNode.EMPTY_ARRAY )
-        );
-
-        classNode.setCSTNode( reduction.get(0) );
-
-        int propertyModifiers = Constants.ACC_STATIC | Constants.ACC_FINAL | Constants.ACC_PUBLIC;
-        int methodModifiers   = Constants.ACC_ABSTRACT;
-
-        typeBody( classNode, reduction.get(4), propertyModifiers, methodModifiers );
-
-
-        return classNode;
-
-        */
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // STATEMENTS
-
-
-   /**
-    *  Processes the Reduction that results from Parser.statementBody().
-    */
-
-    protected BlockStatement statementBody( CSTNode reduction ) throws ParserException
-    {
-        if( reduction.isEmpty() )
-        {
-            return new BlockStatement();
-        }
-        else if( reduction.getMeaning() == Types.LEFT_CURLY_BRACE )
-        {
-            return statementBlock( reduction );
-        }
-        else
-        {
-            Statement statement = statement( reduction );
-            statement.setCSTNode( reduction );
-
-            BlockStatement block = null;
-            if( statement instanceof BlockStatement )
-            {
-                block = (BlockStatement)statement;
-            }
-            else
-            {
-                block = new BlockStatement();
-                block.addStatement( statement );
-            }
-
-            return block;
-        }
-    }
-
-
-
-   /**
-    *  Processes any series of statements, starting at the specified offset
-    *  and running to the end of the CSTNode.
-    */
-
-    protected BlockStatement statements( CSTNode reduction, int first ) throws ParserException
-    {
-        BlockStatement block = new BlockStatement();
-
-        for( int i = first; i < reduction.size(); i++ )
-        {
-            CSTNode statementReduction = reduction.get(i);
-
-            Statement statement = statement( statementReduction );
-            statement.setCSTNode( statementReduction );
-
-            block.addStatement( statement );
-        }
-
-        return block;
-    }
-
-
-
-   /**
-    *  Processes any statement block.
-    */
-
-    protected BlockStatement statementBlock( CSTNode reduction ) throws ParserException
-    {
-        return statements( reduction, 1 );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.statement().
-    */
-
-    protected Statement statement( CSTNode reduction ) throws ParserException
-    {
-        Statement statement = null;
-
-        //
-        // Convert the statement
-
-        switch( reduction.getMeaning() )
-        {
-            case Types.KEYWORD_ASSERT:
-            {
-                statement = assertStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_BREAK:
-            {
-                statement = breakStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_CONTINUE:
-            {
-                statement = continueStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_IF:
-            {
-                statement = ifStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_RETURN:
-            {
-                statement = returnStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_SWITCH:
-            {
-                statement = switchStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_SYNCHRONIZED:
-            {
-                statement = synchronizedStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_THROW:
-            {
-                statement = throwStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_TRY:
-            {
-                statement = tryStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_FOR:
-            {
-                statement = forStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_WHILE:
-            {
-                statement = whileStatement( reduction );
-                break;
-            }
-
-            case Types.KEYWORD_DO:
-            {
-                statement = doWhileStatement( reduction );
-                break;
-            }
-
-            case Types.SYNTH_BLOCK:
-            case Types.LEFT_CURLY_BRACE:
-            {
-                statement = statementBlock( reduction );
-                break;
-            }
-
-            case Types.SYNTH_LABEL:
-            {
-                statement = statement( reduction.get(1) );
-                statement.setStatementLabel( identifier(reduction) );
-                break;
-            }
-
-            case Types.SYNTH_CLOSURE:
-            default:
-            {
-                statement = expressionStatement( reduction );
-                break;
-            }
-
-        }
-
-
-        statement.setCSTNode( reduction );
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.assertStatement().
-    */
-
-    protected AssertStatement assertStatement( CSTNode reduction ) throws ParserException
-    {
-        BooleanExpression expression = new BooleanExpression( expression(reduction.get(1)) );
-
-        if( reduction.children() > 1 )
-        {
-            return new AssertStatement( expression, expression(reduction.get(2)) );
-        }
-
-        return new AssertStatement( expression, ConstantExpression.NULL );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.breakStatement().
-    */
-
-    protected BreakStatement breakStatement( CSTNode reduction ) throws ParserException
-    {
-        if( reduction.hasChildren() )
-        {
-            return new BreakStatement( reduction.get(1).getRootText() );
-        }
-
-        return new BreakStatement();
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.continueStatement().
-    */
-
-    protected ContinueStatement continueStatement( CSTNode reduction ) throws ParserException
-    {
-
-        if( reduction.hasChildren() )
-        {
-            return new ContinueStatement( reduction.get(1).getRootText() );
-        }
-
-        return new ContinueStatement();
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.ifStatement().
-    */
-
-    protected IfStatement ifStatement( CSTNode reduction ) throws ParserException
-    {
-        Expression condition = expression( reduction.get(1) );
-        BlockStatement  body = statementBody( reduction.get(2) );
-        Statement  elseBlock = EmptyStatement.INSTANCE;
-
-        if( reduction.size() > 3 )
-        {
-            CSTNode elseReduction = reduction.get(3);
-            if( elseReduction.getMeaning() == Types.KEYWORD_IF )
-            {
-                elseBlock = ifStatement( elseReduction );
-            }
-            else
-            {
-                elseBlock = statementBody( elseReduction.get(1) );
-            }
-
-        }
-
-        return new IfStatement( new BooleanExpression(condition), body, elseBlock );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.returnStatement().
-    */
-
-    protected ReturnStatement returnStatement( CSTNode reduction ) throws ParserException
-    {
-        if( reduction.hasChildren() )
-        {
-            return new ReturnStatement( expression(reduction.get(1)) );
-        }
-
-        return ReturnStatement.RETURN_NULL_OR_VOID;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.switchStatement().
-    */
-
-    protected SwitchStatement switchStatement( CSTNode reduction ) throws ParserException
-    {
-        SwitchStatement statement = new SwitchStatement( expression(reduction.get(1)) );
-
-        for( int i = 2; i < reduction.size(); i++ )
-        {
-            CSTNode child = reduction.get(i);
-
-            switch( child.getMeaning() )
-            {
-
-                case Types.KEYWORD_CASE:
-                    statement.addCase( caseStatement(child) );
-                    break;
-
-                case Types.KEYWORD_DEFAULT:
-                    statement.setDefaultStatement( statementBlock(child) );
-                    break;
-
-                default:
-                    throw new GroovyBugError( "invalid something in switch [" + child + "]" );
-            }
-        }
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.switchStatement() for cases.
-    */
-
-    protected CaseStatement caseStatement( CSTNode reduction ) throws ParserException
-    {
-        return new CaseStatement( expression(reduction.get(1)), statements(reduction, 2) );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.synchronizedStatement().
-    */
-
-    protected SynchronizedStatement synchronizedStatement( CSTNode reduction ) throws ParserException
-    {
-        return new SynchronizedStatement( expression(reduction.get(1)), statementBody(reduction.get(2)) );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.throwStatement().
-    */
-
-    protected ThrowStatement throwStatement( CSTNode reduction ) throws ParserException
-    {
-        return new ThrowStatement( expression(reduction.get(1)) );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.tryStatement().
-    */
-
-    protected TryCatchStatement tryStatement( CSTNode reduction ) throws ParserException
-    {
-        BlockStatement         body = statementBody( reduction.get(1) );
-        BlockStatement finallyBlock = statementBody( reduction.get(3) );
-
-        TryCatchStatement statement = new TryCatchStatement( body, finallyBlock );
-
-        CSTNode catches = reduction.get(2);
-        for( int i = 1; i < catches.size(); i++ )
-        {
-            CSTNode   element = catches.get(i);
-            String       type = resolveName( element.get(1) );
-            String identifier = identifier( element.get(2) );
-
-            statement.addCatch( new CatchStatement(type, identifier, statementBody(element.get(3))) );
-        }
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.forStatement().
-    */
-
-    protected ForStatement forStatement( CSTNode reduction ) throws ParserException
-    {
-        CSTNode header = reduction.get(1);
-        Statement body = statementBody( reduction.get(2) );
-
-
-        //
-        // If the header has type Types.UNKNOWN, it's a standard for loop.
-
-        if( header.getMeaning() == Types.UNKNOWN )
-        {
-            Expression[] init = expressions( header.get(1) );
-            Expression   test = expression(  header.get(2) );
-            Expression[] incr = expressions( header.get(3) );
-
-            throw new GroovyBugError( "NOT YET IMPLEMENTED: standard for loop" );
-        }
-
-
-        //
-        // Otherwise, it's a for each loop.
-
-        else
-        {
-
-            Type         type = typeExpression( header.get(1) );
-            String identifier = identifier(  header.get(2) );
-            Expression source = expression(  header.get(3) );
-
-            return new ForStatement( identifier, type, source, body );
-        }
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.doWhileStatement().
-    */
-
-    protected DoWhileStatement doWhileStatement( CSTNode reduction ) throws ParserException
-    {
-        Expression condition = expression( reduction.get(2) );
-        BlockStatement  body = statementBody( reduction.get(1) );
-
-        return new DoWhileStatement( new BooleanExpression(condition), body );
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.whileStatement().
-    */
-
-    protected WhileStatement whileStatement( CSTNode reduction ) throws ParserException
-    {
-        Expression condition = expression( reduction.get(1) );
-        BlockStatement  body = statementBody( reduction.get(2) );
-
-        return new WhileStatement( new BooleanExpression(condition), body );
-
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // EXPRESSIONS
-
-
-   /**
-    *  Processes any expression that forms a complete statement.
-    */
-
-    protected Statement expressionStatement( CSTNode node ) throws ParserException
-    {
-        return new ExpressionStatement( expression(node) );
-    }
-
-
-
-   /**
-    *  Processes a series of expression to an Expression[].
-    */
-
-    protected Expression[] expressions( CSTNode reduction ) throws ParserException
-    {
-        Expression[] expressions = new Expression[ reduction.children() ];
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            expressions[i-1] = expression( reduction.get(i) );
-        }
-
-        return expressions;
-    }
-
-
-
-   /**
-    *  Processes the CSTNode produced by Parser.expression().
-    */
-
-    protected Expression expression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression = null;
-
-        int type = reduction.getMeaningAs( EXPRESSION_HANDLERS );
-        switch( type )
-        {
-            case Types.SYNTHETIC:
-            {
-                expression = syntheticExpression( reduction );
-                break;
-            }
-
-            case Types.RANGE_OPERATOR:
-            {
-                Expression from = expression( reduction.get(1) );
-                Expression   to = expression( reduction.get(2) );
-
-                expression = new RangeExpression( from, to, reduction.getMeaning() == Types.DOT_DOT );
-                break;
-            }
-
-
-            case Types.LEFT_SQUARE_BRACKET:
-            case Types.INFIX_OPERATOR:
-            {
-                expression = infixExpression( reduction );
-                break;
-            }
-
-
-            case Types.REGEX_PATTERN:     //   same to Types.BITWISE_NEGATION
-            {
-		CSTNode    body       = reduction.get(1);
-		Token  token  = body.getRoot();
-		String text   = body.getRootText();
-
-                if ( body.isA(Types.SYNTH_GSTRING) )
-		{
-                    expression = new RegexExpression( expression(reduction.get(1)) );
-                }
-                else
-                {
-                    expression = new BitwiseNegExpression( expression(body) );
-                }
-                break;
-            }
-
-
-            case Types.PREFIX_OPERATOR:
-            {
-                expression = prefixExpression( reduction );
-                break;
-            }
-
-
-            case Types.POSTFIX_OPERATOR:
-            {
-                Expression body = expression( reduction.get(1) );
-                expression = new PostfixExpression( body, reduction.getRoot() );
-                break;
-            }
-
-
-            case Types.SIMPLE_EXPRESSION:
-            {
-                expression = simpleExpression( reduction );
-                break;
-            }
-
-
-            case Types.KEYWORD_NEW:
-            {
-                expression = newExpression( reduction );
-                break;
-            }
-
-            default:
-                throw new GroovyBugError( "unhandled CST: [" + reduction.toString() + "]" );
-
-        }
-
-        if( expression == null )
-        {
-            throw new GroovyBugError( "expression produced null: [" + reduction.toString() + "]" );
-        }
-
-        expression.setCSTNode( reduction );
-        return expression;
-    }
-
-
-    public static final int[] EXPRESSION_HANDLERS = {
-          Types.SYNTHETIC
-        , Types.RANGE_OPERATOR
-        , Types.LEFT_SQUARE_BRACKET
-        , Types.INFIX_OPERATOR
-        , Types.REGEX_PATTERN
-        , Types.PREFIX_OPERATOR
-        , Types.POSTFIX_OPERATOR
-        , Types.SIMPLE_EXPRESSION
-        , Types.KEYWORD_NEW
-    };
-
-
-
-
-   /**
-    *  Processes most infix operators.
-    */
-
-    public Expression infixExpression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression;
-
-        int type = reduction.getMeaning();
-        switch( type )
-        {
-            case Types.DOT:
-            case Types.NAVIGATE:
-            {
-                String name = reduction.get(2).getRootText();
-
-                Expression context = null;
-                if( name.equals("class") )
-                {
-                    CSTNode node = reduction.get(1);
-                    if( node.isA(Types.LEFT_SQUARE_BRACKET) && node.children() == 1 )
-                    {
-                        throw new GroovyBugError( "NOT YET IMPLEMENTED: .class for array types" );
-                        // context = classExpression( reduction.get(1) );
-                    }
-                }
-
-                if( context == null )
-                {
-                    context = expression( reduction.get(1) );
-                }
-
-                expression = new PropertyExpression( context, name, type == Types.NAVIGATE );
-                break;
-            }
-
-
-            case Types.KEYWORD_INSTANCEOF:
-            {
-                Expression   lhs = expression(  reduction.get(1) );
-                Expression   rhs = classExpression( reduction.get(2) );
-                expression = new BinaryExpression( lhs, reduction.getRoot(), rhs );
-                break;
-            }
-
-
-            default:
-            {
-                Expression lhs = expression( reduction.get(1) );
-                Expression rhs = expression( reduction.get(2) );
-                expression = new BinaryExpression( lhs, reduction.getRoot(), rhs );
-                break;
-            }
-        }
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes most prefix operators.
-    */
-
-    public Expression prefixExpression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression = null;
-        CSTNode    body       = reduction.get(1);
-
-        int type = reduction.getMeaning();
-        switch( type )
-        {
-            case Types.PREFIX_MINUS:
-                if( body.size() == 1 && body.isA(Types.NUMBER) )
-                {
-                    expression = numericExpression( body, true );
-                }
-                else
-                {
-                    expression = new NegationExpression( expression(body) );
-                }
-                break;
-
-            case Types.PREFIX_PLUS:
-                expression = expression(body);
-                break;
-
-            case Types.NOT:
-                expression = new NotExpression( expression(body) );
-                break;
-
-            case Types.BITWISE_NEGATION:
-                expression = new BitwiseNegExpression( expression(body) );
-                break;
-
-            default:
-                expression = new PrefixExpression( reduction.getRoot(), expression(body) );
-                break;
-        }
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes most simple expressions.
-    */
-
-    public Expression simpleExpression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression = null;
-
-        int type = reduction.getMeaning();
-        switch( type )
-        {
-            case Types.KEYWORD_NULL:
-                expression = ConstantExpression.NULL;
-                break;
-
-            case Types.KEYWORD_TRUE:
-                expression = ConstantExpression.TRUE;
-                break;
-
-            case Types.KEYWORD_FALSE:
-                expression = ConstantExpression.FALSE;
-                break;
-
-            case Types.STRING:
-                expression = new ConstantExpression( reduction.getRootText() );
-                break;
-
-            case Types.INTEGER_NUMBER:
-            case Types.DECIMAL_NUMBER:
-                expression = numericExpression( reduction, false );
-                break;
-
-            case Types.KEYWORD_SUPER:
-            case Types.KEYWORD_THIS:
-                expression = variableExpression( reduction );
-                break;
-
-            case Types.IDENTIFIER:
-                expression = variableOrClassExpression( reduction );
-                break;
-
-        }
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes numeric literals.
-    */
-
-    public Expression numericExpression( CSTNode reduction, boolean negate ) throws ParserException
-    {
-        Token  token  = reduction.getRoot();
-        String text   = reduction.getRootText();
-        String signed = negate ? "-" + text : text;
-
-        boolean isInteger = (token.getMeaning() == Types.INTEGER_NUMBER);
-
-        try
-        {
-            Number number = isInteger ? Numbers.parseInteger(signed) : Numbers.parseDecimal(signed);
-
-            return new ConstantExpression( number );
-        }
-        catch( NumberFormatException e )
-        {
-            error( "numeric literal [" + signed + "] invalid or out of range for its type", token );
-        }
-
-        throw new GroovyBugError( "this should never happen" );
-    }
-
-
-
-   /**
-    *  Processes most synthetic expressions.
-    */
-
-    public Expression syntheticExpression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression = null;
-
-        int type = reduction.getMeaning();
-        switch( type )
-        {
-            case Types.SYNTH_TERNARY:
-            {
-                BooleanExpression condition   = new BooleanExpression( expression(reduction.get(1)) );
-                Expression        trueBranch  = expression( reduction.get(2) );
-                Expression        falseBranch = expression( reduction.get(3) );
-
-                expression = new TernaryExpression( condition, trueBranch, falseBranch );
-                break;
-            }
-
-
-            case Types.SYNTH_CAST:
-            {
-                String className = resolveName( reduction.get(1) );
-                Expression  body = expression(  reduction.get(2) );
-
-                expression = new CastExpression( className, body );
-                break;
-            }
-
-
-            case Types.SYNTH_VARIABLE_DECLARATION:
-            {
-                expression = variableDeclarationExpression( reduction );
-                break;
-            }
-
-
-            case Types.SYNTH_METHOD_CALL:
-            {
-                expression = methodCallExpression( reduction );
-                break;
-            }
-
-
-            case Types.SYNTH_CLOSURE:
-            {
-                expression = closureExpression( reduction );
-                break;
-            }
-
-
-            case Types.SYNTH_GSTRING:
-            {
-                expression = gstringExpression( reduction );
-                break;
-            }
-
-
-            case Types.SYNTH_LIST:
-            {
-                expression = listExpression( reduction );
-                break;
-            }
-
-
-            case Types.SYNTH_MAP:
-            {
-                expression = mapExpression( reduction );
-                break;
-            }
-        }
-
-        return expression;
-    }
-
-
-
-
-   /**
-    *  Converts a (typically IDENTIFIER) CSTNode to a ClassExpression, if valid,
-    *  or a VariableExpression otherwise.
-    */
-
-    protected Expression variableOrClassExpression( CSTNode reduction ) throws ParserException
-    {
-        String className = resolveName( reduction, false );
-
-        if( className == null )
-        {
-            return variableExpression( reduction );
-        }
-        else
-        {
-            return new ClassExpression( className );
-        }
-    }
-
-
-
-   /**
-    *  Converts a CSTNode into a ClassExpression.
-    */
-
-    protected ClassExpression classExpression( CSTNode reduction ) throws ParserException
-    {
-        String name = resolveName( reduction, true );
-        return new ClassExpression( name );
-    }
-
-
-
-   /**
-    *  Converts a (typically IDENTIFIER) CSTNode to a VariableExpression, if
-    *  valid.
-    */
-
-   protected VariableExpression variableExpression( CSTNode reduction )
-   {
-       return new VariableExpression( reduction.getRootText(), null );
-   }
-
-    protected VariableExpression variableExpression( CSTNode reduction, String type )
-    {
-        return new VariableExpression( reduction.getRootText(), type );
-    }
-
-
-
-   /**
-    *  Converts an (possibly optional) type expression to a Type.
-    */
-
-    protected Type typeExpression( CSTNode reduction )
-    {
-        String name = makeName( reduction, null );
-        if( name == null )
-        {
-            return Type.DYNAMIC_TYPE;
-        }
-        else
-        {
-            return new Type( resolveName(name, true) );
-        }
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by parsing a typed variable
-    *  declaration.
-    */
-
-    protected Expression variableDeclarationExpression( CSTNode reduction ) throws ParserException
-    {
-        String type = resolveName( reduction.get(1) );
-
-
-        //
-        // TEMPORARY UNTIL GENERAL SUPPORT IN PLACE
-
-        if( reduction.size() == 3 )
-        {
-            CSTNode node = reduction.get(2);
-
-            VariableExpression name = variableExpression( node, type );
-            //name.setType( type );
-
-            Token symbol = Token.newSymbol( Types.EQUAL, -1, -1 );
-
-            return new BinaryExpression( name, symbol, expression(node.get(1)) );
-        }
-
-
-        throw new GroovyBugError( "NOT YET IMPLEMENTED: generalized variable declarations" );
-
-        /*
-
-        VariableDeclarationExpression expression = new VariableDeclarationExpression( type );
-
-        for( i = 2; i < reduction.size(); i++ )
-        {
-            CSTNode node = reduction.get(i);
-            declaration.add( node.get(0), expression(node.get(1)) );
-        }
-
-        return expression;
-
-        */
-    }
-
-
-
-   /**
-    *  Processes a SYNTH_METHOD_CALL Reduction produced by Parser.expression().
-    */
-
-    protected MethodCallExpression methodCallExpression( CSTNode reduction ) throws ParserException
-    {
-        MethodCallExpression call = null;
-
-        //
-        // Figure out the name and context of the method call.
-
-        CSTNode descriptor = reduction.get(1);
-        Expression context = null;
-        boolean   implicit = false;
-        String      method = "call";
-        boolean       safe = false;
-
-        int type = descriptor.getMeaning();
-        switch( type )
-        {
-            case Types.KEYWORD_SUPER:
-            {
-                context  = variableExpression( descriptor );
-                method   = identifier( descriptor );
-                break;
-            }
-
-            case Types.KEYWORD_THIS:
-            {
-                context  = VariableExpression.THIS_EXPRESSION;
-                method   = identifier( descriptor );
-                break;
-            }
-
-            case Types.IDENTIFIER:
-            {
-                context  = VariableExpression.THIS_EXPRESSION;
-                method   = identifier( descriptor );
-                implicit = true;
-                break;
-            }
-
-            case Types.DOT:
-            case Types.NAVIGATE:
-            {
-                context = expression( descriptor.get(1) );
-                method  = identifier( descriptor.get(2) );
-                safe    = type == Types.NAVIGATE;
-                break;
-            }
-
-            default:
-            {
-                context = expression( descriptor );
-                break;
-            }
-        }
-
-
-        //
-        // And build the expression
-
-        Expression parameters = parameterList( reduction.get(2) );
-
-        // System.out.println( "method call expression: " + context + ", " + method + ", " + parameters + ", " + implicit );
-
-        call = new MethodCallExpression( context, method, parameters );
-        call.setImplicitThis( implicit );
-        call.setSafe( safe );
-
-        return call;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.closureExpression().
-    */
-
-    protected ClosureExpression closureExpression( CSTNode reduction ) throws ParserException
-    {
-        ClosureExpression expression = null;
-
-        Parameter[] parameters = parameterDeclarations( reduction.get(1) );
-        expression = new ClosureExpression( parameters, statementBlock(reduction.get(2)) );
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.parameterList().
-    */
-
-    protected Expression parameterList( CSTNode reduction ) throws ParserException
-    {
-        TupleExpression list = new TupleExpression();
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            CSTNode node = reduction.get(i);
-            list.addExpression( expression(node) );
-        }
-
-        return list;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.newExpression().
-    */
-
-    protected Expression newExpression( CSTNode reduction ) throws ParserException
-    {
-        Expression expression = null;
-        CSTNode      typeNode = reduction.get(1);
-        String           type = resolveName( typeNode );
-
-
-        //
-        // Array types have dimension and initialization data to handle.
-
-        if( typeNode.getMeaning() == Types.LEFT_SQUARE_BRACKET )
-        {
-            CSTNode dimensions = reduction.get(2);
-
-            //
-            // BUG: at present, ArrayExpression expects a scalar type and
-            // does not support multi-dimensional arrays.  In future, the
-            // the latter will need to change, and that may require the
-            // former to change, as well.  For now, we calculate the scalar
-            // type and error for multiple dimensions.
-
-            if( typeNode.get(1).getMeaning() == Types.LEFT_SQUARE_BRACKET )
-            {
-                throw new GroovyBugError( "NOT YET IMPLEMENTED: multidimensional arrays" );
-            }
-            else
-            {
-                type = resolveName( typeNode.get(1) );
-            }
-
-
-            //
-            // If there are no dimensions, process a tuple initializer
-
-            if( dimensions.isEmpty() )
-            {
-                CSTNode data = reduction.get(3);
-
-                if( data.get(1, true).getMeaning() == Types.SYNTH_TUPLE )
-                {
-                    throw new GroovyBugError( "NOT YET IMPLEMENTED: multidimensional arrays" );
-                }
-
-                expression = new ArrayExpression( type, tupleExpression(data).getExpressions() );
-            }
-
-
-            //
-            // Otherwise, process the dimensions
-
-            else
-            {
-                if( dimensions.size() > 2 )
-                {
-                    throw new GroovyBugError( "NOT YET IMPLEMENTED: multidimensional arrays" );
-
-                    /*
-
-                    expression = new ArrayExpression( type, tupleExpression(dimensions) );
-
-                    */
-                }
-                else
-                {
-                    expression = new ArrayExpression( type, expression(dimensions.get(1)) );
-                }
-            }
-        }
-
-
-        //
-        // Scalar types have a constructor parameter list and possibly a type body
-
-        else
-        {
-            Expression parameters = parameterList( reduction.get(2) );
-
-            if( reduction.size() > 3 )
-            {
-                throw new GroovyBugError( "NOT YET IMPLEMENTED: anonymous classes" );
-            }
-
-            expression = new ConstructorCallExpression( type, parameters );
-        }
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.newArrayInitializer().
-    */
-
-    protected TupleExpression tupleExpression( CSTNode reduction ) throws ParserException
-    {
-        TupleExpression tuple = new TupleExpression();
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            CSTNode element = reduction.get(i);
-
-            if( element.getMeaning() == Types.SYNTH_TUPLE )
-            {
-                tuple.addExpression( tupleExpression(element) );
-            }
-            else
-            {
-                tuple.addExpression( expression(element) );
-            }
-        }
-
-        return tuple;
-    }
-
-
-
-   /**
-    *  Processes the Reduction produced by Parser.gstring().
-    */
-
-    protected Expression gstringExpression( CSTNode reduction ) throws ParserException
-    {
-        if( !reduction.hasChildren() )
-        {
-            return new ConstantExpression( "" );
-        }
-
-        if( reduction.children() == 1 && reduction.get(1).getMeaning() == Types.STRING )
-        {
-            return expression( reduction.get(1) );
-        }
-
-
-        GStringExpression expression = new GStringExpression( reduction.getRootText() );
-        boolean lastWasExpression = false;
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            CSTNode element = reduction.get(i);
-            if( element.getMeaning() == Types.STRING )
-            {
-                ConstantExpression string = new ConstantExpression( element.getRootText() );
-                string.setCSTNode( element );
-
-                expression.addString( string );
-
-                lastWasExpression = false;
-            }
-            else
-            {
-                if( lastWasExpression )
-                {
-                    expression.addString( new ConstantExpression("") );
-                }
-
-                lastWasExpression = true;
-                expression.addValue( element.isEmpty() ? ConstantExpression.NULL : expression(element) );
-            }
-        }
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes one of the Reductions produced by Parser.listOrMapExpression().
-    */
-
-    protected ListExpression listExpression( CSTNode reduction ) throws ParserException
-    {
-        ListExpression list = new ListExpression();
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            list.addExpression( expression(reduction.get(i)) );
-        }
-
-        return list;
-    }
-
-
-
-   /**
-    *  Processes the other Reduction produced by Parser.listOrMapExpression().
-    */
-
-    protected MapExpression mapExpression( CSTNode reduction ) throws ParserException
-    {
-        MapExpression map = new MapExpression();
-
-        for( int i = 1; i < reduction.size(); i++ )
-        {
-            CSTNode  element = reduction.get(i);
-            Expression   key = expression( element.get(1) );
-            Expression value = expression( element.get(2) );
-
-            map.addMapEntryExpression( key, value );
-        }
-
-        return map;
-    }
-
-
-
-
-
-  //---------------------------------------------------------------------------
-  // NAMING
-
-
-    /**
-    *  Converts a CSTNode representation of a type name back into
-    *  a string.
-    */
-
-    protected String makeName( CSTNode root, String defaultName )
-    {
-        if( root == null )
-        {
-            return defaultName;
-        }
-
-        String name = "";
-        switch( root.getMeaning() )
-        {
-            case Types.LEFT_SQUARE_BRACKET:
-            {
-                name = makeName( root.get(1) ) + "[]";
-                break;
-            }
-
-            case Types.DOT:
-            {
-                CSTNode node = root;
-                while( node.isA(Types.DOT) )
-                {
-                    name = "." + node.get(2).getRootText() + name;
-                    node = node.get(1);
-                }
-
-                name = node.getRootText() + name;
-                break;
-            }
-
-            case Types.UNKNOWN:
-            {
-                name = defaultName;
-                break;
-            }
-
-            default:
-            {
-                name = root.getRootText();
-                break;
-            }
-
-        }
-
-        return name;
-    }
-
-
-
-   /**
-    *  A synonym for <code>makeName( root, "java.lang.Object" )</code>.
-    */
-
-    protected String makeName( CSTNode root )
-    {
-        return makeName( root, "" ); // br: the default name. was "java.lang.Object"
-    }
-
-
-
-   /**
-    *  Returns the text of an identifier.
-    */
-
-    protected String identifier( CSTNode identifier )
-    {
-        return identifier.getRootText();
-    }
-
-
-    /**
-    *  Builds a name from a CSTNode, then resolves it.  Returns the resolved name
-    *  if available, or null, unless safe is set, in which case the built name
-    *  is returned instead of null.
-    *
-    *  @todo we should actually remove all resolving code from the ASTBuilder and
-    *        move it into the verifier / analyser
-    */
-
-    protected String resolveName( CSTNode root, boolean safe )
-    {
-        String name = makeName( root );
-        if (name.length() == 0)
-            return "";
-        return resolveNewClassOrName(name, safe);
-    }
-
-
-    /**
-    *  A synonym for <code>resolveName( root, true )</code>.
-    */
-
-    protected String resolveName( CSTNode root )
-    {
-        return resolveName( root, true );
-    }
-
-
-
-
-    //---------------------------------------------------------------------------
-  // ASM SUPPORT
-
-
-   /**
-    *  Returns the ASM Constant bits for the specified modifiers.
-    */
-
-    protected int modifiers( CSTNode list )
-    {
-        int modifiers = 0;
-
-        for( int i = 1; i < list.size(); ++i )
-        {
-            SWITCH: switch( list.get(i).getMeaning() )
-            {
-                case Types.KEYWORD_PUBLIC:
-                {
-                    modifiers |= Constants.ACC_PUBLIC;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_PROTECTED:
-                {
-                    modifiers |= Constants.ACC_PROTECTED;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_PRIVATE:
-                {
-                    modifiers |= Constants.ACC_PRIVATE;
-                    break SWITCH;
-                }
-
-
-                case Types.KEYWORD_ABSTRACT:
-                {
-                    modifiers |= Constants.ACC_ABSTRACT;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_FINAL:
-                {
-                    modifiers |= Constants.ACC_FINAL;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_NATIVE:
-                {
-                    modifiers |= Constants.ACC_NATIVE;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_TRANSIENT:
-                {
-                    modifiers |= Constants.ACC_TRANSIENT;
-                    break SWITCH;
-                }
-
-                case Types.KEYWORD_VOLATILE:
-                {
-                    modifiers |= Constants.ACC_VOLATILE;
-                    break SWITCH;
-                }
-
-
-                case Types.KEYWORD_SYNCHRONIZED:
-                {
-                    modifiers |= Constants.ACC_SYNCHRONIZED;
-                    break SWITCH;
-                }
-                case Types.KEYWORD_STATIC:
-                {
-                    modifiers |= Constants.ACC_STATIC;
-                    break SWITCH;
-                }
-
-            }
-        }
-
-
-        //
-        // If not protected or private we default to public.
-
-        if( (modifiers & (Constants.ACC_PROTECTED | Constants.ACC_PRIVATE)) == 0 )
-        {
-            modifiers |= Constants.ACC_PUBLIC;
-        }
-
-        return modifiers;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // ERROR HANDLING
-
-
-   /**
-    *  Throws a <code>ParserException</code>.
-    */
-
-    protected void error( String description, CSTNode node ) throws ParserException
-    {
-        throw new ParserException( description, node.getRoot() );
-    }
-
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/AbstractTokenStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/AbstractTokenStream.java
deleted file mode 100644
index adc749f..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/AbstractTokenStream.java
+++ /dev/null
@@ -1,223 +0,0 @@
-package org.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.GroovyBugError;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.syntax.TokenMismatchException;
-import org.codehaus.groovy.syntax.Types;
-
-
-/**
- *  Provides the common code for <code>{@link TokenStream}</code> implementations.
- */
-
-public abstract class AbstractTokenStream
-    implements TokenStream
-{
-    private Token[] buf;             // A circular buffer of tokens
-    private int first;               // la(1) points to this offset into buf
-    private int avail;               // the number of ahead tokens in buf
-
-    private int checkpoint_first;    // last checkpoint() copy of first
-    private int checkpoint_avail;    // last checkpoint() copy of avail
-
-    private String sourceLocator;    // A descriptor of the source of the stream
-
-
-   /**
-    *  Default constructor.
-    */
-
-    public AbstractTokenStream()
-    {
-        this( "<unknown>" );
-    }
-
-
-   /**
-    *  Initializes the stream with information about the source.
-    */
-
-    public AbstractTokenStream(String sourceLocator)
-    {
-        this.buf           = new Token[8 * 1024];
-        this.first         = -1;
-        this.avail         = 0;
-        this.sourceLocator = sourceLocator;
-    }
-
-
-   /**
-    *  Returns a description of the source (typically a file name).
-    */
-
-    public String getSourceLocator()
-    {
-        return this.sourceLocator;
-    }
-
-
-   /**
-    *  Implemented by concrete subtypes, provides access to the next
-    *  token in the underlying stream.
-    */
-
-    protected abstract Token nextToken()
-        throws ReadException, SyntaxException;
-
-
-   /**
-    *  Returns the next token in the stream without consuming it.
-    */
-
-    public Token la()
-        throws ReadException, SyntaxException
-    {
-        return la( 1 );
-    }
-
-
-   /**
-    *  Returns the <code>k</code>th token in the stream without consuming
-    *  it (or any other unconsumed tokens).
-    */
-
-    public Token la(int k)
-        throws ReadException, SyntaxException
-    {
-        if ( k > buf.length )
-        {
-            throw new GroovyBugError( "Lookahead [" + k + "] is larger than lookahead buffer [" + buf.length + "]" );
-        }
-
-
-        //
-        // If necessary, read more tokens from the underlying stream.
-
-        if ( k > this.avail )
-        {
-            int numToPopulate = k - this.avail;
-
-            for ( int i = 0 ; i < numToPopulate ; ++i )
-            {
-                if ( this.first < 0 )
-                {
-                    this.first = 0;
-                }
-                int pop = ( ( this.first + this.avail ) % this.buf.length );
-                this.buf[ pop ] = nextToken();
-                ++this.avail;
-                ++this.checkpoint_avail;
-            }
-        }
-
-
-        //
-        // Return the requested token.
-
-        int pos = ( ( k + this.first - 1 ) % this.buf.length );
-
-        return this.buf[ pos ];
-    }
-
-
-   /**
-    *  Removes and returns the first token in the stream, provided it
-    *  matches the specified type.
-    */
-
-    public Token consume(int type)
-        throws ReadException, SyntaxException
-    {
-        Token token = la();
-
-        if( token == null )
-        {
-            return null;
-        }
-
-        if( !token.isA(type) )
-        {
-            throw new TokenMismatchException( token, type );
-        }
-
-        ++this.first;
-        --this.avail;
-
-        this.first %= this.buf.length;
-
-        return token;
-    }
-
-
-
-   /**
-    *  Removes and returns the first token in the stream, provided it
-    *  isn't the EOF.
-    */
-
-    public Token consume() throws ReadException, SyntaxException
-    {
-        return consume( Types.NOT_EOF );
-    }
-
-
-
-   /**
-    *  Saves the look-ahead state for <code>restore()</code>ing later.
-    */
-
-    public void checkpoint() {
-        checkpoint_first = first;
-        checkpoint_avail = avail;
-    }
-
-
-   /**
-    *  Restores the look-ahead state saved by <code>checkpoint()</code>.
-    */
-
-    public void restore() {
-        first = checkpoint_first;
-        avail = checkpoint_avail;
-    }
-
-
-    /**
-     * Returns true if the stream is out of tokens.
-     */
-
-    public boolean atEnd( boolean ignoringWhitespace ) {
-
-        try {
-            int offset = 1;
-
-            if( ignoringWhitespace ) {
-                try {
-                    while( la(offset).isA(Types.NEWLINE) ) {
-                        offset++;
-                    }
-                }
-                catch( Exception e ) {}
-            }
-
-            if( la(offset) == null ) {
-                return true;
-            }
-        }
-        catch( Exception e ) {}
-
-        return false;
-    }
-
-
-    /**
-     * A synonym for <code>atEnd(true)</code>.
-     */
-
-    public boolean atEnd() {
-        return atEnd(true);
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPlugin.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPlugin.java
deleted file mode 100644
index 18e64f2..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPlugin.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.syntax.Reduction;
-import org.codehaus.groovy.syntax.parser.TokenStream;
-import org.codehaus.groovy.syntax.lexer.GroovyLexer;
-import org.codehaus.groovy.syntax.lexer.LexerTokenStream;
-import org.codehaus.groovy.syntax.lexer.ReaderCharStream;
-import org.codehaus.groovy.syntax.parser.Parser;
-import org.codehaus.groovy.syntax.parser.ASTBuilder;
-import org.codehaus.groovy.syntax.ParserException;
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.control.ParserPlugin;
-import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-import java.io.Reader;
-
-/**
- * @version $Revision$
- */
-public class ClassicParserPlugin implements ParserPlugin {
-
-
-    public Reduction parseCST(SourceUnit sourceUnit, Reader reader) throws CompilationFailedException {
-        //
-        // Create a lexer and token stream
-
-        GroovyLexer lexer = new GroovyLexer(new ReaderCharStream(reader));
-        TokenStream stream = new LexerTokenStream(lexer);
-
-        //
-        // Do the parsing
-        Parser parser = new Parser(sourceUnit, stream);
-        return parser.parse();
-    }
-
-    public ModuleNode buildAST(SourceUnit sourceUnit, ClassLoader classLoader, Reduction cst) throws ParserException {
-        ASTBuilder builder = new ASTBuilder( sourceUnit, classLoader );
-        return builder.build( cst );
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPluginFactory.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPluginFactory.java
deleted file mode 100644
index 1a8f826..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ClassicParserPluginFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.syntax.parser.ClassicParserPlugin;
-import org.codehaus.groovy.control.ParserPluginFactory;
-import org.codehaus.groovy.control.ParserPlugin;
-
-/**
- * @version $Revision$
- */
-public class ClassicParserPluginFactory extends ParserPluginFactory {
-
-    public ParserPlugin createParserPlugin() {
-        return new ClassicParserPlugin();
-    }
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionStack.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionStack.java
deleted file mode 100644
index 49817a4..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionStack.java
+++ /dev/null
@@ -1,478 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.syntax.parser;
-
-import java.util.ArrayList;
-
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.syntax.*;
-import org.codehaus.groovy.GroovyBugError;
-
-
-
-/**
- *  A combination stack and helper class for parsing groovy expression.
- *  <p>
- *  Expressions are a little trickier to parse than the statements above.
- *  As a result, we are now doing a hybrid LL/LR parse at the expression
- *  level.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
- */
-
-public class ExpressionStack
-{
-    private ArrayList stack  = new ArrayList();
-    private Parser    parser = null;
-    private int       open   = 0;
-
-
-    ExpressionStack( Parser context )
-    {
-        this.parser = context;
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // PRIMARY OPERATIONS
-
-
-   /**
-    *  Returns true if the stack is empty.
-    */
-
-    boolean isEmpty()
-    {
-        return stack.isEmpty();
-    }
-
-
-
-   /**
-    *  Returns true if the stack is in a state that can be considered
-    *  a complete expression, provided lookahead is amenable, of course.
-    */
-
-    public boolean isComplete()
-    {
-        return size() == 1 && topIsAnExpression();
-    }
-
-
-
-   /**
-    *  Returns true if the stack can be completed without further shifts.
-    *  Used by Parser.la(ExpressionStack) to determine when ambiguous tokens
-    *  can't be read across a newline.  The algorithm will guess true if it
-    *  isn't sure.  If it returns false, you can rely on that analysis.
-    */
-
-    public boolean canComplete()
-    {
-        //
-        // We can immediately return false if there is anything
-        // open or if the top is not an expression...
-
-        if( open > 0 || !topIsAnExpression() )
-        {
-            return false;
-        }
-
-
-        //
-        // If it is complete, it can complete...
-
-        if( size() == 1 )
-        {
-            return true;
-        }
-
-
-        //
-        // For everything else, we guess true.  It is most likely
-        // the case, because of the way the parser moves complex
-        // stuff off to LL routines and validates the ordering of
-        // nodes pushed on the stack, that if the top is an expression,
-        // and nothing is "open" (ie. unmatched parenthesis, early
-        // stage ternary operators), the stack can be reduced back
-        // to the root without further shifts.  Our guarantee is
-        // that our guess true might be wrong, but that we will only
-        // return false when we are sure, so, no harm done...
-
-        return true;
-    }
-
-
-
-   /**
-    *  Returns the number of elements in the stack.
-    */
-
-    int size()
-    {
-        return stack.size();
-    }
-
-
-
-   /**
-    *  Pushes a node onto the stack.
-    */
-
-    void push( CSTNode node )
-    {
-        if( (node.isA(Types.LEFT_PARENTHESIS) || node.isA(Types.QUESTION)) && node.size() == 1 )
-        {
-            open++;
-        }
-
-        stack.add( node );
-    }
-
-
-
-   /**
-    *  Pops the node from the top of the stack.
-    */
-
-    CSTNode pop()
-    {
-        CSTNode node = (CSTNode)stack.remove( stack.size() - 1 );
-
-        if( (node.isA(Types.LEFT_PARENTHESIS) || node.isA(Types.QUESTION)) && node.size() == 1 )
-        {
-            open--;
-        }
-
-        return node;
-    }
-
-
-
-   /**
-    *  Returns the top node from the stack without removing it.
-    */
-
-    CSTNode top()
-    {
-        return top(0);
-    }
-
-
-
-   /**
-    *  Returns some node from the stack.  <code>offset</code> is counted
-    *  from the top of the stack.
-    */
-
-    CSTNode top( int offset )
-    {
-        if( offset < stack.size() )
-        {
-            return (CSTNode)stack.get( stack.size() - 1 - offset );
-        }
-        else
-        {
-            return Token.NULL;
-        }
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // PARSER OPERATIONS
-
-
-   /**
-    *  Shifts some number of (non-newline) tokens from the stream to the top
-    *  of the stack.  They are pushed in order.
-    */
-
-    void shift( int count ) throws SyntaxException, CompilationFailedException
-    {
-        for( int i = 0; i < count; i++ )
-        {
-            push( parser.consume() );
-        }
-    }
-
-
-
-   /**
-    *  Shifts a token from the stream to the top of the stack.
-    */
-
-    void shift() throws SyntaxException, CompilationFailedException
-    {
-        push( parser.consume() );
-    }
-
-
-
-   /**
-    *  Performs a reduce by taking some number of <code>CSTNode</code>s
-    *  from the top of the stack, and making one of them a
-    *  <code>Reduction</code> with the others as children, then pushes
-    *  that new node back onto the stack.
-    */
-
-    void reduce( int count, int rootOffset, boolean mark )
-    {
-        if( count <= rootOffset || rootOffset < 0 || count > size() )
-        {
-            throw new GroovyBugError( "error in call to ExpressionStack.reduce(): count=" + count + ", rootOffset=" + rootOffset );
-        }
-
-        CSTNode   root     = null;
-        CSTNode[] children = new CSTNode[count-1];
-
-        for( int child = count - 2, element = 0; element < count; element++ )
-        {
-            if( element == rootOffset )
-            {
-                root = pop();
-            }
-            else
-            {
-                children[child--] = pop();
-            }
-        }
-
-        root = root.asReduction();
-        for( int i = 0; i < children.length; i++ )
-        {
-            root.add( children[i] );
-        }
-
-        if( mark )
-        {
-            root.markAsExpression();
-        }
-
-        push( root );
-
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // TESTS
-
-
-   /**
-    *  Return true if the stack is at the start of an expression.  True if
-    *  either the stack is empty or the top token is a left parenthesis.
-    */
-
-    boolean atStartOfExpression()
-    {
-        return isEmpty() || (top().isA(Types.LEFT_PARENTHESIS) && !top().hasChildren());
-    }
-
-
-
-   /**
-    *  Returns true if the top element of the stack is an operator.
-    */
-
-    boolean topIsAnOperator( )
-    {
-        return ExpressionSupport.isAnOperator( top(), false );
-    }
-
-
-
-   /**
-    *  Returns true if the element at the specified offset from the top
-    *  of the stack is an operator.
-    */
-
-    boolean topIsAnOperator( int offset, boolean unknownReturns )
-    {
-        return ExpressionSupport.isAnOperator( top(offset), unknownReturns );
-    }
-
-
-
-   /**
-    *  Returns true if the top element of the stack is a modifiable expression.
-    */
-
-    boolean topIsAModifiableExpression()
-    {
-        return ExpressionSupport.isAModifiableExpression( top() );
-    }
-
-
-
-   /**
-    *  Returns true if the top element of the stack is an expression.
-    */
-
-    boolean topIsAnExpression( )
-    {
-        return top().isAnExpression();
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // SUGAR
-
-
-   /**
-    *  Shifts if the specified flag is true, reports an error otherwise.
-    */
-
-    void shiftIf( boolean flag, String error ) throws SyntaxException, CompilationFailedException
-    {
-        if( flag )
-        {
-            push( parser.consume() );
-        }
-        else
-        {
-            parser.error( error );
-        }
-    }
-
-
-
-   /**
-    *  Shifts unless the specified flag is true, reports an error otherwise.
-    */
-
-    void shiftUnless( boolean flag, String error ) throws SyntaxException, CompilationFailedException
-    {
-        if( flag )
-        {
-            parser.error( error );
-        }
-        else
-        {
-            push( parser.consume() );
-        }
-    }
-
-
-
-   /**
-    *  Shifts if the top of the stack is an expression, reports an error
-    *  otherwise.
-    */
-
-    void shiftIfTopIsAnExpression( String error ) throws SyntaxException, CompilationFailedException
-    {
-        shiftIf( ExpressionSupport.isAnExpression(top(), false), error );
-    }
-
-
-
-   /**
-    *  Shifts if the top of the stack is a operator, reports an
-    *  error otherwise.
-    */
-
-    void shiftIfTopIsAnOperator( String error ) throws SyntaxException, CompilationFailedException
-    {
-        shiftIf( ExpressionSupport.isAnOperator(top(), false), error );
-    }
-
-
-
-   /**
-    *  Shifts unless the top of the stack is an expression, reports an
-    *  error otherwise.
-    */
-
-    void shiftUnlessTopIsAnExpression( String error ) throws SyntaxException, CompilationFailedException
-    {
-        shiftUnless( ExpressionSupport.isAnExpression(top(), false), error );
-    }
-
-
-
-   /**
-    *  Shifts unless the top of the stack is an operator, reports an
-    *  error otherwise.
-    */
-
-    void shiftUnlessTopIsAnOperator( String error ) throws SyntaxException, CompilationFailedException
-    {
-        shiftUnless( ExpressionSupport.isAnOperator(top(), false), error );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // OUTPUT
-
-
-   /**
-    *  Creates a string representation of the stack.
-    */
-
-    public String toString( )
-    {
-        StringBuffer buffer = new StringBuffer();
-        String newline = System.getProperty( "line.separator", "\n" );
-        int count = stack.size();
-
-        buffer.append( "ExpressionStack with " ).append( size() ).append( " elements" ).append( newline );
-        for( int i = count - 1; i >= 0; i-- )
-        {
-            buffer.append( top(i).toString() ).append( newline );
-        }
-
-        return buffer.toString();
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionSupport.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionSupport.java
deleted file mode 100644
index d9bd697..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/ExpressionSupport.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.syntax.*;
-
-
-
-/**
- *  A helper for the expression parsing system that provides in-depth
- *  analysis of <code>CSTNode</code>s.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
- */
-
-public class ExpressionSupport
-{
-
-  //---------------------------------------------------------------------------
-  // EXPRESSION IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node is a complete expression (something that has
-    *  a value).
-    */
-
-    public static boolean isAnExpression( CSTNode node, boolean unknownReturns )
-    {
-        if( node.isA(Types.UNKNOWN) )
-        {
-            return unknownReturns;
-        }
-
-        return node.isAnExpression();
-    }
-
-
-
-   /**
-    *  A synonym for <code>isAnExpression( node, false )</code>.
-    */
-
-    public static boolean isAnExpression( CSTNode node )
-    {
-        return isAnExpression( node, false );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // OPERATOR IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node is an operator and not an expression (see
-    *  above).
-    */
-
-    public static boolean isAnOperator( CSTNode node, boolean unknownReturns )
-    {
-        if( node.isA(Types.UNKNOWN) )
-        {
-            return unknownReturns;
-        }
-
-        return !node.isAnExpression();
-    }
-
-
-
-   /**
-    *  A synonym for <code>isAnOperator(node, false)</code>.
-    */
-
-    public static boolean isAnOperator( CSTNode node )
-    {
-        return isAnOperator( node, false );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // VARIABLE IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node might be a variable.
-    */
-
-    public static boolean isAVariable( CSTNode node )
-    {
-        switch( node.getMeaning() )
-        {
-            case Types.LEFT_SQUARE_BRACKET:
-                if( node.isAnExpression() )
-                {
-                   return isAVariable( node.get(1) );
-                }
-                break;
-
-            case Types.DOT:
-            case Types.NAVIGATE:
-            {
-                if( node.isAnExpression() && node.get(2).getMeaning() == Types.IDENTIFIER )
-                {
-                    return true;
-                }
-                break;
-            }
-
-            case Types.IDENTIFIER:
-            {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // METHOD IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node might be a method.
-    */
-
-    public static boolean isInvokable( CSTNode node )
-    {
-        switch( node.getMeaning() )
-        {
-            case Types.SYNTH_CLOSURE:
-            case Types.SYNTH_METHOD_CALL:
-            case Types.KEYWORD_SUPER:
-            case Types.KEYWORD_THIS:
-                return true;
-
-            default:
-                return isAVariable(node);
-        }
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // ASSIGNMENT TARGET IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node is a modifiable expression (ie. something that
-    *  can be the target of an assignment).  Note that this determination is
-    *  approximate: false negatives won't happen, but false positives are
-    *  distinctly possible, and must be resolved in later phases.
-    */
-
-    public static boolean isAModifiableExpression( CSTNode node, boolean unknownReturns )
-    {
-        if( isAnExpression(node, unknownReturns) )
-        {
-            if( isAVariable(node) )
-            {
-                return true;
-            }
-
-            else if( node.getMeaning() == Types.SYNTH_LIST )
-            {
-                boolean is = true;
-                for( int i = 1; i < node.size(); i++ )
-                {
-                    if( !isAModifiableExpression(node.get(i), unknownReturns) )
-                    {
-                        is = false;
-                        break;
-                    }
-                }
-                return is;
-            }
-
-        }
-
-        return false;
-    }
-
-
-
-   /**
-    *  A synonym for <code>isAModifiableExpression( node, false )</code>.
-    */
-
-    public static boolean isAModifiableExpression( CSTNode node )
-    {
-        return isAModifiableExpression( node, false );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // TYPE OPERATIONS IDENTIFICATION
-
-
-   /**
-    *  Returns true if the node is potentially a cast operator.
-    */
-
-    public static boolean isPotentialCastOperator( CSTNode node )
-    {
-        if( node.isA(Types.LEFT_PARENTHESIS) && node.isAnExpression() )
-        {
-            return isAPotentialTypeName( node.get(1), false );
-        }
-
-        return false;
-    }
-
-
-
-   /**
-    *  Returns true if the node is potentially a type name.
-    */
-
-    public static boolean isAPotentialTypeName( CSTNode node, boolean allowVoid )
-    {
-        if( node.isA(allowVoid ? Types.TYPE_NAME : Types.CREATABLE_TYPE_NAME) )
-        {
-            return true;
-        }
-        else if( node.isA(Types.DOT) && node.isAnExpression() )
-        {
-            return isAPotentialTypeName(node.get(2), allowVoid) && isAPotentialTypeName(node.get(1), allowVoid);
-        }
-        else if( node.isA(Types.LEFT_SQUARE_BRACKET) && node.isAnExpression() && node.size() == 2 )
-        {
-            return isAPotentialTypeName(node.get(1), allowVoid );
-        }
-
-        return false;
-    }
-
-
-
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/Parser.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/Parser.java
deleted file mode 100644
index 41baf42..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/Parser.java
+++ /dev/null
@@ -1,4011 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.GroovyBugError;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.messages.SimpleMessage;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.Reduction;
-import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.UnexpectedTokenException;
-import org.codehaus.groovy.syntax.CSTNode;
-
-/**
- *  Reads the source text and produces a Concrete Syntax Tree.  Exceptions
- *  are collected during processing, and parsing will continue for while
- *  possible, in order to report as many problems as possible.
- *  <code>module()</code> is the primary entry point.
- *
- *  @author Bob McWhirter
- *  @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
-  */
-
-public class Parser
-{
-    private SourceUnit  controller  = null;  // The controller to which we report errors
-    private TokenStream tokenStream = null;  // Our token source
-    private int         nestCount   = 1;     // Simplifies tracing of nested calls
-
-
-
-  //---------------------------------------------------------------------------
-  // CONSTRUCTION AND DATA ACCESS
-
-   /**
-    *  Sets the <code>Parser</code> to process a <code>TokenStream</code>,
-    *  under control of the specified <code>SourceUnit</code>.
-    */
-
-    public Parser( SourceUnit controller, TokenStream tokenStream )
-    {
-        this.controller  = controller;
-        this.tokenStream = tokenStream;
-    }
-
-
-   /**
-    *  Synonym for module(), the primary entry point.
-    */
-
-    public Reduction parse() throws CompilationFailedException
-    {
-        try
-        {
-            return module();
-        }
-        catch( SyntaxException e )
-        {
-            controller.addFatalError( new SyntaxErrorMessage(e) );
-        }
-
-        throw new GroovyBugError( "this will never happen" );
-    }
-
-
-
-   /**
-    *  Returns the <code>TokenStream</code> being parsed.
-    */
-
-    public TokenStream getTokenStream()
-    {
-        return this.tokenStream;
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // PRODUCTION SUPPORT
-
-
-   /**
-    *  Eats any optional newlines.
-    */
-
-    public void optionalNewlines() throws SyntaxException, CompilationFailedException
-    {
-        while( lt(false) == Types.NEWLINE)
-        {
-            consume( Types.NEWLINE );
-        }
-    }
-
-
-
-   /**
-    *  Eats a required end-of-statement (semicolon or newline) from the stream.
-    *  Throws an <code>UnexpectedTokenException</code> if anything else is found.
-    */
-
-    public void endOfStatement( boolean allowRightCurlyBrace ) throws SyntaxException, CompilationFailedException
-    {
-        Token next = la( true );
-
-        if( next.isA(Types.GENERAL_END_OF_STATEMENT) )
-        {
-            consume( true );
-        }
-        else
-        {
-            if( allowRightCurlyBrace )
-            {
-                if( !next.isA(Types.RIGHT_CURLY_BRACE) )
-                {
-                    error( new int[] { Types.SEMICOLON, Types.NEWLINE, Types.RIGHT_CURLY_BRACE } );
-                }
-            }
-            else
-            {
-                error( new int[] { Types.SEMICOLON, Types.NEWLINE } );
-            }
-        }
-    }
-
-
-
-   /**
-    *  A synonym for <code>endOfStatement( true )</code>.
-    */
-
-    public void endOfStatement() throws SyntaxException, CompilationFailedException
-    {
-        endOfStatement( true );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // PRODUCTIONS: PRIMARY STRUCTURES
-
-
-   /**
-    *  Processes a dotted identifer.  Used all over the place.
-    *  <p>
-    *  Grammar: <pre>
-    *     dottedIdentifier = <identifier> ("." <identifier>)*
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     dotted = { "." dotted <identifier> } | <identifier>
-    *  </pre>
-    */
-
-    public CSTNode dottedIdentifier() throws SyntaxException, CompilationFailedException
-    {
-        CSTNode identifier = consume(Types.IDENTIFIER);
-
-        while (lt() == Types.DOT)
-        {
-            identifier = consume(Types.DOT).asReduction( identifier, consume(Types.IDENTIFIER) );
-        }
-
-        return identifier;
-    }
-
-
-
-   /**
-    *  The primary file-level parsing entry point.  The returned CST
-    *  represents the content in a single class file.  Collects most
-    *  exceptions and attempts to continue.
-    *  <p>
-    *  Grammar: <pre>
-    *     module = [packageStatement]
-    *              (usingStatement)*
-    *              (topLevelStatement)*
-    *              <eof>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     module = { <null> package imports (topLevelStatement)* }
-    *
-    *     package           see packageDeclaration()
-    *     imports           see importStatement()
-    *     topLevelStatement see topLevelStatement()
-    *  </pre>
-    *
-    */
-
-    public Reduction module() throws SyntaxException, CompilationFailedException
-    {
-        Reduction module = Reduction.newContainer();
-
-        //
-        // First up, the package declaration
-
-        // XXX br: this is where i can do macro processing 
-        
-        Reduction packageDeclaration = null;
-
-        if( lt() == Types.KEYWORD_PACKAGE )
-        {
-            try
-            {
-                packageDeclaration = packageDeclaration();
-            }
-
-            catch (SyntaxException e)
-            {
-                controller.addError(e);
-                recover();
-            }
-        }
-
-        if( packageDeclaration == null )
-        {
-            packageDeclaration = Reduction.EMPTY;
-        }
-
-        module.add( packageDeclaration );
-
-
-        //
-        // Next, handle import statements
-
-        Reduction imports = (Reduction)module.add( Reduction.newContainer() );
-        Object collector;
-
-        while( lt() == Types.KEYWORD_IMPORT )
-        {
-            try
-            {
-                imports.add( importStatement() );
-            }
-
-            catch( SyntaxException e )
-            {
-                controller.addError(e);
-                recover();
-            }
-        }
-
-
-        //
-        // With that taken care of, process everything else.
-
-        while( lt() != Types.EOF )
-        {
-            try
-            {
-                module.add( topLevelStatement() );
-            }
-            catch (SyntaxException e)
-            {
-                controller.addError(e);
-                recover();
-            }
-        }
-
-        return module;
-    }
-
-
-
-   /**
-    *  Processes a package declaration.  Called by <code>module()</code>.
-    *  <p>
-    *  Grammar: <pre>
-    *     packageDeclaration = "package" dottedIdentifier <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     package = { "package" dottedIdentifier }
-    *
-    *     see dottedIdentifier()
-    *  </pre>
-    */
-
-    public Reduction packageDeclaration() throws SyntaxException, CompilationFailedException
-    {
-        Reduction packageDeclaration = consume(Types.KEYWORD_PACKAGE).asReduction( dottedIdentifier() );
-        endOfStatement( false );
-
-        return packageDeclaration;
-    }
-
-
-
-   /**
-    *  Processes an import statement.  Called by <code>module()</code>.
-    *  <p>
-    *  Grammar: <pre>
-    *     importStatement = "import" (all|specific) <eos>
-    *
-    *     all      = package "." (package ".")* "*"
-    *
-    *     specific = (package "." (package ".")*)? classes
-    *     classes  = class ["as" alias] ("," class ["as" alias])*
-    *
-    *     package  = <identifier>
-    *     class    = <identifier>
-    *     alias    = <identifier>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     import   = { "import" (package|{}) ({"*"} | clause+) }
-    *
-    *     package  = { "." package <identifier> } | <identifier>
-    *     clause   = { <identifier> <alias>? }
-    *  </pre>
-    */
-
-    public Reduction importStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction importStatement = consume(Types.KEYWORD_IMPORT).asReduction();
-
-        //
-        // First, process any package name.
-
-        CSTNode packageNode = null;
-        if( lt(2) == Types.DOT )
-        {
-            packageNode = consume(Types.IDENTIFIER).asReduction();
-
-            while( lt(3) == Types.DOT )
-            {
-                packageNode = consume(Types.DOT).asReduction( packageNode );
-                packageNode.add( consume(Types.IDENTIFIER) );
-            }
-
-            consume( Types.DOT );
-        }
-
-        if( packageNode == null )
-        {
-            packageNode = Reduction.EMPTY;
-        }
-
-        importStatement.add( packageNode );
-
-
-        //
-        // Then process the class list.
-
-        if( !packageNode.isEmpty() && lt() == Types.STAR )
-        {
-            importStatement.add( consume(Types.STAR) );
-        }
-        else
-        {
-           boolean done = false;
-           while( !done )
-           {
-               Reduction clause = consume(Types.IDENTIFIER).asReduction();
-               if( lt() == Types.KEYWORD_AS )
-               {
-                   consume( Types.KEYWORD_AS );
-                   clause.add( consume(Types.IDENTIFIER) );
-               }
-
-               importStatement.add( clause );
-
-               if( lt() == Types.COMMA )
-               {
-                   consume( Types.COMMA );
-               }
-               else
-               {
-                   done = true;
-               }
-           }
-
-        }
-
-        //
-        // End the statement and return.
-
-        endOfStatement( false );
-        return importStatement;
-    }
-
-
-
-   /**
-    *  Processes a top level statement (classes, interfaces, unattached methods, and
-    *  unattached code).  Called by <code>module()</code>.
-    *  <p>
-    *  Grammar: <pre>
-    *     topLevelStatement
-    *       = methodDeclaration
-    *       | typeDeclaration
-    *       | statement
-    *
-    *     typeDeclaration = classDeclaration | interfaceDeclaration
-    *  </pre>
-    *  <p>
-    *  Recognition: <pre>
-    *     "def"                    => methodDeclaration
-    *     "synchronized" "("       => synchronizedStatement
-    *     modifierList "class"     => classDeclaration
-    *     modifierList "interface" => interfaceDeclaration
-    *     modifierList             => <error>
-    *     *                        => statement
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     see methodDeclaration()
-    *     see classDeclaration()
-    *     see interfaceDeclaration()
-    *     see statement()
-    *     see synchronizedStatement()
-    *  </pre>
-    */
-
-    public CSTNode topLevelStatement() throws SyntaxException, CompilationFailedException
-    {
-        CSTNode result = null;
-
-        //
-        // If it starts "def", it's a method declaration.  Methods
-        // declared this way cannot be abstract.  Note that "def"
-        // is required because the return type is not, and it would
-        // be very hard to tell the difference between a function
-        // def and a function invokation with closure...
-
-        if (lt() == Types.KEYWORD_DEF)
-        {
-            consume();
-
-            Reduction modifiers  = modifierList( false, false );
-            CSTNode   type       = optionalDatatype( false, true );
-            Token     identifier = nameDeclaration( false );
-
-            result = methodDeclaration(modifiers, type, identifier, false);
-        }
-
-        else if (lt() == Types.KEYWORD_DEFMACRO)
-        {
-        	// XXX add my logic here
-        }
-
-        //
-        // If it starts "synchronized(", it's a statement.  This check
-        // is necessary because "synchronized" is also a class modifier.
-
-        else if( lt() == Types.KEYWORD_SYNCHRONIZED && lt(2) == Types.LEFT_PARENTHESIS )
-        {
-            result = synchronizedStatement();
-        }
-
-        //
-        // If it starts with a modifier, "class", or "interface",
-        // it's a type declaration.
-
-        else if( la().isA(Types.DECLARATION_MODIFIER) || la().isA(Types.TYPE_DECLARATION) )
-        {
-            Reduction modifiers = modifierList( true, true );
-
-            switch( lt() )
-            {
-                case Types.KEYWORD_CLASS:
-                {
-                    result = classDeclaration( modifiers );
-                    break;
-                }
-
-                case Types.KEYWORD_INTERFACE:
-                {
-                    result = interfaceDeclaration( modifiers );
-                    break;
-                }
-
-                default:
-                {
-                    error( new int[] { Types.KEYWORD_CLASS, Types.KEYWORD_INTERFACE } );
-                    break;
-                }
-            }
-        }
-
-        //
-        // Otherwise, it's a statement.
-
-        else
-        {
-            result = statement();
-        }
-
-        return result;
-    }
-
-
-
-   /**
-    *  A synomym for <code>topLevelStatement()</code>.
-    */
-
-    public CSTNode typeDeclaration() throws SyntaxException, CompilationFailedException
-    {
-        return topLevelStatement();
-    }
-
-
-
-   /**
-    *  Processes the modifiers list that can appear on top- and class-level
-    *  method and class-level variable names (public, private, abstract, etc.).
-    *  <p>
-    *  Grammar: <pre>
-    *     modifierList = <modifier>*
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     modifiers = { <null> <modifier>* }
-    *  </pre>
-    */
-
-    public Reduction modifierList(boolean allowStatic, boolean allowAbstract) throws CompilationFailedException, SyntaxException
-    {
-        Reduction modifiers = Reduction.newContainer();
-
-        while( la().isA(Types.DECLARATION_MODIFIER) )
-        {
-            if( lt() == Types.KEYWORD_ABSTRACT && !allowAbstract)
-            {
-                controller.addError( "keyword 'abstract' not valid in this setting", la() );
-            }
-            else if (lt() == Types.KEYWORD_STATIC && !allowStatic)
-            {
-                controller.addError( "keyword 'static' not valid in this setting", la() );
-            }
-            modifiers.add( consume() );
-        }
-
-        return modifiers;
-    }
-
-
-
-   /**
-    *  Processes a class declaration.  Caller has already processed the declaration
-    *  modifiers, and passes them in.
-    *  <p>
-    *  Grammar: <pre>
-    *     classDeclaration = <modifier>* "class" <identifier>
-    *                        ["extends" datatype]
-    *                        ["implements" datatype (, datatype)*]
-    *                        typeBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     class      = { <identifier>:SYNTH_CLASS modifiers extends implements body }
-    *     extends    = { "extends"    datatype  } | {}
-    *     implements = { "implements" datatype* } | {}
-    *
-    *     modifiers see modifierList()
-    *     datatype  see datatype()
-    *     body      see typeBody()
-    *  </pre>
-    */
-
-    public Reduction classDeclaration( Reduction modifiers ) throws SyntaxException, CompilationFailedException
-    {
-        consume( Types.KEYWORD_CLASS );
-
-        Reduction classDeclaration = consume(Types.IDENTIFIER).asReduction( modifiers );
-        classDeclaration.setMeaning( Types.SYNTH_CLASS );
-
-
-        //
-        // Process any extends clause.
-
-        try
-        {
-            classDeclaration.add( typeList(Types.KEYWORD_EXTENDS, true, 1) );
-        }
-        catch (SyntaxException e)
-        {
-            controller.addError(e);
-            classDeclaration.add( Reduction.EMPTY );
-        }
-
-
-        //
-        // Process any implements clause.
-
-        try
-        {
-            classDeclaration.add( typeList(Types.KEYWORD_IMPLEMENTS, true, 0) );
-        }
-        catch (SyntaxException e)
-        {
-            controller.addError(e);
-            classDeclaration.add( Reduction.EMPTY );
-        }
-
-
-        //
-        // Process the declaration body.  We currently ignore the abstract keyword.
-
-        classDeclaration.add( typeBody(true, true, false) );
-
-        return classDeclaration;
-    }
-
-
-
-   /**
-    *  Processes a interface declaration.  Caller has already processed the
-    *  declaration modifiers, and passes them in.
-    *  <p>
-    *  Grammar: <pre>
-    *     interfaceDeclaration = <modifier>* "interface" <identifier>
-    *                            ["extends" typeList]
-    *                            typeBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     interface  = { <identifier>:SYNTH_INTERFACE modifiers {} extends body }
-    *     extends    = { "extends" datatype* } | {}
-    *
-    *     modifiers see modifierList()
-    *     datatype  see datatype()
-    *     body      see typeBody()
-    *  </pre>
-    */
-
-    public Reduction interfaceDeclaration( Reduction modifiers ) throws SyntaxException, CompilationFailedException
-    {
-        consume( Types.KEYWORD_INTERFACE );
-
-        Reduction interfaceDeclaration = consume(Types.IDENTIFIER).asReduction( modifiers, Reduction.EMPTY );
-        interfaceDeclaration.setMeaning( Types.SYNTH_INTERFACE );
-
-
-        //
-        // Process any extends clause.
-
-        try
-        {
-            interfaceDeclaration.add( typeList(Types.KEYWORD_EXTENDS, true, 0) );
-        }
-        catch (SyntaxException e)
-        {
-            controller.addError(e);
-            interfaceDeclaration.add( Reduction.EMPTY );
-        }
-
-
-        //
-        // Process the declaration body.  All methods must be abstract.
-        // Static methods are not allowed.
-
-        interfaceDeclaration.add( typeBody(false, true, true) );
-        return interfaceDeclaration;
-    }
-
-
-
-   /**
-    *  Processes a type list, like the ones that occur after "extends" or
-    *  implements.  If the list is optional, the returned CSTNode will
-    *  be empty.
-    *  <p>
-    *  Grammar: <pre>
-    *     typeList = <declarator> datatype (, datatype)*
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     typeList = { <declarator> datatype+ } | {}
-    *
-    *     datatype see datatype()
-    *  </pre>
-    */
-
-    public Reduction typeList(int declarator, boolean optional, int limit) throws SyntaxException, CompilationFailedException
-    {
-        Reduction typeList = null;
-
-        if( lt() == declarator )
-        {
-            typeList = consume(declarator).asReduction();
-
-            //
-            // Loop, reading one datatype at a time.  On error, attempt
-            // recovery until the end of the clause is found.
-
-            while( limit == 0 || typeList.children() < limit )
-            {
-                //
-                // Try for a list entry, and correct if missing
-
-                try
-                {
-                    if( typeList.children() > 0)
-                    {
-                        consume( Types.COMMA );
-                    }
-
-                    typeList.add( datatype(false) );
-                }
-                catch (SyntaxException e)
-                {
-                    controller.addError(e);
-                    recover( Types.TYPE_LIST_TERMINATORS );
-                }
-
-                //
-                // Check if we have reached the end point.  It is
-                // done at the bottom of the loop to ensure that there
-                // is at least one datatype in the list
-
-                if( !la().isA(Types.COMMA) )
-                {
-                    break;
-                }
-            }
-        }
-
-        else
-        {
-            if (optional)
-            {
-                typeList = Reduction.EMPTY;
-            }
-            else
-            {
-                error( declarator );
-            }
-        }
-
-        return typeList;
-    }
-
-
-
-   /**
-    *  Processes the body of an interface or class.
-    *  <p>
-    *  Grammar: <pre>
-    *     typeBody = "{" typeBodyStatement* "}"
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     body = { <null> typeBodyStatement* }
-    *
-    *     typeBodyStatement see typeBodyStatement()
-    *  </pre>
-    */
-
-    public Reduction typeBody(boolean allowStatic, boolean allowAbstract, boolean requireAbstract) throws SyntaxException, CompilationFailedException
-    {
-        Reduction body = Reduction.newContainer();
-
-        consume( Types.LEFT_CURLY_BRACE );
-
-        while( lt() != Types.EOF && lt() != Types.RIGHT_CURLY_BRACE )
-        {
-            try
-            {
-                body.add( typeBodyStatement(allowStatic, allowAbstract, requireAbstract) );
-            }
-            catch( SyntaxException e )
-            {
-                controller.addError(e);
-                recover();
-            }
-        }
-
-        consume( Types.RIGHT_CURLY_BRACE );
-
-        return body;
-    }
-
-
-
-   /**
-    *  Processes a single entry in the the body of an interface or class.
-    *  Valid objects are constructors, methods, properties, static initializers,
-    *  and inner classes or interfaces.
-    *  <p>
-    *  Grammar: <pre>
-    *     typeBodyStatement
-    *       = staticInitializer
-    *       | classDeclaration
-    *       | interfaceDeclaration
-    *       | propertyDeclaration
-    *       | methodDeclaration
-    *
-    *     staticInitializer = ("static" "{" statement* "}")
-    *  </pre>
-    *  <p>
-    *  Recognition: <pre>
-    *     "static" "{"             => staticInitializer
-    *     modifierList "class"     => classDeclaration
-    *     modifierList "interface" => interfaceDeclaration
-    *     modifierList ["property"] optionalDatatype identifier "("               => methodDeclaration
-    *     modifierList ["property"] optionalDatatype identifier ("="|";"|"\n"|"}" => propertyDeclaration
-    *     *                        => <error>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     see classDeclaration()
-    *     see interfaceDeclaration()
-    *     see methodDeclaration()
-    *     see propertyDeclaration()
-    *  </pre>
-    */
-
-    public Reduction typeBodyStatement(boolean allowStatic, boolean allowAbstract, boolean requireAbstract) throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = null;
-
-        //
-        // As "static" can be both a modifier and a static initializer, we
-        // handle the static initializer first.
-
-        if( lt() == Types.KEYWORD_STATIC && lt(2) == Types.LEFT_CURLY_BRACE )
-        {
-            if (!allowStatic)
-            {
-                controller.addError( "static initializers not valid in this context", la() );
-            }
-
-            Reduction modifiers  = modifierList( true, false );
-            Token     identifier = Token.NULL;
-            statement = methodDeclaration( modifiers, Reduction.EMPTY, identifier, false );
-        }
-
-        //
-        // Otherwise, it is a property, constructor, method, class, or interface.
-
-        else
-        {
-            Reduction modifiers = modifierList( allowStatic, allowAbstract );
-
-            //
-            // Check for inner types
-
-            if( lt() == Types.KEYWORD_CLASS )
-            {
-                statement = classDeclaration( modifiers );
-            }
-
-            else if( lt() == Types.KEYWORD_INTERFACE )
-            {
-                statement = interfaceDeclaration( modifiers );
-            }
-
-            //
-            // Otherwise, it is a property, constructor, or method.
-
-            else
-            {
-                //
-                // Ignore any property keyword, if present (it's deprecated)
-
-                if( lt() == Types.KEYWORD_PROPERTY )
-                {
-                    consume();
-                }
-
-                //
-                // All processing here is whitespace sensitive, in order
-                // to be consistent with the way "def" functions work (due
-                // to the optionality of the semicolon).  One of the
-                // consequences is that the left parenthesis of a
-                // method declaration /must/ appear on the same line.
-
-                while( lt(true) == Types.NEWLINE)
-                {
-                    consume( Types.NEWLINE );
-                }
-
-                //
-                // We don't yet know about void, so we err on the side of caution
-
-                CSTNode   type       = optionalDatatype( true, true );
-                Token     identifier = nameDeclaration( true );
-
-                switch( lt(true) )
-                {
-                    case Types.LEFT_PARENTHESIS :
-                    {
-                        //
-                        // We require abstract if specified on call or the
-                        // "abstract" modifier was supplied.
-
-                        boolean methodIsAbstract = requireAbstract;
-
-                        if( !methodIsAbstract )
-                        {
-                            for( int i = 1; i < modifiers.size(); i++ )
-                            {
-                                if( modifiers.get(i).getMeaning() == Types.KEYWORD_ABSTRACT )
-                                {
-                                    methodIsAbstract = true;
-                                    break;
-                                }
-                            }
-                        }
-
-                        statement = methodDeclaration( modifiers, type, identifier, methodIsAbstract );
-                        break;
-                    }
-
-                    case Types.EQUAL:
-                    case Types.SEMICOLON:
-                    case Types.NEWLINE:
-                    case Types.RIGHT_CURLY_BRACE:
-                    case Types.EOF:
-                        statement = propertyDeclaration( modifiers, type, identifier );
-                        break;
-
-                    default:
-                        error( new int[] { Types.LEFT_PARENTHESIS, Types.EQUAL, Types.SEMICOLON, Types.NEWLINE, Types.RIGHT_CURLY_BRACE } );
-                }
-            }
-        }
-
-        return statement;
-    }
-
-
-
-   /**
-    *  A synonym for <code>typeBodyStatement( true, true, false )</code>.
-    */
-
-    public Reduction bodyStatement() throws SyntaxException, CompilationFailedException
-    {
-        return typeBodyStatement( true, true, false );
-    }
-
-
-
-   /**
-    *  Processes a name that is valid for declarations.  Newlines can be made
-    *  significant, if required for disambiguation.
-    *  <p>
-    *  Grammar: <pre>
-    *     nameDeclaration = <identifier>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     name = <identifier>
-    *  </pre>
-    */
-
-    protected Token nameDeclaration( boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        return consume( Types.IDENTIFIER, significantNewlines );
-    }
-
-
-
-   /**
-    *  Processes a reference to a declared name.  Newlines can be made significant,
-    *  if required for disambiguation.
-    *  <p>
-    *  Grammar: <pre>
-    *     nameReference = <identifier> | <various keywords>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     name = <identifier>
-    *  </pre>
-    */
-
-    protected Token nameReference( boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-
-        Token token = la( significantNewlines );
-        if( !token.canMean(Types.IDENTIFIER) )
-        {
-            error( Types.IDENTIFIER );
-        }
-
-        consume();
-        token.setMeaning( Types.IDENTIFIER );
-
-        return token;
-
-    }
-
-
-
-   /**
-    *  Processes an optional data type marker (for a parameter, method return type,
-    *  etc.).  Newlines can be made significant, if required for disambiguation.
-    *  <p>
-    *  Grammar: <pre>
-    *     optionalDatatype = datatype? (?=<identifier>)
-    *  </pre>h
-    *  <p>
-    *  CST: <pre>
-    *     result = datatype | {}
-    *
-    *     see datatype()
-    *  </pre>
-    */
-
-    protected CSTNode optionalDatatype( boolean significantNewlines, boolean allowVoid ) throws SyntaxException, CompilationFailedException
-    {
-        CSTNode type = Reduction.EMPTY;
-        Token   next = la(significantNewlines);
-
-        //
-        // If the next token is an identifier, it could be an untyped
-        // variable/method name.  If it is followed by another identifier,
-        // we'll assume type.  Otherwise, we'll attempt a datatype and
-        // restore() the stream if there is a problem.
-
-        if( next.isA(Types.IDENTIFIER) )
-        {
-            if( lt(2, significantNewlines) == Types.IDENTIFIER )
-            {
-                type = datatype( allowVoid );
-            }
-            else
-            {
-                getTokenStream().checkpoint();
-
-                try
-                {
-                    type = datatype( allowVoid );
-                    if( lt(significantNewlines) != Types.IDENTIFIER )
-                    {
-                        throw new Exception();
-                    }
-                }
-                catch( Exception e )
-                {
-                    getTokenStream().restore();
-                    type = Reduction.EMPTY;
-                }
-            }
-        }
-
-        //
-        // If it is a primitive type name, it must be a datatype.  If void
-        // is present but not allowed, it is an error, and we let datatype()
-        // catch it.
-
-        else if( next.isA(Types.PRIMITIVE_TYPE) )
-        {
-            type = datatype( allowVoid );
-        }
-
-        return type;
-    }
-
-
-
-
-   /**
-    *  Processes a class/interface property, including the optional initialization
-    *  clause.  The modifiers, type, and identifier have already been identified
-    *  by the caller, and are passed in.
-    *  <p>
-    *  Grammar: <pre>
-    *     propertyDeclaration = (modifierList optionalDatatype nameDeclaration ["=" expression]) <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     property = { <identifier>:SYNTH_PROPERTY modifierList optionalDatatype expression? }
-    *
-    *     see modifierList()
-    *     see optionalDatatype()
-    *     see expression()
-    *  </pre>
-    */
-
-    public Reduction propertyDeclaration( Reduction modifiers, CSTNode type, Token identifier ) throws SyntaxException, CompilationFailedException
-    {
-        Reduction property = identifier.asReduction( modifiers, type );
-        property.setMeaning( Types.SYNTH_PROPERTY );
-
-        if( lt() == Types.EQUAL )
-        {
-            consume();
-            property.add( expression() );
-        }
-
-        endOfStatement();
-        return property;
-    }
-
-
-
-   /**
-    *  Processes a class/interface method.  The modifiers, type, and identifier have
-    *  already been identified by the caller, and are passed in.  If <code>emptyOnly</code>
-    *  is set, no method body will be allowed.
-    *  <p>
-    *  Grammar: <pre>
-    *     methodDeclaration = modifierList optionalDatatype identifier
-    *                         "(" parameterDeclarationList ")"
-    *                         [ "throws" typeList ]
-    *                         ( statementBody | <eos> )
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     method = { <identifier>:SYNTH_METHOD modifierList optionalDatatype
-    *                 parameterDeclarationList throwsClause statementBody }
-    *
-    *     throwsClause = { "throws" datatype+ } | {}
-    *
-    *     see modifierList()
-    *     see optionalDatatype()
-    *     see parameterDeclarationList()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    public Reduction methodDeclaration( Reduction modifiers, CSTNode type, Token identifier, boolean emptyOnly) throws SyntaxException, CompilationFailedException
-    {
-        Reduction method = identifier.asReduction( modifiers, type );
-        method.setMeaning( Types.SYNTH_METHOD );
-
-        //
-        // Process the parameter list
-
-        consume(Types.LEFT_PARENTHESIS);
-        method.add( parameterDeclarationList() );
-        consume(Types.RIGHT_PARENTHESIS);
-
-        //
-        // Process the optional "throws" clause
-
-        try
-        {
-            method.add( typeList( Types.KEYWORD_THROWS, true, 0 ) );
-        }
-        catch (SyntaxException e)
-        {
-            controller.addError(e);
-            method.add( Reduction.EMPTY );
-        }
-
-        //
-        // And the body.  If it isn't supposed to be there, report the
-        // error, but process it anyway, for the point of recovering.
-
-        CSTNode body = null;
-
-        if( emptyOnly )
-        {
-            if( lt() == Types.LEFT_CURLY_BRACE )
-            {
-                controller.addError( "abstract and interface methods cannot have a body", la() );
-            }
-            else
-            {
-                body = Reduction.EMPTY;
-                endOfStatement();
-            }
-
-        }
-
-        if( body == null )
-        {
-            body = statementBody(true);
-        }
-
-        method.add( body );
-
-
-        return method;
-    }
-
-
-
-   /**
-    *  Processes a parameter declaration list, which can occur on methods and closures.
-    *  It loops as long as it finds a comma as the next token.
-    *  <p>
-    *  Grammar: <pre>
-    *     parameterDeclarationList
-    *        = (parameterDeclaration ("," parameterDeclaration)* ("," parameterDeclaration "=" expression)* )?
-    *        | (parameterDeclaration "=" expression ("," parameterDeclaration "=" expression)* )?
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     parameters = { <null> parameter* }
-    *     parameter  = { <identifier>:SYNTH_PARAMETER_DECLARATION optionalDatatype default? }
-    *     default    = expression
-    *  </pre>
-    */
-
-    protected Reduction parameterDeclarationList() throws SyntaxException, CompilationFailedException
-    {
-        Reduction list = Reduction.newContainer();
-
-        boolean expectDefaults = false;
-        while( la().isA(Types.TYPE_NAME) )  // TYPE_NAME includes <identifier>, and so does double duty
-        {
-
-            //
-            // Get the declaration
-
-            Reduction parameter = (Reduction)list.add( parameterDeclaration() );
-
-            //
-            // Process any default parameter (it is required on every parameter
-            // after the first occurrance).
-
-            if( expectDefaults || lt() == Types.EQUAL )
-            {
-                expectDefaults = true;
-                consume( Types.EQUAL );
-
-                parameter.add( expression() );
-            }
-
-            //
-            // Check if we are done.
-
-            if( lt() == Types.COMMA )
-            {
-                consume( Types.COMMA );
-            }
-            else
-            {
-                break;
-            }
-        }
-
-        return list;
-    }
-
-
-
-   /**
-    *  Processes a single parameter declaration, which can occur on methods and closures.
-    *  <p>
-    *  Grammar: <pre>
-    *     parameterDeclaration = optionalDatatype nameDeclaration
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     parameter = { <identifier>:SYNTH_PARAMETER_DECLARATION optionalDatatype }
-    *
-    *     see optionalDatatype()
-    *  </pre>
-    */
-
-    protected Reduction parameterDeclaration() throws SyntaxException, CompilationFailedException
-    {
-        CSTNode   type      = optionalDatatype( false, false );
-        Reduction parameter = nameDeclaration( false ).asReduction( type );
-        parameter.setMeaning( Types.SYNTH_PARAMETER_DECLARATION );
-
-        return parameter;
-    }
-
-
-
-   /**
-    *  Processes a datatype specification.  For reasons of disambiguation,
-    *  the array marker ([]) must never be on a separate line from the
-    *  base datatype.
-    *  <p>
-    *  Grammar: <pre>
-    *     datatype = scalarDatatype ( "[" "]" )*
-    *
-    *     scalarDatatype = dottedIdentifier | "void" | "int" | ...
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     datatype  = { "[" datatype } | scalar
-    *     scalar    = dottedIdentifier | primitive
-    *     primitive = "void" | "int" | ...
-    *
-    *     see dottedIdentifier()
-    *  </pre>
-    */
-
-    protected CSTNode datatype( boolean allowVoid ) throws SyntaxException, CompilationFailedException
-    {
-        CSTNode datatype = scalarDatatype(allowVoid);
-
-        while( lt(true) == Types.LEFT_SQUARE_BRACKET )
-        {
-            datatype = consume(Types.LEFT_SQUARE_BRACKET).asReduction( datatype );
-            consume( Types.RIGHT_SQUARE_BRACKET );
-        }
-
-        return datatype;
-    }
-
-
-
-   /**
-    *  A synonym for <code>datatype( true )</code>.
-    */
-
-    protected CSTNode datatype() throws SyntaxException, CompilationFailedException
-    {
-        return datatype(true);
-    }
-
-
-
-   /**
-    *  Processes a scalar datatype specification.
-    *  <p>
-    *  Grammar: <pre>
-    *     scalarDatatype = dottedIdentifier | "void" | "int" | ...
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     scalar    = dottedIdentifier | primitive
-    *     primitive = "void" | "int" | ...
-    *
-    *     see dottedIdentifier()
-    *  </pre>
-    */
-
-    protected CSTNode scalarDatatype( boolean allowVoid ) throws SyntaxException, CompilationFailedException
-    {
-        CSTNode datatype = null;
-
-        if( la().isA(allowVoid ? Types.PRIMITIVE_TYPE : Types.CREATABLE_PRIMITIVE_TYPE) )
-        {
-            datatype = consume();
-        }
-        else
-        {
-            datatype = dottedIdentifier();
-        }
-
-        return datatype;
-    }
-
-
-
-   /**
-    *  Processes the body of a complex statement (like "if", "for", etc.).
-    *  Set <code>requireBraces</code> if the body must not be just a single
-    *  statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     statementBody = ("{" statement* "}")
-    *                   | statement
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     complex = { "{" statement* }
-    *     simple  = statement
-    *
-    *     see statement()
-    *  </pre>
-    */
-
-    protected CSTNode statementBody( boolean requireBraces ) throws SyntaxException, CompilationFailedException
-    {
-        CSTNode body = null;
-
-        if (lt() == Types.LEFT_CURLY_BRACE)
-        {
-            Token brace = consume( Types.LEFT_CURLY_BRACE );
-            brace.setMeaning( Types.SYNTH_BLOCK );
-
-            body = statementsUntilRightCurly();
-            body.set( 0, brace );
-
-            consume( Types.RIGHT_CURLY_BRACE );
-        }
-        else
-        {
-            if( requireBraces )
-            {
-                error( Types.LEFT_CURLY_BRACE );
-            }
-            else
-            {
-               body = statement();
-            }
-        }
-
-        return body;
-    }
-
-
-
-   /**
-    *  Reads statements until a "}" is met.
-    *  <p>
-    *  Grammar: <pre>
-    *     statementsUntilRightCurly = statement* (?= "}")
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statements = { <null> statement* }
-    *  </pre>
-    */
-
-    protected Reduction statementsUntilRightCurly( ) throws SyntaxException, CompilationFailedException
-    {
-        Reduction block = Reduction.newContainer();
-
-        while( lt() != Types.EOF && lt() != Types.RIGHT_CURLY_BRACE )
-        {
-            try
-            {
-                block.add( statement() );
-            }
-            catch( SyntaxException e )
-            {
-                controller.addError( e );
-                recover();
-            }
-        }
-
-
-        return block;
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // PRODUCTIONS: STATEMENTS
-
-
-   /**
-    *  Processes a single statement.  Statements include: loop constructs, branch
-    *  constructs, flow control constructs, exception constructs, expressions of
-    *  a variety of types, and pretty much anything you can put inside a method.
-    *  <p>
-    *  Grammar: <pre>
-    *     statement      = (label ":")? bareStatement
-    *     bareStatement  = (emptyStatement|basicStatement|blockStatement)
-    *
-    *     basicStatement = forStatement
-    *                    | whileStatement
-    *                    | doStatement
-    *                    | continueStatement
-    *                    | breakStatement
-    *                    | ifStatement
-    *                    | tryStatement
-    *                    | throwStatement
-    *                    | synchronizedStatement
-    *                    | switchStatement
-    *                    | returnStatement
-    *                    | assertStatement
-    *                    | expression <eos>
-    *
-    *     label          = <identifier>
-    *     blockStatement = "{" statement* "}"
-    *     emptyStatement = ";"
-    *  </pre>
-    *  <p>
-    *  Recognition: <pre>
-    *     ";"       => emptyStatement
-    *     <keyword> => <keyword>Statement
-    *     "{"       => expression, then:
-    *                    if it is a closureExpression and has no parameters => blockStatement
-    *
-    *     *         => expression
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     labelled       = { <identifier>:SYNTH_LABEL bareStatement }
-    *     bareStatement  = emptyStatement | blockStatement | basicStatement
-    *     emptyStatement = { "{" }
-    *     blockStatement = { "{" statement* }
-    *
-    *     see forStatement()
-    *     see whileStatement()
-    *     see doStatement()
-    *     see continueStatement()
-    *     see breakStatement()
-    *     see ifStatement()
-    *     see tryStatement()
-    *     see throwStatement()
-    *     see synchronizedStatement()
-    *     see switchStatement()
-    *     see returnStatement()
-    *     see assertStatement()
-    *     see expression()
-    *  </pre>
-    */
-
-    protected CSTNode statement( boolean allowUnlabelledBlocks ) throws SyntaxException, CompilationFailedException
-    {
-        CSTNode statement = null;
-
-        //
-        // Check for and grab any label for the statement
-
-        CSTNode label = null;
-        if( lt() == Types.IDENTIFIER && lt(2) == Types.COLON )
-        {
-            label = consume( Types.IDENTIFIER ).asReduction();
-            label.setMeaning( Types.SYNTH_LABEL );
-
-            consume( Types.COLON );
-        }
-
-        //
-        // Process the statement
-
-        switch( lt() )
-        {
-            case Types.KEYWORD_ASSERT:
-            {
-                statement = assertStatement();
-                break;
-            }
-
-            case Types.KEYWORD_BREAK:
-            {
-                statement = breakStatement();
-                break;
-            }
-
-            case Types.KEYWORD_CONTINUE:
-            {
-                statement = continueStatement();
-                break;
-            }
-
-            case Types.KEYWORD_IF:
-            {
-                statement = ifStatement();
-                break;
-            }
-
-            case Types.KEYWORD_RETURN:
-            {
-                statement = returnStatement();
-                break;
-            }
-
-            case Types.KEYWORD_SWITCH:
-            {
-                statement = switchStatement();
-                break;
-            }
-
-            case Types.KEYWORD_SYNCHRONIZED:
-            {
-                statement = synchronizedStatement();
-                break;
-            }
-
-            case Types.KEYWORD_THROW:
-            {
-                statement = throwStatement();
-                break;
-            }
-
-            case Types.KEYWORD_TRY:
-            {
-                statement = tryStatement();
-                break;
-            }
-
-            case Types.KEYWORD_FOR:
-            {
-                statement = forStatement();
-                break;
-            }
-
-            case Types.KEYWORD_DO:
-            {
-                statement = doWhileStatement();
-                break;
-            }
-
-            case Types.KEYWORD_WHILE:
-            {
-                statement = whileStatement();
-                break;
-            }
-
-            case Types.SEMICOLON:
-            {
-                statement = consume().asReduction();
-                statement.setMeaning( Types.SYNTH_BLOCK );
-                break;
-            }
-
-            case Types.LEFT_CURLY_BRACE:
-            {
-
-                //
-                // Bare blocks are no longer generally supported, due to the ambiguity
-                // with closures.  Further, closures and blocks can look identical
-                // until after parsing, so we process first as a closure expression,
-                // then, if the expression is a parameter-less, bare closure, rebuild
-                // it as a block (which generally requires a label).  Joy.
-
-                statement = expression();
-                if( statement.isA(Types.SYNTH_CLOSURE) )
-                {
-                    if( !statement.get(1).hasChildren() )
-                    {
-                        Reduction block = statement.getRoot().asReduction();
-                        block.setMeaning( Types.SYNTH_BLOCK );
-                        block.addChildrenOf( statement.get(2) );
-
-                        if( label == null && !allowUnlabelledBlocks )
-                        {
-                            controller.addError( "groovy does not support anonymous blocks; please add a label", statement.getRoot() );
-                        }
-
-                        statement = block;
-                    }
-                }
-                else
-                {
-                   //
-                   // It's a closure expression, and must be a statement
-
-                   endOfStatement();
-                }
-
-                break;
-            }
-
-            default:
-            {
-                try
-                {
-                    statement = expression();
-                    endOfStatement();
-                }
-                catch (SyntaxException e)
-                {
-                    controller.addError(e);
-                    recover();
-                }
-            }
-        }
-
-
-        //
-        // Wrap the statement in the label, if necessary.
-
-        if( label != null )
-        {
-            label.add( statement );
-            statement = label;
-        }
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Synonym for <code>statement( false )</code>.
-    */
-
-    protected CSTNode statement( ) throws SyntaxException, CompilationFailedException
-    {
-        return statement( false );
-    }
-
-
-
-   /**
-    *  Processes an assert statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     assertStatement = "assert" expression (":" expression) <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     assert = { "assert" expression expression? }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction assertStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume( Types.KEYWORD_ASSERT ).asReduction( expression() );
-
-        if( lt() == Types.COLON )
-        {
-            consume( Types.COLON );
-            statement.add( expression() );
-        }
-
-        endOfStatement();
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes a break statement.  We require the label on the same line.
-    *  <p>
-    *  Grammar: <pre>
-    *     breakStatement = "break" label? <eos>
-    *
-    *     label = <identifier>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement = { "break" label? }
-    *     label     = <identifier>
-    *  </pre>
-    */
-
-    protected Reduction breakStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_BREAK).asReduction();
-        if( lt(true) == Types.IDENTIFIER )
-        {
-            statement.add( consume() );
-        }
-
-        endOfStatement();
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes a continue statement.  We require the label on the same line.
-    *  <p>
-    *  Grammar: <pre>
-    *     continueStatement = "continue" label? <eos>
-    *
-    *     label = <identifier>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement = { "continue" label? }
-    *     label     = <identifier>
-    *  </pre>
-    */
-
-    protected Reduction continueStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_CONTINUE).asReduction();
-        if( lt(true) == Types.IDENTIFIER )
-        {
-            statement.add( consume() );
-        }
-
-        endOfStatement();
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes a throw statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     throwStatement = "throw" expression <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement = { "throw" expression }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction throwStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_THROW).asReduction( expression() );
-        endOfStatement();
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes an if statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     ifStatement  = ifClause elseIfClause* elseClause?
-    *
-    *     ifClause     = "if" "(" expression ")" statementBody
-    *     elseIfClause = "else" "if" "(" expression ")" statementBody
-    *     elseClause   = "else" statementBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     if   = { "if" expression statementBody else? }
-    *     else = if | { "else" statementBody }
-    *
-    *     see expression()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction ifStatement() throws SyntaxException, CompilationFailedException
-    {
-        //
-        // Process the if clause
-
-        Reduction statement = consume(Types.KEYWORD_IF).asReduction();
-
-        consume( Types.LEFT_PARENTHESIS );
-
-        try
-        {
-            statement.add( expression() );
-        }
-        catch( SyntaxException e )
-        {
-            controller.addError( e );
-            recover( Types.RIGHT_PARENTHESIS );
-        }
-
-        consume( Types.RIGHT_PARENTHESIS );
-
-        statement.add( statementBody(false) );
-
-
-        //
-        // If the else clause is present:
-        //   if it is an else if, recurse
-        //   otherwise, build the else node directly.
-
-        if( lt() == Types.KEYWORD_ELSE )
-        {
-            if( lt(2) == Types.KEYWORD_IF )
-            {
-                consume( Types.KEYWORD_ELSE );
-                statement.add( ifStatement() );
-            }
-            else
-            {
-                Reduction last = (Reduction)statement.add( consume(Types.KEYWORD_ELSE).asReduction() );
-                last.add( statementBody(false) );
-            }
-        }
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes a return statement.  Any expression must start on the same line
-    *  as the "return".
-    *  <p>
-    *  Grammar: <pre>
-    *     returnStatement = "return" expression? <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement = { "return" expression? }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction returnStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_RETURN).asReduction();
-
-        if( !la(true).isA(Types.ANY_END_OF_STATEMENT) )
-        {
-            statement.add( expression() );
-        }
-
-        endOfStatement();
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes a switch statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     switchStatment = "switch" "(" expression ")" "{" switchBody "}"
-    *
-    *     switchBody = caseSet*
-    *     caseSet = (("case" expression ":")+ | ("default" ":")) statement+
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     switch = { "switch" expression case* }
-    *     case   = { "case" expression statement* }
-    *            | { "default" statement* }
-    *
-    *     see expression()
-    *     see statement()
-    *  </pre>
-    */
-
-    protected Reduction switchStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_SWITCH).asReduction();
-        consume( Types.LEFT_PARENTHESIS );
-        statement.add( expression() );
-        consume( Types.RIGHT_PARENTHESIS );
-
-        //
-        // Process the switch body.  Labels can be pretty much anything,
-        // but we'll duplicate-check for default.
-
-        consume( Types.LEFT_CURLY_BRACE );
-
-        boolean defaultFound = false;
-        while( lt() == Types.KEYWORD_CASE || lt() == Types.KEYWORD_DEFAULT )
-        {
-            //
-            // Read the label
-
-            Reduction caseBlock = null;
-            if( lt() == Types.KEYWORD_CASE )
-            {
-                caseBlock = consume( Types.KEYWORD_CASE ).asReduction( expression() );
-            }
-            else if( lt() == Types.KEYWORD_DEFAULT )
-            {
-                if( defaultFound )
-                {
-                    controller.addError( "duplicate default entry in switch", la() );
-                }
-
-                caseBlock = consume( Types.KEYWORD_DEFAULT ).asReduction();
-                defaultFound = true;
-            }
-            else
-            {
-                error( new int[] { Types.KEYWORD_DEFAULT, Types.KEYWORD_CASE } );
-                recover( Types.SWITCH_ENTRIES );
-            }
-
-            consume( Types.COLON );
-
-
-            //
-            // Process the statements, if any
-
-            boolean first = true;
-            while( !la().isA(Types.SWITCH_BLOCK_TERMINATORS) )
-            {
-                caseBlock.add( statement(first) );
-                first = false;
-            }
-
-            statement.add( caseBlock );
-        }
-
-        consume( Types.RIGHT_CURLY_BRACE );
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes a synchronized statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     synchronizedStatement = "synchronized" "(" expression ")" statementBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement = { "synchronized" expression statementBody }
-    *
-    *     see expression()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction synchronizedStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_SYNCHRONIZED).asReduction();
-
-        consume( Types.LEFT_PARENTHESIS );
-        statement.add( expression() );
-        consume( Types.RIGHT_PARENTHESIS );
-
-        statement.add( statementBody(true) );
-
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes a try statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     tryStatement  = "try" statementBody catchClause* finallyClause?
-    *
-    *     catchClause   = "catch" "(" datatype identifier ")" statementBody
-    *     finallyClause = "finally" statementBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     try     = { "try" statementBody catches finally }
-    *
-    *     catches = { <null> catch* }
-    *
-    *     catch   = { "catch" datatype <identifier> statementBody }
-    *
-    *     finally = {} | statementBody
-    *
-    *     see datatype()
-    *     see identifier()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction tryStatement() throws SyntaxException, CompilationFailedException
-    {
-
-        //
-        // Set up the statement with the try clause
-
-        Reduction statement = consume(Types.KEYWORD_TRY).asReduction();
-        statement.add( statementBody(true) );
-
-
-        //
-        // Process the catch clauses
-
-        Reduction catches = (Reduction)statement.add( Reduction.newContainer() );
-        while( lt() == Types.KEYWORD_CATCH )
-        {
-            try
-            {
-                Reduction catchBlock = (Reduction)catches.add( consume(Types.KEYWORD_CATCH).asReduction() );
-
-                consume( Types.LEFT_PARENTHESIS );
-                try
-                {
-                    catchBlock.add( datatype(false) );
-                    catchBlock.add( nameDeclaration(false) );
-                }
-                catch( SyntaxException e )
-                {
-                    controller.addError( e );
-                    recover( Types.RIGHT_PARENTHESIS );
-                }
-                consume( Types.RIGHT_PARENTHESIS );
-
-                catchBlock.add( statementBody(true) );
-            }
-            catch( SyntaxException e )
-            {
-                controller.addError( e );
-                recover();
-            }
-        }
-
-        //
-        // Process the finally clause, if available.
-
-        if( lt() == Types.KEYWORD_FINALLY )
-        {
-            consume( Types.KEYWORD_FINALLY );
-            statement.add( statementBody(true) );
-        }
-        else
-        {
-            statement.add( Reduction.EMPTY );
-        }
-
-        return statement;
-    }
-
-
-
-  //---------------------------------------------------------------------------
-  // PRODUCTIONS: LOOP STATEMENTS
-
-
-   /**
-    *  Processes a for statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     forStatement = "for" "(" normal | each ")" statementBody
-    *
-    *     normal = multi ";" expression ";" multi
-    *     multi  = (expression ["," expression]*)
-    *
-    *     each   = optionalDatatype nameDeclaration ("in"|":") expression
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     for    = { "for" header statementBody }
-    *
-    *     header = normal | each
-    *     each   = { ("in"|":") optionalDatatype nameDeclaration expression }
-    *
-    *     normal = { <null> init test incr }
-    *     init   = { <null> expression* }
-    *     test   = expression
-    *     incr   = { <null> expression* }
-    *
-    *     see expression()
-    *     see nameDeclaration()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction forStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume( Types.KEYWORD_FOR ).asReduction();
-
-        //
-        // The for loop is a little tricky.  There are three forms,
-        // and the first two can't be processed with expression().
-        // In order to avoid complications, we are going to checkpoint()
-        // the stream before processing optionalDatatype(), then restore
-        // it if we need to use expression().
-        //
-        // Anyway, after processing the optionalDatatype(), if KEYWORD_IN
-        // or a COLON is at la(2), it's an each loop.  Otherwise, it's the
-        // standard for loop.
-
-        consume( Types.LEFT_PARENTHESIS );
-
-        getTokenStream().checkpoint();
-
-        Reduction header   = null;
-        CSTNode   datatype = optionalDatatype( false, false );
-
-        if( lt(2) == Types.KEYWORD_IN || lt(2) == Types.COLON )
-        {
-            Token name = nameDeclaration( false );
-            header = consume().asReduction( datatype, name, expression() );
-        }
-        else
-        {
-            getTokenStream().restore();
-            header = Reduction.newContainer();
-
-            Reduction init = Reduction.newContainer();
-            while( lt() != Types.SEMICOLON && lt() != Types.EOF )
-            {
-                init.add( expression() );
-
-                if( lt() != Types.SEMICOLON )
-                {
-                    consume( Types.COMMA );
-                }
-            }
-
-            consume( Types.SEMICOLON );
-
-            header.add( init );
-
-
-            //
-            // Next up, a single expression is the test clause, followed
-            // by a semicolon.
-
-            header.add( expression() );
-            consume( Types.SEMICOLON );
-
-
-            //
-            // Finally, the increment section is a (possibly empty) comma-
-            // separated list of expressions followed by the RIGHT_PARENTHESIS.
-
-            Reduction incr = (Reduction)header.add( Reduction.newContainer() );
-
-            while( lt() != Types.RIGHT_PARENTHESIS && lt() != Types.EOF )
-            {
-                incr.add( expression() );
-
-                if( lt() != Types.RIGHT_PARENTHESIS )
-                {
-                    consume( Types.COMMA );
-                }
-            }
-        }
-
-        consume( Types.RIGHT_PARENTHESIS );
-
-        statement.add( header );
-        statement.add( statementBody(false) );
-
-        return statement;
-    }
-
-
-
-   /**
-    *  Processes a do ... while statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     doWhileStatement = "do" statementBody "while" "(" expression ")" <eos>
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     do = { "do" statementBody expression }
-    *
-    *     see expression()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction doWhileStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_DO).asReduction();
-        statement.add( statementBody(false) );
-        consume( Types.KEYWORD_WHILE );
-
-        consume( Types.LEFT_PARENTHESIS );
-        try
-        {
-            statement.add( expression() );
-        }
-        catch( SyntaxException e )
-        {
-            controller.addError( e );
-            recover( Types.RIGHT_PARENTHESIS );
-        }
-        consume( Types.RIGHT_PARENTHESIS );
-
-        return statement;
-
-    }
-
-
-
-   /**
-    *  Processes a while statement.
-    *  <p>
-    *  Grammar: <pre>
-    *     whileStatement = "while" "(" expression ")" statementBody
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     while = { "while" expression statementBody }
-    *
-    *     see expression()
-    *     see statementBody()
-    *  </pre>
-    */
-
-    protected Reduction whileStatement() throws SyntaxException, CompilationFailedException
-    {
-        Reduction statement = consume(Types.KEYWORD_WHILE).asReduction();
-
-        consume( Types.LEFT_PARENTHESIS );
-
-        try
-        {
-            statement.add( expression() );
-        }
-        catch( SyntaxException e )
-        {
-            controller.addError( e );
-            recover( Types.RIGHT_PARENTHESIS );
-        }
-        consume( Types.RIGHT_PARENTHESIS );
-
-        statement.add( statementBody(false) );
-        return statement;
-
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // PRODUCTIONS: EXPRESSIONS
-
-
-   /**
-    *  Processes a single (sub-)expression into a CSTNode.  No assumption is
-    *  made about what follows the expression.
-    *  <p>
-    *  Note that the expression parser is rather stupid, in that it cannot
-    *  resolve names.  Therefore it is little more than a pre-filter, removing
-    *  statements that can't possibly be right, but leaving everything that
-    *  might be right for semantic analysis by the <code>Analyzer</code> (which
-    *  has access to the symbol table.  There was some thought given to eliminating
-    *  the CSTs and going right to ASTs, but that option was rejected because
-    *  inner classes mean that class name resolution won't work before parsing
-    *  is complete.
-    */
-
-    protected CSTNode expression( ) throws SyntaxException, CompilationFailedException
-    {
-        // int id = nestCount++;
-        // System.out.println( "ENTERING EXPRESSION " + id );
-
-        ExpressionStack stack = new ExpressionStack( this );
-        CSTNode expression = null;
-
-        boolean bareMode = false;
-
-        MAIN_LOOP: do
-        {
-            //
-            // Valid at the start of an (sub)expression, a typed variable declaration
-            // is handled separately.  It has the form
-
-            //
-            // In the SHIFT phase, we move stuff onto the stack that can have
-            // multiple meanings and/or precedence issues, and leave the interpretation
-            // for a later REDUCE.  No lookahead is used.  When structures are found that
-            // have a consistent form, we use LL techniques (the new operator, for instance).
-
-            Token next = la(stack);
-            int type = next.getMeaningAs( EXPRESSION_SHIFT_HANDLERS );
-
-            // System.out.println( "expression() status:" );
-            // System.out.println( stack.toString() );
-            // System.out.println( "next: " );
-            // System.out.println( next.toString() );
-            // System.out.println( la(2).toString() );
-
-            SHIFT: switch( type )
-            {
-                case Types.GSTRING_START:
-                {
-                    if( stack.topIsAnExpression() )
-                    {
-                        error( "gstring cannot directly follow another expression" );
-                    }
-
-                    stack.push( gstring() );
-                    break;
-                }
-
-
-                case Types.CREATABLE_PRIMITIVE_TYPE:
-                {
-                    stack.shiftIf( stack.atStartOfExpression(), "type name not valid in this context" );
-                    break;
-                }
-
-
-                case Types.SIMPLE_EXPRESSION:
-                {
-
-                    //
-                    // Method parameters don't make it here (see REDUCE)...
-
-                    stack.shiftUnlessTopIsAnExpression( "literal cannot directly follow another expression" );
-                    break;
-                }
-
-
-                case Types.KEYWORD_IDENTIFIER:
-                {
-                    if( stack.top().isA(Types.DEREFERENCE_OPERATOR) && stack.topIsAnOperator() )
-                    {
-                        la().setMeaning( Types.IDENTIFIER );
-                        stack.shift();
-                    }
-                    else
-                    {
-                        error( "not valid as an identifier in this context" );
-                    }
-                    break;
-                }
-
-
-                case Types.ASSIGNMENT_OPERATOR:
-                {
-                    stack.shiftIf( stack.topIsAModifiableExpression(), "left-hand-side of assignment must be modifiable" );
-                    break;
-                }
-
-
-                case Types.PREFIX_OR_INFIX_OPERATOR:
-                {
-                    if( stack.topIsAnOperator(0, true) )
-                    {
-                        Types.makePrefix( next, false );
-                    }
-                    stack.shift( );
-                    break;
-                }
-
-
-                case Types.PREFIX_OPERATOR:
-                {
-                    Types.makePrefix( next, false );
-                    stack.shift( );
-                    break;
-                }
-
-
-                case Types.QUESTION:
-                case Types.INFIX_OPERATOR:
-                {
-                    stack.shiftIfTopIsAnExpression( "infix operators may only follow expressions" );
-                    break;
-                }
-
-
-                case Types.LEFT_PARENTHESIS:
-                {
-                    //
-                    // Method calls don't make it here (see REDUCE).  It is
-                    // either a sub-expression or a cast.
-
-                    boolean condition = stack.atStartOfExpression() || (stack.topIsAnOperator() && !stack.top().isA(Types.DEREFERENCE_OPERATOR));
-                    stack.shiftIf( condition, "sub-expression not valid at this position" );
-                    break;
-                }
-
-
-
-                case Types.LEFT_CURLY_BRACE:
-                {
-                    if( stack.atStartOfExpression() || stack.topIsAnOperator() || stack.top().isA(Types.SYNTH_METHOD_CALL) )
-                    {
-                        stack.push( closureExpression() );
-                    }
-                    else
-                    {
-                        error( "closure not valid in this context" );
-                    }
-                    break;
-                }
-
-
-                case Types.LEFT_SQUARE_BRACKET:
-                {
-                    boolean isMap = false, insist = false;
-                    if( stack.topIsAnExpression() )
-                    {
-                        insist = true;
-                    }
-                    stack.push( listOrMapExpression(isMap, insist) );
-                    break;
-                }
-
-
-                case Types.KEYWORD_NEW:
-                {
-                    if( stack.atStartOfExpression() || stack.topIsAnOperator() )
-                    {
-                        stack.push( newExpression() );
-                    }
-                    else
-                    {
-                        error( "new can follow the start of an expression or another operator" );
-                    }
-                    break;
-                }
-
-
-                case Types.KEYWORD_INSTANCEOF:
-                {
-                    stack.shiftIf( stack.topIsAnExpression(), "instanceof may only follow an expression" );
-                    break;
-                }
-
-
-                default:
-                {
-
-                    //
-                    // All other operators are caught during REDUCE, so if it makes
-                    // it here, it's either the end of the expression, or an error.
-
-                    if( stack.size() == 1 && stack.topIsAnExpression() )
-                    {
-                        break MAIN_LOOP;                          // <<< FLOW CONTROL <<<<<<<<<
-                    }
-                    else
-                    {
-                        error();
-                    }
-                }
-
-
-            }
-
-
-
-            //
-            // In the REDUCE phase, we try to find ways to convert several stack
-            // elements (and maybe one lookahead token) into a single expression.
-            // We retry the REDUCE as long as it succeeds.  Note that reductions
-            // are ONLY possible when the top of the stack is an expression.
-
-            boolean checkAgain = false, skipPatterns = false;
-            CSTNode top0 = null, top1 = null, top2 = null;
-            int nextPrecedence = 0, top1Precedence = 0;
-
-            REDUCE: do
-            {
-                if( !stack.topIsAnExpression() && !ExpressionSupport.isAPotentialTypeName(stack.top(), false) )
-                {
-                    break;
-                }
-
-
-                //
-                // We reduce at most once per iteration, so we collect info here.
-
-                checkAgain   = false;
-                skipPatterns = false;
-
-                top0 = stack.top();
-                top1 = stack.top(1);
-                top2 = stack.top(2);
-
-                next = la( stack );
-
-                // System.out.println( "expression() stack for reduce: " + stack );
-                // System.out.println( "expression() next token for reduce: " + next );
-
-                nextPrecedence = Types.getPrecedence( next.getMeaning(), false );
-                top1Precedence = Types.getPrecedence( top1.getMeaning(), false );
-
-
-
-              //---------------------------------------------------------------
-              // UNUSUAL STUFF FIRST
-
-
-                //
-                // Not really an operator at all, if top1 is a "(" and next is an ")",
-                // we should reduce.  Extra processing is needed because the "(" is not
-                // the type of an expression.
-
-                if( top1.isA(Types.LEFT_PARENTHESIS) )
-                {
-                    if( next.isA(Types.RIGHT_PARENTHESIS) )
-                    {
-                        consume();
-
-                        //
-                        // To simplify things, cast operators MUST appear on the same line
-                        // as the start of their operands.  Without name lookup, we can't
-                        // be sure that even things that look like casts are, but we assume
-                        // they are and let later phases correct, where necessary.
-
-                        next = la(true); // XXX the precludes is true for GString. Seems wrong
-                        boolean castPrecluded = next.isA(Types.NEWLINE) || next.isA(Types.PRECLUDES_CAST_OPERATOR);
-
-                        if( ExpressionSupport.isAPotentialTypeName(top0, false) && !castPrecluded )
-                        {
-                            CSTNode   name = stack.pop();
-                            Reduction cast = ((Token)stack.pop()).asReduction( name );
-                            cast.setMeaning( Types.SYNTH_CAST );
-                            stack.push( cast );
-                        }
-                        else
-                        {
-                            CSTNode subexpression = stack.pop();
-                            stack.pop();
-                            stack.push( subexpression );
-                        }
-
-                        checkAgain = true;
-                        continue;                             // <<< LOOP CONTROL <<<<<<<<<
-                    }
-                    else
-                    {
-                        skipPatterns = true;
-                    }
-                }
-
-
-                //
-                // Highest precedence: "new".  If it is preceeded on the stack by
-                // a ".", what preceeds the "." is the context for the new, and
-                // we'll have to do some rewriting....  Note that SHIFT will only
-                // shift a "new" if it is preceeded by nothing or an operator,
-                // and it will only shift a "." if it is preceeded by an expression.
-                // Therefore, we can assume any preceeding "." is an operator.
-
-                if( top0.isA(Types.KEYWORD_NEW) && !top0.isAnExpression() )
-                {
-                    top0.markAsExpression();
-
-                    if( top1.isA(Types.DOT) )
-                    {
-                        CSTNode theNew  = stack.pop();
-                        CSTNode theDot  = stack.pop();
-                        CSTNode context = stack.pop();
-
-                        theNew.set( 1, context );
-                        stack.push( theNew );
-
-                        checkAgain = true;
-                        continue;                             // <<< LOOP CONTROL <<<<<<<<<
-                    }
-                }
-
-
-                //
-                // Not unusual, but handled here to simplify precendence handling for
-                // the rest of the unusual stuff: dereference operators are left-associative.
-
-                if( top1.isA(Types.DEREFERENCE_OPERATOR) && !top0.hasChildren() )
-                {
-                    stack.reduce( 3, 1, true );
-
-                    checkAgain = true;
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-
-                //
-                // Next precedence, array offsets.  Because we allow lists and ranges
-                // and such inside list expressions, all lists will have been processed
-                // to a SYNTH_LISTH during SHIFT.  Here we do some rewriting, where
-                // necessary.  Empty array offsets are only allowed on types, and we
-                // run the appropriate conversion in that case.
-
-                if( top0.isA(Types.SYNTH_LIST) && top1.isAnExpression() || ExpressionSupport.isAPotentialTypeName(top1, false) )
-                {
-                    //
-                    // Empty list is an array type
-
-                    if( !top0.hasChildren() )
-                    {
-                        boolean typePreceeds   = ExpressionSupport.isAPotentialTypeName(top1, false);
-                        boolean potentialCast  = top2.isA(Types.LEFT_PARENTHESIS);
-                        boolean potentialDecl  = top2.isA(Types.LEFT_PARENTHESIS) || top2.isA(Types.UNKNOWN);
-                        boolean classReference = next.isA(Types.DOT) && la(2).isA(Types.KEYWORD_CLASS);
-                        if( !(typePreceeds && (potentialCast || potentialDecl || classReference)) )
-                        {
-                            error( "empty square brackets are only valid on type names" );
-                        }
-
-                        //
-                        // Okay, we have an array type.  We now convert the list and
-                        // expression to an array type, and slurp any further dimensions
-                        // off the lookahead.
-
-                        Reduction array = stack.pop().asReduction();
-                        array.setMeaning( Types.LEFT_SQUARE_BRACKET );
-                        array.add( stack.pop() );
-
-                        while( lt(true) == Types.LEFT_SQUARE_BRACKET )
-                        {
-                            array = consume( Types.LEFT_SQUARE_BRACKET ).asReduction( array );
-                            consume( Types.RIGHT_SQUARE_BRACKET );
-                        }
-
-
-                        //
-                        // One last decision: variable type declaration, or
-                        // cast, or class reference...
-
-                        if( classReference )
-                        {
-                            CSTNode reference = consume(Types.DOT).asReduction(array, consume(Types.KEYWORD_CLASS));
-                            reference.markAsExpression();
-                            stack.push( reference );
-
-                        }
-                        else if( lt(true) == Types.IDENTIFIER && lt(2) == Types.EQUAL )
-                        {
-                            stack.push( variableDeclarationExpression(array) );
-                        }
-                        else if( stack.top().isA(Types.LEFT_PARENTHESIS) && la(true).isA(Types.RIGHT_PARENTHESIS) )
-                        {
-                            CSTNode cast = ((Token)stack.pop()).asReduction( array );
-                            cast.setMeaning( Types.SYNTH_CAST );
-                            stack.push( cast );
-                            consume( Types.RIGHT_PARENTHESIS );
-                        }
-                        else
-                        {
-                            error( "found array type where none expected" );
-                        }
-                    }
-
-
-                    //
-                    // Non-empty list is an offset (probably)
-
-                    else
-                    {
-                        CSTNode list = stack.pop();
-                        CSTNode base = stack.pop();
-
-                        Reduction result = ((Token)list.get(0)).dup().asReduction();
-                        result.setMeaning( Types.LEFT_SQUARE_BRACKET );
-                        result.add( base );
-
-                        if( list.children() == 1 )
-                        {
-                            result.add( list.get(1) );
-                        }
-                        else
-                        {
-                            result.add( list );
-                        }
-
-                        result.markAsExpression();
-                        stack.push( result );
-                    }
-
-                    checkAgain = true;
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-
-                }
-
-
-
-                //
-                // Next precedence: typed variable declarations.  If the top of stack
-                // isAPotentialTypeName(), la(true) is an identifier, and la(2) is
-                // an "=", it's a declaration.
-
-                if( la(true).isA(Types.IDENTIFIER) && lt(2) == Types.EQUALS && ExpressionSupport.isAPotentialTypeName(top0, false) )
-                {
-                    stack.push( variableDeclarationExpression(stack.pop()) );
-
-                    checkAgain = true;
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-                //
-                // Before getting to method call handling proper, we should check for any
-                // pending bookkeeping.  If the top of stack is a closure and the element
-                // before it is a method call, the closure is either one of its parameters
-                // or an error.
-
-                if( top1.isA(Types.SYNTH_METHOD_CALL) && top0.isA(Types.SYNTH_CLOSURE) )
-                {
-                    CSTNode parameters = top1.get(2);
-
-                    int last = parameters.size() - 1;
-                    if( last > 0 && parameters.get(last).isA(Types.SYNTH_CLOSURE) )
-                    {
-                        error( "you may only pass one closure to a method implicitly" );
-                    }
-
-                    parameters.add( stack.pop() );
-
-                    checkAgain = true;
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-                //
-                // Next precedence: method calls and typed declarations.  If the top of stack
-                // isInvokable() and la(stack) is an "(", an "{", or a simple expression, it's
-                // a method call.  We leave the closure for the next SHIFT.
-
-                if( ExpressionSupport.isInvokable(top0) && (next.isA(Types.LEFT_CURLY_BRACE) || la(true).isA(Types.METHOD_CALL_STARTERS)) )
-                {
-                    // System.out.println( "making a method call of " + top0 );
-
-                    CSTNode name = stack.pop();
-
-                    Reduction method = null;
-                    switch( next.getMeaning() )
-                    {
-                        case Types.LEFT_PARENTHESIS:
-                            method = consume().asReduction();
-                            method.add( name );
-                            method.add( la().isA(Types.RIGHT_PARENTHESIS) ? Reduction.newContainer() : parameterList() );
-                            consume( Types.RIGHT_PARENTHESIS );
-                            break;
-
-                        case Types.LEFT_CURLY_BRACE:
-                            method = Token.newSymbol( Types.LEFT_PARENTHESIS, next.getStartLine(), next.getStartColumn() ).asReduction();
-                            method.add( name );
-                            method.add( Reduction.newContainer() );
-                            break;
-
-                        default:
-                            method = Token.newSymbol( Types.LEFT_PARENTHESIS, next.getStartLine(), next.getStartColumn() ).asReduction();
-                            method.add( name );
-                            method.add( parameterList() );
-                            break;
-                    }
-
-                    method.setMeaning( Types.SYNTH_METHOD_CALL );
-                    method.markAsExpression();
-
-                    stack.push( method );
-
-                    if( lt() != Types.LEFT_CURLY_BRACE )
-                    {
-                        checkAgain = true;
-                    }
-
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-                //
-                // Handle postfix operators next.  We have to check for acceptable
-                // precedence before doing it.  All the higher precedence reductions
-                // have already been checked.
-
-                if( next.isA(Types.POSTFIX_OPERATOR) && stack.topIsAnExpression() )
-                {
-                    if( !ExpressionSupport.isAVariable(stack.top()) )
-                    {
-                        error( "increment/decrement operators can only be applied to variables" );
-                    }
-
-                    Types.makePostfix( next, true );
-
-                    stack.shift();
-                    stack.reduce( 2, 0, true );
-
-                    checkAgain = true;
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-                //
-                // The ternary operator will be seen twice.  The first reduction is
-                // infix when there is a ":" on lookahed.  The second reduction is
-                // prefix when there is a lower-precedence operator on lookahed.
-                // The ternary operator is right-associative.  Note that
-                // Types.getPrecedence() on a ternary operator returns 10.
-
-                if( top1.isA(Types.QUESTION) )
-                {
-                    boolean reduce = false;
-
-                    if( la().isA(Types.COLON) )
-                    {
-                        if( top1.hasChildren() )
-                        {
-                            error( "ternary operator can have only three clauses" );
-                        }
-
-                        consume();
-                        stack.reduce( 3, 1, false );
-                        checkAgain = true;
-                    }
-                    else if( Types.getPrecedence(next.getMeaning(), false) < 10 )
-                    {
-                        stack.reduce( 2, 1, false );
-                        stack.top().setMeaning( Types.SYNTH_TERNARY );
-                        checkAgain = true;
-                    }
-
-
-                    continue;                                 // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-
-
-              //---------------------------------------------------------------
-              // PATTERN STUFF SECOND
-
-
-                //
-                // Note that because of the loop control above, we get here only if none
-                // of the above options matched.
-                //
-                // So, everything else we handle generically: top1 will be an operator, and
-                // will be reduced or not with top0 and possibly top2, depending on the
-                // cardinality and associativity of the operator, and the type of la().
-
-                if( skipPatterns || !ExpressionSupport.isAnOperator(top1, false) )
-                {
-                    break;                                    // <<< LOOP CONTROL <<<<<<<<<
-                }
-
-
-                switch( top1.getMeaningAs(EXPRESSION_REDUCE_HANDLERS) )
-                {
-                    //
-                    // Prefix increment/decrement operators aren't always valid, so we
-                    // handle the separately from the other prefix operators.
-
-                    case Types.PREFIX_PLUS_PLUS:
-                    case Types.PREFIX_MINUS_MINUS:
-                    {
-                        if( nextPrecedence < top1Precedence )
-                        {
-                            if( !ExpressionSupport.isAVariable(stack.top()) )
-                            {
-                                error( "increment/decrement operators can only be applied to variables" );
-                            }
-
-                            stack.reduce( 2, 1, true );
-                            checkAgain = true;
-                       }
-
-                       break;
-                    }
-
-
-                    //
-                    // All other prefix operators.  They are all right-associative.
-
-                    case Types.PURE_PREFIX_OPERATOR:
-                    {
-                        if( nextPrecedence < top1Precedence )
-                        {
-                            stack.reduce( 2, 1, true );
-                            checkAgain = true;
-                        }
-
-                        break;
-                    }
-
-
-                    //
-                    // Handle the assignment operators.  They are all right-associative.
-
-                    case Types.ASSIGNMENT_OPERATOR:
-                    {
-                        if( nextPrecedence < top1Precedence )
-                        {
-                            stack.reduce( 3, 1, true );
-                            checkAgain = true;
-                        }
-
-                        break;
-                    }
-
-
-                    //
-                    // Handle the instenceof keyword.  The rhs has to be a potential type.
-
-                    case Types.KEYWORD_INSTANCEOF:
-                    {
-                        if( nextPrecedence < top1Precedence )
-                        {
-                            if( !ExpressionSupport.isAPotentialTypeName(top0, false) )
-                            {
-                                error( "instanceof right-hand side must be a valid type name" );
-                            }
-
-                            stack.reduce( 3, 1, true );
-                            checkAgain = true;
-                        }
-
-                        break;
-                    }
-
-
-                    //
-                    // Handle all other infix operators.  They are all left-associative.
-
-                    case Types.INFIX_OPERATOR:
-                    {
-                        if( nextPrecedence <= top1Precedence )
-                        {
-                            stack.reduce( 3, 1, true );
-                            checkAgain = true;
-                        }
-
-                        break;
-                    }
-
-
-                    //
-                    // Anything else in top1 is an bug.
-
-                    default:
-                    {
-                        throw new GroovyBugError( "found unexpected token during REDUCE [" + top1.getMeaning() + "]" );
-                    }
-                }
-
-            } while( checkAgain );
-
-        } while( true );
-
-
-        if( stack.size() == 1 && stack.topIsAnExpression() )
-        {
-            expression = stack.pop();
-        }
-        else
-        {
-            error( "expression incomplete" );
-        }
-
-
-        // System.out.println( "EXITING EXPRESSION " + id );
-        return expression;
-    }
-
-
-    private static final int EXPRESSION_SHIFT_HANDLERS[] = {
-          Types.GSTRING_START
-        , Types.CREATABLE_PRIMITIVE_TYPE
-        , Types.SIMPLE_EXPRESSION
-        , Types.KEYWORD_IDENTIFIER
-        , Types.ASSIGNMENT_OPERATOR
-        , Types.PREFIX_OR_INFIX_OPERATOR
-        , Types.PREFIX_OPERATOR
-        , Types.QUESTION
-        , Types.INFIX_OPERATOR
-        , Types.LEFT_PARENTHESIS
-        , Types.LEFT_CURLY_BRACE
-        , Types.LEFT_SQUARE_BRACKET
-        , Types.KEYWORD_NEW
-        , Types.KEYWORD_INSTANCEOF
-    };
-
-    private static final int EXPRESSION_REDUCE_HANDLERS[] = {
-          Types.PREFIX_PLUS_PLUS
-        , Types.PREFIX_MINUS_MINUS
-        , Types.PURE_PREFIX_OPERATOR
-        , Types.ASSIGNMENT_OPERATOR
-        , Types.KEYWORD_INSTANCEOF
-        , Types.INFIX_OPERATOR
-    };
-
-
-
-   /**
-    *  Processes a typed variable declaration.  Without the type, it's a
-    *  assignment expression instead (no comma support).  The datatype
-    *  has already been identified and is passed in.
-    *  <p>
-    *  Grammar: <pre>
-    *     variableDeclarationExpression
-    *        = datatype (nameDeclaration "=" expression)
-    *                   ("," nameDeclaration "=" expression)*
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     statement   = { :<SYNTH_VARIABLE_DECLARATION> datatype declaration+ }
-    *     declaration = { <identifier> expression }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction variableDeclarationExpression( CSTNode datatype ) throws SyntaxException, CompilationFailedException
-    {
-        Reduction expression = ((Token)datatype.get(0)).dup().asReduction( datatype );  // done for line number on SYNTH
-        expression.setMeaning( Types.SYNTH_VARIABLE_DECLARATION );
-
-        boolean done = false;
-        do
-        {
-            try
-            {
-                Reduction declaration = (Reduction)expression.add( nameDeclaration(false).asReduction() );
-                consume( Types.EQUAL );
-                declaration.add( expression() );
-            }
-            catch( SyntaxException e )
-            {
-                controller.addError( e );
-                recover( Types.ANY_END_OF_STATEMENT );
-            }
-
-            if( lt() == Types.COMMA )
-            {
-                consume( Types.COMMA );
-            }
-            else
-            {
-                done = true;
-            }
-
-        } while( !done );
-
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes a GString.
-    *  <p>
-    *  Grammar: <pre>
-    *     gstring = (<text>? "$" "{" expression "}" <text>?)*
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     gstring = { <full-text>:SYNTH_GSTRING (segment|expression)* }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction gstring() throws SyntaxException, CompilationFailedException
-    {
-        // int id = nestCount++;
-        // System.out.println( "ENTERING GSTRING " + id );
-
-        Reduction data = Reduction.newContainer();
-
-        consume( Types.GSTRING_START );
-
-        while( lt() != Types.GSTRING_END && lt() != Types.EOF )
-        {
-            switch( lt() )
-            {
-                case Types.STRING:
-                    data.add( consume() );
-                    break;
-
-                case Types.GSTRING_EXPRESSION_START:
-                    consume();
-                    data.add( expression() );
-                    consume( Types.GSTRING_EXPRESSION_END );
-                    break;
-
-                default:
-                    throw new GroovyBugError( "gstring found invalid token: " + la() );
-            }
-        }
-
-        Reduction complete = consume( Types.GSTRING_END ).asReduction();
-        complete.addChildrenOf( data );
-
-        complete.setMeaning( Types.SYNTH_GSTRING );
-
-        // System.out.println( "EXITING GSTRING " + id );
-        return complete;
-    }
-
-
-
-
-   /**
-    *  Processes a NON-EMPTY parameter list, as supplied on either a method invokation or
-    *  a closure invokation.  Reads parameters until something that doesn't belong
-    *  is found.
-    *  <p>
-    *  Grammar: <pre>
-    *     parameterList = (regular "," named) | named
-    *     regular = parameter ("," parameter)*
-    *     named   = nameReference ":" parameter ("," nameReference ":" parameter)*
-    *
-    *     parameter = expression
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     parameterList = { <null> regular* named* }
-    *     regular = expression
-    *     named   = { ":" <identifier> expression }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction parameterList() throws SyntaxException, CompilationFailedException
-    {
-        // int id = nestCount++;
-        // System.out.println( "ENTERING PARAMETER LIST " + id );
-
-        Reduction list  = Reduction.newContainer();
-        Reduction named = null;
-
-        boolean done = false;
-
-        do
-        {
-            if( la().canMean(Types.IDENTIFIER) && la(2).isA(Types.COLON) )
-            {
-                if( named == null )
-                {
-                    named = Token.newPlaceholder(Types.SYNTH_MAP).asReduction();
-                    list.add( named );
-                }
-
-                Token name = nameReference(false);
-                name.setMeaning( Types.STRING );
-
-                named.add( consume(Types.COLON).asReduction(name, expression()) );
-            }
-            else
-            {
-                list.add( expression() );
-            }
-
-
-            if( lt() == Types.COMMA )
-            {
-                consume();
-            }
-            else
-            {
-                done = true;
-            }
-
-
-        } while( !done );
-
-        // System.out.println( "EXITING PARAMETER LIST " + id );
-        return list;
-    }
-
-
-
-   /**
-    *  Processes a "new" expression.  Handles optional constructors, array
-    *  initializations, closure arguments, and anonymous classes.  In order
-    *  to support anonymous classes, anonymous closures are not allowed.
-    *  <p>
-    *  Grammar: <pre>
-    *     newExpression = "new" scalarDatatype (array|init)?
-    *     array = ( "[" expression "]" )+ | ( ("[" "]")+ newArrayInitializer )
-    *     init  = "(" parameterList? ")" (typeBody | closureExpression)?
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     new = { "new" arrayType     dimensions newArrayInitializer? }
-    *         | { "new" scalarDataype (parameterList|{<null>}) typeBody? }
-    *
-    *     arrayType  = { "{" (arrayType | scalarDatatype) }
-    *     dimensions = { <null> expression+ } | {}
-    *
-    *     see expression()
-    *     see scalarDatatype()
-    *     see typeBody()
-    *  </pre>
-    */
-
-    protected Reduction newExpression() throws SyntaxException, CompilationFailedException
-    {
-        // int id = nestCount++;
-        // System.out.println( "ENTERING NEW " + id );
-
-        Reduction expression = consume(Types.KEYWORD_NEW).asReduction();
-        CSTNode   scalarType = scalarDatatype(false);
-
-        if( lt(true) == Types.LEFT_SQUARE_BRACKET )
-        {
-            //
-            // First up, figure out the actual type and any
-            // stated dimensions.
-
-            boolean   implicit   = (lt(2) == Types.RIGHT_SQUARE_BRACKET);
-            Reduction dimensions = implicit ? Reduction.EMPTY : Reduction.newContainer();
-            int       count      = 0;
-            CSTNode   arrayType  = scalarType;
-
-            while( lt(true) == Types.LEFT_SQUARE_BRACKET )
-            {
-                arrayType = consume(Types.LEFT_SQUARE_BRACKET).asReduction( arrayType );
-                count++;
-
-                if( !implicit )
-                {
-                    dimensions.add( expression() );
-                }
-
-                consume(Types.RIGHT_SQUARE_BRACKET);
-            }
-
-            expression.add( arrayType );
-            expression.add( dimensions );
-
-            //
-            // If implicit, there must be initialization data
-
-            if( implicit )
-            {
-                expression.add( tupleExpression(0, count) );
-            }
-
-        }
-
-        else
-        {
-            expression.add( scalarType );
-
-
-            //
-            // Process the constructor call
-
-            Reduction parameters = null;
-
-            consume( Types.LEFT_PARENTHESIS );
-            parameters = (lt() == Types.RIGHT_PARENTHESIS ? Reduction.newContainer() : parameterList());
-            consume( Types.RIGHT_PARENTHESIS );
-
-            expression.add( parameters );
-
-
-            //
-            // If a "{" follows, it's a class body or a closure...
-
-            if( lt() == Types.LEFT_CURLY_BRACE )
-            {
-                if( lt(2) == Types.PIPE || lt(2) == Types.DOUBLE_PIPE )
-                {
-                    parameters.add( closureExpression() );
-                }
-                else
-                {
-                    expression.add( typeBody(true, false, false) );
-                }
-            }
-        }
-
-        // System.out.println( "EXITING NEW " + id );
-        return expression;
-    }
-
-
-
-   /**
-    *  Processes a "new" array initializer expression.
-    *  <p>
-    *  Grammar: <pre>
-    *     tupleExpression = "{" (tupleExpression | (expression ("," expression))? "}"
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     initializer = { "{":SYNTH_TUPLE (initializer*|expression*) }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction tupleExpression( int level, int depth ) throws SyntaxException, CompilationFailedException
-    {
-        Reduction data = consume(Types.LEFT_CURLY_BRACE).asReduction();
-        data.setMeaning( Types.SYNTH_TUPLE );
-
-        if( lt() != Types.RIGHT_CURLY_BRACE )
-        {
-            int    child = level + 1;
-            boolean leaf = (child == depth);
-
-            do
-            {
-                data.add( leaf ? expression() : tupleExpression(child, depth) );
-
-            } while( lt() == Types.COMMA && (consume() != null) );
-        }
-
-        consume( Types.RIGHT_CURLY_BRACE );
-
-        return data;
-    }
-
-
-
-   /**
-    *  Processes a closure expression.
-    *  <p>
-    *  Grammar: <pre>
-    *     closureExpression = "{" parameters statement* "}"
-    *     parameters = ("|" parameterDeclarationList "|")?
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     initializer = { "{":SYNTH_CLOSURE parameters statements }
-    *     parameters  = parameterDeclarationList | { <null> }
-    *     statements  = { <null> statement* }
-    *
-    *     see parameterDeclarationList()
-    *     see statement()
-    *  </pre>
-    */
-
-    protected Reduction closureExpression( ) throws SyntaxException, CompilationFailedException
-    {
-        // int id = nestCount++;
-        // System.out.println( "ENTERING CLOSURE EXPRESSION " + id );
-
-        Reduction closure = consume(Types.LEFT_CURLY_BRACE).asReduction();
-        closure.setMeaning( Types.SYNTH_CLOSURE );
-        boolean specified = (lt() == Types.PIPE) || (lt() == Types.DOUBLE_PIPE);
-
-        //
-        // DEPRECATED: the old syntax for parameters had a | only
-        // at the end of the parameter list.  The new syntax has
-        // two pipes or none.  For now, we attempt to support the
-        // old syntax.  It can mistake a variable declaration
-        // for a parameter declaration, though, so it may cause more
-        // trouble than it's worth.  This if() and the one below
-        // (also marked) should be removed before v1.0.
-
-        if( !specified )
-        {
-            getTokenStream().checkpoint();
-            CSTNode type = optionalDatatype( true, false );
-            if( lt() == Types.IDENTIFIER && (lt(2) == Types.PIPE || lt(2) == Types.COMMA) )
-            {
-                specified = true;
-            }
-
-            getTokenStream().restore();
-        }
-
-
-        //
-        // If the parameter list is specified, process it.
-
-        if( specified )
-        {
-            if( lt() == Types.DOUBLE_PIPE )
-            {
-                consume( Types.DOUBLE_PIPE );
-                closure.add( Reduction.newContainer() );
-            }
-            else
-            {
-                //
-                // DEPRECATED: further support for note above, this consume()
-                // should not be conditional after the above code is removed.
-
-                if( lt() == Types.PIPE )
-                {
-                    consume(Types.PIPE);
-                }
-
-                closure.add( parameterDeclarationList() );
-                consume(Types.PIPE);
-            }
-        }
-        else
-        {
-            closure.add( Reduction.newContainer() );
-        }
-
-
-        //
-        // Finally, process the statements.
-
-        closure.add( statementsUntilRightCurly() );
-        consume( Types.RIGHT_CURLY_BRACE );
-
-        // System.out.println( "EXITING CLOSURE EXPRESSION " + id );
-        return closure;
-    }
-
-
-
-   /**
-    *  Processes a list or map expression.
-    *  <p>
-    *  Grammar: <pre>
-    *     listOrMapExpression = list | map
-    *
-    *     list = "[" (expression ("," expression)*)? "]"
-    *
-    *     map     = "[" (":" | mapping+) "]"
-    *     mapping = expression ":" expression
-    *  </pre>
-    *  <p>
-    *  CST: <pre>
-    *     list    = { "[":SYNTH_LIST expression* }
-    *     map     = { "[":SYNTH_MAP  mapping* }
-    *     mapping = { ":" expression expression }
-    *
-    *     see expression()
-    *  </pre>
-    */
-
-    protected Reduction listOrMapExpression( boolean isMap, boolean insist ) throws SyntaxException, CompilationFailedException
-    {
-        Reduction expression = consume(Types.LEFT_SQUARE_BRACKET).asReduction();
-        expression.setMeaning( Types.SYNTH_LIST );
-
-        if( lt() == Types.COLON )
-        {
-            if( !isMap && insist )
-            {
-                error( "expected list" );
-            }
-
-            isMap = true;
-            expression.setMeaning( Types.SYNTH_MAP );
-            consume();
-            if( lt() != Types.RIGHT_SQUARE_BRACKET )
-            {
-                error( "expected empty map" );
-            }
-        }
-
-
-        //
-        // Process the data.  On the first one, check if we are
-        // processing a map.  We assume not going in, as the empty
-        // map isn't relevant...
-
-        boolean done = (lt() == Types.RIGHT_SQUARE_BRACKET);
-
-        while( !done )
-        {
-            CSTNode element = expression();
-
-            if( !insist )
-            {
-                insist = true;
-                if( lt() == Types.COLON )
-                {
-                    isMap = true;
-                    expression.setMeaning(Types.SYNTH_MAP);
-                }
-            }
-
-            if( isMap )
-            {
-                element = consume(Types.COLON).asReduction( element, expression() );
-            }
-
-            expression.add( element );
-
-            if( lt() == Types.COMMA ) { consume(); } else { done = true; }
-        }
-
-        consume(Types.RIGHT_SQUARE_BRACKET);
-
-        return expression;
-    }
-
-
-
-   /**
-    *  Synonym for <code>listOrMapExpression( false, false )</code>.
-    */
-
-    protected Reduction listOrMapExpression( ) throws SyntaxException, CompilationFailedException
-    {
-        return listOrMapExpression( false, false );
-    }
-
-
-
-
-
-
-  //---------------------------------------------------------------------------
-  // ERROR REPORTING
-
-
-   /**
-    *  Reports an error assembled from parts.
-    */
-
-    protected UnexpectedTokenException error( Token found, int[] expectedTypes, boolean throwIt, String comment ) throws SyntaxException
-    {
-        UnexpectedTokenException e = new UnexpectedTokenException( found, expectedTypes, comment );
-
-        if( throwIt )
-        {
-            throw e;
-        }
-
-        return e;
-    }
-
-
-   /**
-    *  Reports an error by generating and optionally throwing an
-    *  <code>UnexpectedTokenException</code>.
-    */
-
-    protected UnexpectedTokenException error( int[] expectedTypes, boolean throwIt, int k, String comment ) throws SyntaxException, CompilationFailedException
-    {
-        return error( la(k), expectedTypes, throwIt, comment );
-    }
-
-
-
-   /**
-    *  A synonym for <code>error( expectedTypes, throwIt, k, null )</code>.
-    */
-
-    protected UnexpectedTokenException error( int[] expectedTypes, boolean throwIt, int k ) throws SyntaxException, CompilationFailedException
-    {
-        return error( expectedTypes, throwIt, k, null );
-    }
-
-
-
-   /**
-    *  A synonym for <code>error( expectedTypes, true, 1, null )</code>.
-    */
-
-    protected void error( int[] expectedTypes ) throws SyntaxException, CompilationFailedException
-    {
-        throw error( expectedTypes, false, 1, null );
-    }
-
-
-
-   /**
-    *  A synonym for <code>error( null, true, 1, null )</code>.
-    */
-
-    protected void error() throws SyntaxException, CompilationFailedException
-    {
-        throw error( null, true, 1, null );
-    }
-
-
-
-   /**
-    *  A synonym for <code>error( null, true, 1, comment )</code>.
-    */
-
-    protected void error( String comment ) throws SyntaxException, CompilationFailedException
-    {
-        throw error( null, true, 1, comment );
-    }
-
-
-
-   /**
-    *  A synonym for <code>error( found, null, true, comment )</code>.
-    */
-
-    protected void error( Token found, String comment ) throws SyntaxException
-    {
-        throw error( found, null, true, comment );
-    }
-
-
-
-   /**
-    *  A scalar synonym of <code>error( expectedTypes )</code>.
-    */
-
-    protected void error( int expectedType ) throws SyntaxException, CompilationFailedException
-    {
-        error( new int[] { expectedType } );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // ERROR RECOVERY
-
-
-   /**
-    *  Attempts to recover from an error by discarding input until a
-    *  known token is found.  It further guarantees that /at least/
-    *  one token will be eaten.
-    */
-
-    public void recover( int[] safe, boolean ignoreNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        Token leading = la( ignoreNewlines );
-
-        while( true )
-        {
-            Token next = la( ignoreNewlines );
-            if( next.isA(Types.EOF) || next.isOneOf(safe) )
-            {
-                break;
-            }
-            else
-            {
-                consume( ignoreNewlines );
-            }
-        }
-
-        if( la(ignoreNewlines) == leading )
-        {
-            consume( ignoreNewlines );
-        }
-    }
-
-
-
-   /**
-    *  A scalar version of <code>recover( int[], boolean )</code>.
-    */
-
-    public void recover( int safe, boolean ignoreNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        Token leading = la( ignoreNewlines );
-
-        while( true )
-        {
-            Token next = la( ignoreNewlines );
-            if( next.isA(Types.EOF) || next.isA(safe) )
-            {
-                break;
-            }
-            else
-            {
-                consume( ignoreNewlines );
-            }
-        }
-
-        if( la(ignoreNewlines) == leading )
-        {
-            consume( ignoreNewlines );
-        }
-    }
-
-
-
-   /**
-    *  A synonym for <code>recover( safe, false )</code>.
-    */
-
-    public void recover( int[] safe ) throws SyntaxException, CompilationFailedException
-    {
-        recover( safe, false );
-    }
-
-
-
-   /**
-    *  A synonm for the scalar <code>recover( safe, false )</code>.
-    */
-
-    public void recover( int safe ) throws SyntaxException, CompilationFailedException
-    {
-        recover( safe, false );
-    }
-
-
-
-   /**
-    *  A synonym for <code>recover( Types.ANY_END_OF_STATMENT, true )</code>.
-    */
-
-    public void recover( ) throws SyntaxException, CompilationFailedException
-    {
-        recover( Types.ANY_END_OF_STATEMENT, true );
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // TOKEN LOOKAHEAD
-
-
-   /**
-    *  Returns (without consuming) the next kth token in the underlying
-    *  token stream.  You can make newlines significant as needed.
-    *  Returns Token.EOF on end of stream.  k is counted from 1.
-    */
-
-    protected Token la( int k, boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        Token token = Token.NULL;
-
-        //
-        // Count down on k while counting up on streamK.
-        // NOTE: k starting at less than 1 is a mistake...
-        // This routine will reliably NOT return Token.NULL
-        // /unless/ it is actually in the stream.
-
-        try
-        {
-            int streamK = 1;
-            while( k > 0 && token.getMeaning() != Types.EOF )
-            {
-                token = getTokenStream().la( streamK );
-                streamK += 1;
-
-                if( token == null  )
-                {
-                    token = Token.EOF;
-                }
-                else if( token.getMeaning() == Types.NEWLINE )
-                {
-                    if( significantNewlines )
-                    {
-                        k -= 1;
-                    }
-                }
-                else
-                {
-                    k -= 1;
-                }
-            }
-        }
-        catch( ReadException e )
-        {
-            controller.addFatalError( new SimpleMessage(e.getMessage()) );
-        }
-
-        return token;
-    }
-
-
-
-   /**
-    *  Synonym for <code>la( k, false )</code>.
-    */
-
-    protected Token la( int k ) throws SyntaxException, CompilationFailedException
-    {
-        return la( k, false );
-    }
-
-
-
-   /**
-    *  Synonym for <code>la( 1, significantNewlines )</code>.
-    */
-
-    protected Token la( boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        return la( 1, significantNewlines );
-    }
-
-
-
-   /**
-    * Synonym for <code>la( 1, false )</code>.
-    */
-
-    protected Token la() throws SyntaxException, CompilationFailedException
-    {
-        return la( 1, false );
-    }
-
-
-
-   /**
-    *  Special <code>la()</code> used by the expression parser.  It will get the next token
-    *  in the current statement.  If the next token is past a line boundary and might be
-    *  the start of the next statement, it won't cross the line to get it.
-    */
-
-    protected Token la( ExpressionStack stack ) throws SyntaxException, CompilationFailedException
-    {
-        Token next = la();
-
-        if( stack.canComplete() && next.isA(Types.UNSAFE_OVER_NEWLINES) )
-        {
-            if( la(true).getMeaning() == Types.NEWLINE )
-            {
-                next = la(true);
-            }
-        }
-
-        return next;
-    }
-
-
-
-
-   /**
-    *  Returns the meaning of the <code>la( k, significantNewlines )</code> token.
-    */
-
-    protected int lt( int k, boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        return la(k, significantNewlines).getMeaning();
-    }
-
-
-
-   /**
-    *  Returns the meaning of the <code>la( k )</code> token.
-    */
-
-    protected int lt( int k ) throws SyntaxException, CompilationFailedException
-    {
-        return la(k).getMeaning();
-    }
-
-
-
-   /**
-    *  Returns the meaning of the <code>la( significantNewlines )</code> token.
-    */
-
-    protected int lt( boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        return la(significantNewlines).getMeaning();
-    }
-
-
-
-   /**
-    *  Returns the meaning of the <code>la()</code> token.
-    */
-
-    protected int lt() throws SyntaxException, CompilationFailedException
-    {
-        return la().getMeaning();
-    }
-
-
-
-
-  //---------------------------------------------------------------------------
-  // TOKEN CONSUMPTION
-
-
-   /**
-    *  Consumes (and returns) the next token if it is of the specified type.
-    *  If <code>significantNewlines</code> is set, newlines will not automatically
-    *  be consumed; otherwise they will.  Throws <code>UnexpectedTokenException</code>
-    *  if the type doesn't match.
-    */
-
-    protected Token consume( int type, boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        try
-        {
-            if( !la(significantNewlines).isA(type) )
-            {
-                error( type );
-            }
-
-            if( !significantNewlines )
-            {
-                while( lt(true) == Types.NEWLINE )
-                {
-                    getTokenStream().consume(Types.NEWLINE);
-                }
-            }
-
-            return getTokenStream().consume(type);
-        }
-        catch( ReadException e )
-        {
-            controller.addFatalError( new SimpleMessage(e.getMessage()) );
-        }
-
-        throw new GroovyBugError( "this should never happen" );
-    }
-
-
-
-   /**
-    *  A synonym for <code>consume( type, false )</code>.  If type is Types.NEWLINE,
-    *  equivalent to <code>consume( Types.NEWLINE, true )</code>.
-    */
-
-    protected Token consume( int type ) throws SyntaxException, CompilationFailedException
-    {
-        return consume( type, type == Types.NEWLINE );
-    }
-
-
-
-   /**
-    *  A synonym for <code>consume( Types.ANY, false )</code>.
-    */
-
-    protected Token consume() throws SyntaxException, CompilationFailedException
-    {
-        return consume( lt(), false );
-    }
-
-
-
-   /**
-    *  A synonym for <code>consume( Types.ANY, significantNewlines )</code>.
-    *  If you pass true, it will consume exactly the next token from the
-    *  stream.
-    */
-
-    protected Token consume( boolean significantNewlines ) throws SyntaxException, CompilationFailedException
-    {
-        return consume( lt(significantNewlines), significantNewlines );
-    }
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/TokenStream.java b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/TokenStream.java
deleted file mode 100644
index a4b8ca7..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/TokenStream.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package org.codehaus.groovy.syntax.parser;
-
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.ReadException;
-import org.codehaus.groovy.syntax.SyntaxException;
-
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-
-/**
- *  Provides a stream of lexer tokens for use by (primarily) the parsing
- *  systems.
- */
-
-public interface TokenStream
-{
-    // ----------------------------------------------------------------------
-    //     Interface
-    // ----------------------------------------------------------------------
-
-    /** 
-     *  Looks-ahead to the next token.
-     *
-     *  <p>
-     *  This method is equivalent to <code>la(1)</code>.
-     *  </p>
-     *
-     *  @see #la(int)
-     *
-     *  @return The next token or null if no more tokens
-     *          available.
-     *
-     *  @throws org.codehaus.groovy.syntax.ReadException If an error occurs attempting to lookahead
-     *          a token.
-     */
-
-    Token la() throws ReadException, SyntaxException;
-
-
-    /** 
-     *  Looks-ahead to the <code>k</code><i>th</i> token.
-     *
-     *  @param k Number of token to look ahead.
-     *
-     *  @return the <code>k</code><i>th</i> token or null if no
-     *          more tokens available.
-     *
-     *  @throws ReadException If an error occurs attempting to lookahead
-     *          a token.
-     */
-
-    Token la(int k) throws ReadException, SyntaxException;
-
-
-    /** 
-     *  Consumes the next token.
-     *
-     *  @param type The token type.
-     *
-     *  @return The consumed token or null if no more tokens
-     *          available.
-     *
-     *  @throws ReadException If an error occurs attempting to consume
-     *          a token.
-     */
-
-    Token consume(int type) throws ReadException, SyntaxException;
-
-
-    /**
-     *  Returns a description of the source location (typically a file path).
-     */
-
-    String getSourceLocator();
-
-
-    /**
-     * Checkpoints a point in the stream that we can go back to
-     */
-
-    void checkpoint();
-
-
-    /**
-     * Restores to the previous checkpoint
-     */
-
-    void restore();
-
-
-    /**
-     * Returns true if the stream is out of tokens, possibly
-     * ignoring trailing whitespace.
-     */
-
-    boolean atEnd( boolean ignoringWhitespace );
-
-
-
-    /**
-     * Returns true if the stream is out of tokens.  
-     */
-
-    boolean atEnd( );
-
-}
diff --git a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/package.html b/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/package.html
deleted file mode 100644
index a2016d4..0000000
--- a/groovy/modules/classic/src/java/org/codehaus/groovy/syntax/parser/package.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-  <head>
-    <title>package org.codehaus.groovy.syntax.parser.*</title>
-  </head>
-  <body>
-    <p>
-      The main parser of Groovy code into the Groovy AST model (Abstract Syntax Tree)
-    </p>
-  </body>
-</html>
diff --git a/groovy/modules/classic/src/test/README.txt b/groovy/modules/classic/src/test/README.txt
deleted file mode 100644
index c769a92..0000000
--- a/groovy/modules/classic/src/test/README.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-TEST ORGANISATION
-=================
-
-We'll be mainaining Classic and New Groovy for a couple of releases so if you are gonna add/modify a test, please
-follow these guidelines...
-
-groovy-core/src/test-old    is for Classic Groovy test cases
-groovy-core/src/test        is for New Groovy test cases
-
-* all new tests go in their regular place in groovy-core/src/test
-
diff --git a/groovy/modules/classic/src/test/UberTestCase.java b/groovy/modules/classic/src/test/UberTestCase.java
deleted file mode 100644
index a2ccf2d..0000000
--- a/groovy/modules/classic/src/test/UberTestCase.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/**
- * to prevent a JVM startup-shutdown time per test, it should be more efficient to
- * collect the tests together into a suite.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-import junit.framework.*;
-public class UberTestCase extends TestCase {
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTestSuite(AmbiguousInvocationTest.class);
-        suite.addTestSuite(ArrayAutoboxingTest.class);        
-        suite.addTestSuite(ArrayParamMethodTest.class);
-        suite.addTestSuite(ArrayTest.class);
-        suite.addTestSuite(AssertNumberTest.class);
-        suite.addTestSuite(AssertTest.class);
-        suite.addTestSuite(AssignmentInsideExpressionBug.class);
-        suite.addTestSuite(AutoboxingOfComparisonsBug.class);
-        suite.addTestSuite(BadScriptNameBug.class);
-        suite.addTestSuite(Base64Test.class);
-        suite.addTestSuite(BenchmarkBug.class);
-        suite.addTestSuite(BigDecimalOperationTest.class);
-        suite.addTestSuite(BindingTest.class);
-        suite.addTestSuite(BitwiseOperationsTest.class);
-        suite.addTestSuite(BlockAsClosureBug.class);
-        suite.addTestSuite(BooleanBug.class);
-        suite.addTestSuite(BooleanOperationTest.class);
-        suite.addTestSuite(ByteIndexBug.class);
-        suite.addTestSuite(Bytecode2Bug.class);
-        suite.addTestSuite(Bytecode3Bug.class);
-        suite.addTestSuite(Bytecode4Bug.class);
-        suite.addTestSuite(Bytecode5Bug.class);
-        suite.addTestSuite(Bytecode6Bug.class);
-        suite.addTestSuite(Bytecode7Bug.class);
-        suite.addTestSuite(BytecodeBug.class);
-        suite.addTestSuite(CallInnerClassCtorTest.class);
-        suite.addTestSuite(CallingClosuresWithClosuresBug.class);
-        suite.addTestSuite(CastTest.class);
-        suite.addTestSuite(CastWhenUsingClosuresBug.class);
-        suite.addTestSuite(CategoryTest.class);
-        suite.addTestSuite(ChainedAssignment.class);
-        suite.addTestSuite(ChristofsPropertyBug.class);
-        suite.addTestSuite(ClassExpressionTest.class);
-        suite.addTestSuite(ClassInNamedParamsBug.class);
-        suite.addTestSuite(ClassLoaderBug.class);
-        suite.addTestSuite(ClassTest.class);
-        suite.addTestSuite(ClosureAsParamTest.class);
-        suite.addTestSuite(ClosureClassLoaderBug.class);
-        suite.addTestSuite(ClosureCloneTest.class);
-        suite.addTestSuite(ClosureComparatorTest.class);
-        suite.addTestSuite(ClosureCurryTest.class);
-        suite.addTestSuite(ClosureInClosureBug.class);
-        suite.addTestSuite(ClosureInClosureTest.class);
-        suite.addTestSuite(ClosureInStaticMethodTest.class);
-        suite.addTestSuite(ClosureMethodCallTest.class);
-        suite.addTestSuite(ClosureMethodTest.class);
-        suite.addTestSuite(ClosureParameterPassingBug.class);
-        suite.addTestSuite(ClosureReturnTest.class);
-        suite.addTestSuite(ClosureReturnWithoutReturnStatementTest.class);
-        suite.addTestSuite(ClosureSugarTest.class);
-        suite.addTestSuite(ClosureTest.class);
-        suite.addTestSuite(ClosureTypedVariableBug.class);
-        suite.addTestSuite(ClosureUsingOuterVariablesTest.class);
-        suite.addTestSuite(ClosureVariableBug.class);
-        suite.addTestSuite(ClosureWithDefaultParamTest.class);
-        suite.addTestSuite(CompareToTest.class);
-        suite.addTestSuite(CompilerErrorTest.class);
-        suite.addTestSuite(ConstructorBug.class);
-        suite.addTestSuite(DateTest.class);
-        suite.addTestSuite(DefVariableBug.class);
-        suite.addTestSuite(DefaultParamClosureTest.class);
-        suite.addTestSuite(DefaultParamTest.class);
-        suite.addTestSuite(DollarEscapingTest.class);
-        suite.addTestSuite(DoubleOperationTest.class);
-        suite.addTestSuite(EscapedMetaCharacterTest.class);
-        suite.addTestSuite(EscapedUnicodeTest.class);
-        suite.addTestSuite(ExceptionInClosureTest.class);
-        suite.addTestSuite(ExpandoPropertyTest.class);
-        suite.addTestSuite(FilterLineTest.class);
-        suite.addTestSuite(ForAndSqlBug.class);
-        suite.addTestSuite(ForLoopBug.class);
-        suite.addTestSuite(ForLoopTest.class);
-        suite.addTestSuite(ForLoopWithLocalVariablesTest.class);
-        suite.addTestSuite(FullyQualifiedClassBug.class);
-        suite.addTestSuite(GPathTest.class);
-        suite.addTestSuite(GStringTest.class);
-        suite.addTestSuite(GeneratorTest.class);
-        suite.addTestSuite(GetterBug.class);
-        suite.addTestSuite(GlobalPrintlnTest.class);
-        suite.addTestSuite(Groovy239_Bug.class);
-        suite.addTestSuite(Groovy249_Bug.class);
-        suite.addTestSuite(Groovy252_Bug.class);
-        suite.addTestSuite(Groovy389_Bug.class);
-        suite.addTestSuite(Groovy513_Bug.class);
-        suite.addTestSuite(GroovyMethodsTest.class);
-        suite.addTestSuite(GuillaumesBug.class);
-        suite.addTestSuite(GuillaumesMapBug.class);
-        suite.addTestSuite(HeredocsTest.class);
-        suite.addTestSuite(HomepageTest.class);
-        suite.addTestSuite(IfElseCompactTest.class);
-        suite.addTestSuite(IfElseTest.class);
-        suite.addTestSuite(IfPropertyTest.class);
-        suite.addTestSuite(IfTest.class);
-        suite.addTestSuite(IfWithMethodCallTest.class);
-        suite.addTestSuite(ImmutableModificationTest.class);
-        suite.addTestSuite(ImportTest.class);
-        suite.addTestSuite(InconsistentStackHeightBug.class);
-        suite.addTestSuite(InstanceofTest.class);
-        suite.addTestSuite(InvokeNormalMethodFromBuilder_Bug657.class);
-        suite.addTestSuite(InvokeNormalMethodsFirstTest.class);
-        suite.addTestSuite(IntegerOperationTest.class);
-        suite.addTestSuite(IterateOverCustomTypeBug.class);
-        suite.addTestSuite(ListIteratingTest.class);
-        suite.addTestSuite(ListTest.class);
-        suite.addTestSuite(LiteralTypesTest.class);
-        suite.addTestSuite(LittleClosureTest.class);
-        suite.addTestSuite(LocalFieldTest.class);
-        suite.addTestSuite(LocalPropertyTest.class);
-        suite.addTestSuite(LocalVariableTest.class);
-        suite.addTestSuite(LogTest.class);
-        suite.addTestSuite(LogicTest.class);
-        suite.addTestSuite(LoopBreakTest.class);
-        suite.addTestSuite(MapConstructionTest.class);
-        suite.addTestSuite(MapPropertyTest.class);
-        suite.addTestSuite(MapTest.class);
-        suite.addTestSuite(MarkupAndMethodBug.class);
-        suite.addTestSuite(MethodCallTest.class);
-        suite.addTestSuite(MethodCallWithoutParensInStaticMethodBug.class);
-        suite.addTestSuite(MethodCallWithoutParenthesisTest.class);
-        suite.addTestSuite(MethodDispatchBug.class);
-        suite.addTestSuite(MethodParameterAccessWithinClosureTest.class);
-        suite.addTestSuite(MinMaxTest.class);
-        suite.addTestSuite(MinusEqualsTest.class);
-        suite.addTestSuite(ModuloTest.class);
-        suite.addTestSuite(MorgansBug.class);
-        suite.addTestSuite(MultilineStringTest.class);
-        suite.addTestSuite(MultiplyDivideEqualsTest.class);
-        suite.addTestSuite(NamedParameterTest.class);
-        suite.addTestSuite(NavigationTest.class);
-        suite.addTestSuite(NegateListsTest.class);
-        suite.addTestSuite(NegationTests.class);
-        suite.addTestSuite(NestedClosure2Bug.class);
-        suite.addTestSuite(NestedClosureBug.class);
-        suite.addTestSuite(NestedClosureBugTest.class);
-        suite.addTestSuite(NewExpressionTest.class);
-        suite.addTestSuite(NoPackageTest.class);
-        suite.addTestSuite(NodeGPathTest.class);
-        suite.addTestSuite(NullCompareBug.class);
-        suite.addTestSuite(NullPropertyTest.class);
-        suite.addTestSuite(NumberMathTest.class);
-        suite.addTestSuite(NumberTest.class);
-        suite.addTestSuite(OptionalReturnTest.class);
-        suite.addTestSuite(OrderByTest.class);
-        suite.addTestSuite(OverloadInvokeMethodBug.class);
-        suite.addTestSuite(OverloadInvokeMethodTest.class);
-        suite.addTestSuite(OverridePropertyGetterTest.class);
-        suite.addTestSuite(PlusEqualsTest.class);
-        suite.addTestSuite(PostfixTest.class);
-        suite.addTestSuite(PowerOperationTest.class);
-        suite.addTestSuite(PrefixTest.class);
-        suite.addTestSuite(PrimitiveArraysTest.class);
-        suite.addTestSuite(PrimitiveTypeFieldTest.class);
-        suite.addTestSuite(PrimitiveTypesTest.class);
-        suite.addTestSuite(PrintTest.class);
-        suite.addTestSuite(PrintlnWithNewBug.class);
-        suite.addTestSuite(PrivateVariableAccessFromAnotherInstanceTest.class);
-        suite.addTestSuite(ProcessTest.class);
-        suite.addTestSuite(PropertyBug.class);
-        suite.addTestSuite(PropertyTest.class);
-        suite.addTestSuite(PropertyTest2.class);
-        suite.addTestSuite(PropertyWithoutDotTest.class);
-        suite.addTestSuite(RangeTest.class);
-        suite.addTestSuite(ReadLineTest.class);
-        suite.addTestSuite(RegularExpressionsTest.class);
-        suite.addTestSuite(ReturnTest.class);
-        suite.addTestSuite(RodsBooleanBug.class);
-        suite.addTestSuite(RodsBug.class);
-        suite.addTestSuite(SafeNavigationTest.class);
-        suite.addTestSuite(SerializeTest.class);
-        suite.addTestSuite(ShellTest.class);
-        suite.addTestSuite(SmallTreeTest.class);
-        suite.addTestSuite(SocketTest.class);
-        suite.addTestSuite(SortTest.class);
-        suite.addTestSuite(StaticClosurePropertyBug.class);
-        suite.addTestSuite(StaticMarkupBug.class);
-        suite.addTestSuite(StaticPrintlnTest.class);
-        suite.addTestSuite(StaticThisTest.class);
-        suite.addTestSuite(StringOperationTest.class);
-        suite.addTestSuite(StringTest.class);
-        suite.addTestSuite(SubscriptAndExpressionBug.class);
-        suite.addTestSuite(SubscriptTest.class);
-        suite.addTestSuite(SuperMethod2Bug.class);
-        suite.addTestSuite(SuperMethodBug.class);
-        suite.addTestSuite(SwitchTest.class);
-        suite.addTestSuite(SwitchWithDifferentTypesTest.class);
-        suite.addTestSuite(TedsClosureBug.class);
-        suite.addTestSuite(TernaryOperatorTest.class);
-        suite.addTestSuite(TextPropertyTest.class);
-        suite.addTestSuite(ThrowTest.class);
-        suite.addTestSuite(ToArrayBug.class);
-        suite.addTestSuite(ToStringBug.class);
-        suite.addTestSuite(TreeTest.class);
-        suite.addTestSuite(TripleQuotedStringTest.class);
-        suite.addTestSuite(TryCatch2Bug.class);
-        suite.addTestSuite(TryCatchBug.class);
-        suite.addTestSuite(TryCatchTest.class);
-        suite.addTestSuite(TypesafeMethodTest.class);
-        suite.addTestSuite(UnaryMinusTest.class);
-        suite.addTestSuite(UnknownVariableBug.class);
-        suite.addTestSuite(UnsafeNavigationTest.class);
-        suite.addTestSuite(UseClosureInClosureBug.class);
-        suite.addTestSuite(UseStaticInClosureBug.class);
-        suite.addTestSuite(VariableScopingBug.class);
-        suite.addTestSuite(VariblePrecedence.class);
-        suite.addTestSuite(VerbatimGStringTest.class);
-        suite.addTestSuite(VerboseTreeTest.class);
-        suite.addTestSuite(WhileLoopTest.class);
-        suite.addTestSuite(ZoharsBug.class);
-        return suite;
-    }
-
-//  The following classes appear in target/test-classes but do not extend junit.framework.TestCase
-//
-//        suite.addTestSuite(AnotherMockInputStream.class);
-//        suite.addTestSuite(Bean.class);
-//        suite.addTestSuite(Bean249.class);
-//        suite.addTestSuite(BooleanBean.class);
-//        suite.addTestSuite(CallAnotherScript.class);
-//        suite.addTestSuite(ClassWithScript.class);
-//        suite.addTestSuite(ComparableFoo.class);
-//        suite.addTestSuite(CreateData.class);
-//        suite.addTestSuite(Entry.class);
-//        suite.addTestSuite(EvalInScript.class);
-//        suite.addTestSuite(Feed.class);
-//        suite.addTestSuite(Foo.class);
-//        suite.addTestSuite(HelloWorld.class);
-//        suite.addTestSuite(HelloWorld2.class);
-//        suite.addTestSuite(Html2Wiki.class);
-//        suite.addTestSuite(IntegerCategory.class);
-//        suite.addTestSuite(Loop.class);
-//        suite.addTestSuite(Loop2.class);
-//        suite.addTestSuite(MapFromList.class);
-//        suite.addTestSuite(MarkupTestScript.class);
-//        suite.addTestSuite(MethodTestScript.class);
-//        suite.addTestSuite(MockInputStream.class);
-//        suite.addTestSuite(MockProcess.class);
-//        suite.addTestSuite(MockSocket.class);
-//        suite.addTestSuite(OverloadA.class);
-//        suite.addTestSuite(OverloadB.class);
-//        suite.addTestSuite(NavToWiki.class);
-//        suite.addTestSuite(Person.class);
-//        suite.addTestSuite(SampleMain.class);
-//        suite.addTestSuite(ScriptWithFunctions.class);
-//        suite.addTestSuite(ShowArgs.class);
-//        suite.addTestSuite(StringCategory.class);
-//        suite.addTestSuite(SuperBase.class);
-//        suite.addTestSuite(SuperDerived.class);
-//        suite.addTestSuite(TestBase.class);
-//        suite.addTestSuite(TestCaseBug.class);
-//        suite.addTestSuite(TestDerived.class);
-//        suite.addTestSuite(TinyAgent.class);
-//        suite.addTestSuite(UnitTestAsScript.class);
-//        suite.addTestSuite(UseClosureInScript.class);
-//        suite.addTestSuite(X.class);
-//        suite.addTestSuite(createLoop.class);
-}
diff --git a/groovy/modules/classic/src/test/UberTestCase2.java b/groovy/modules/classic/src/test/UberTestCase2.java
deleted file mode 100644
index b117851..0000000
--- a/groovy/modules/classic/src/test/UberTestCase2.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * to prevent a JVM startup-shutdown time per test, it should be more efficient to
- * collect the tests together into a suite.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-import junit.framework.*;
-public class UberTestCase2 extends TestCase {
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTestSuite(groovy.bugs.ArrayMethodCallBug.class);
-        suite.addTestSuite(groovy.bugs.ClassGeneratorFixesTest.class);
-        suite.addTestSuite(groovy.bugs.ClassInScriptBug.class);
-        suite.addTestSuite(groovy.bugs.ClosuresInScriptBug.class);
-        suite.addTestSuite(groovy.bugs.ClosureWithStaticVariablesBug.class);
-        suite.addTestSuite(groovy.bugs.ConstructorParameterBug.class);
-        suite.addTestSuite(groovy.bugs.DoubleSizeParametersBug.class);
-        suite.addTestSuite(groovy.bugs.Groovy278_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy303_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy308_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy558_616_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy593_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy666_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy675_Bug.class);
-        suite.addTestSuite(groovy.bugs.Groovy770_Bug.class);
-        suite.addTestSuite(groovy.bugs.IanMaceysBug.class);
-        suite.addTestSuite(groovy.bugs.InterfaceImplBug.class);
-        suite.addTestSuite(groovy.bugs.MarkupInScriptBug.class);
-        suite.addTestSuite(groovy.bugs.PrimitivePropertyBug.class);
-        suite.addTestSuite(groovy.bugs.ScriptBug.class);
-        suite.addTestSuite(groovy.bugs.SeansBug.class);
-        suite.addTestSuite(groovy.bugs.StaticMethodCallBug.class);
-        suite.addTestSuite(groovy.bugs.SubscriptOnPrimitiveTypeArrayBug.class);
-        suite.addTestSuite(groovy.bugs.SubscriptOnStringArrayBug.class);
-        suite.addTestSuite(groovy.lang.GroovyShellTest.class);
-        suite.addTestSuite(groovy.lang.GStringTest.class);
-        suite.addTestSuite(groovy.lang.IntRangeTest.class);
-        suite.addTestSuite(groovy.lang.MetaClassTest.class);
-        suite.addTestSuite(groovy.lang.RangeTest.class);
-        suite.addTestSuite(groovy.lang.ScriptIntegerDivideTest.class);
-        suite.addTestSuite(groovy.lang.ScriptPrintTest.class);
-        suite.addTestSuite(groovy.lang.ScriptTest.class);
-        suite.addTestSuite(groovy.lang.SequenceTest.class);
-        suite.addTestSuite(groovy.lang.TupleTest.class);
-        suite.addTestSuite(groovy.mock.example.SandwichMakerTest.class);
-        suite.addTestSuite(groovy.mock.MockTest.class);
-        suite.addTestSuite(groovy.model.TableModelTest.class);
-//todo - error in some test environments        suite.addTestSuite(groovy.security.RunAllGroovyScriptsSuite.class);
-//todo - error in some test environments        suite.addTestSuite(groovy.security.RunOneGroovyScript.class);
-//todo - error in some test environments        suite.addTestSuite(groovy.security.SecurityTest.class);
-//todo - error in some test environments        suite.addTestSuite(groovy.security.SecurityTestSupport.class);
-//todo - error in some test environments        suite.addTestSuite(groovy.security.SignedJarTest.class);
-        suite.addTestSuite(groovy.sql.PersonTest.class);
-        suite.addTestSuite(groovy.sql.SqlCompleteTest.class);
-        suite.addTestSuite(groovy.sql.SqlCompleteWithoutDataSourceTest.class);
-        suite.addTestSuite(groovy.sql.SqlTest.class);
-        suite.addTestSuite(groovy.sql.SqlWithBuilderTest.class);
-        suite.addTestSuite(groovy.sql.SqlWithTypedResultsTest.class);
-        suite.addTestSuite(groovy.sql.SqlRowsTest.class);
-        suite.addTestSuite(groovy.text.TemplateTest.class);
-        suite.addTestSuite(groovy.tree.NodePrinterTest.class);
-        suite.addTestSuite(groovy.txn.TransactionTest.class);
-        suite.addTestSuite(groovy.util.EmptyScriptTest.class);
-        suite.addTestSuite(groovy.util.MBeanTest.class);
-        suite.addTestSuite(groovy.util.NodeTest.class);
-        suite.addTestSuite(groovy.util.XmlParserTest.class);
-        suite.addTestSuite(groovy.util.BuilderSupportTest.class);
-        suite.addTestSuite(groovy.xml.dom.DOMTest.class);
-        suite.addTestSuite(groovy.xml.DOMTest.class);
-        suite.addTestSuite(groovy.xml.MarkupTest.class);
-        suite.addTestSuite(groovy.xml.MarkupWithWriterTest.class);
-        suite.addTestSuite(groovy.xml.NamespaceDOMTest.class);
-        suite.addTestSuite(groovy.xml.SAXTest.class);
-        suite.addTestSuite(groovy.xml.SmallNamespaceDOMTest.class);
-        suite.addTestSuite(groovy.xml.VerboseDOMTest.class);
-        suite.addTestSuite(groovy.xml.XmlTest.class);
-        //suite.addTestSuite(groovy.swing.SwingBuilderTest.class);
-        return suite;
-    }
-
-// no tests inside (should we have an AbstractGroovyTestCase???)
-//        suite.addTestSuite(groovy.bugs.TestSupport.class);
-//        suite.addTestSuite(groovy.sql.TestHelper.class);
-//        suite.addTestSuite(groovy.swing.Demo.class);
-
-//  The following classes appear in target/test-classes but do not extend junit.framework.TestCase
-//
-//        suite.addTestSuite(cheese.Cheddar.class);
-//        suite.addTestSuite(cheese.Provolone.class);
-//        suite.addTestSuite(groovy.bugs.Cheese.class);
-//        suite.addTestSuite(groovy.bugs.MyRange.class);
-//        suite.addTestSuite(groovy.bugs.Scholastic.class);
-//        suite.addTestSuite(groovy.bugs.SimpleModel.class);
-//        suite.addTestSuite(groovy.DummyInterface.class);
-//        suite.addTestSuite(groovy.DummyMethods.class);
-//        suite.addTestSuite(groovy.gravy.Build.class);
-//        suite.addTestSuite(groovy.j2ee.J2eeConsole.class);
-//        suite.addTestSuite(groovy.lang.DerivedScript.class);
-//        suite.addTestSuite(groovy.lang.DummyGString.class);
-//        suite.addTestSuite(groovy.lang.MockWriter.class);
-//        suite.addTestSuite(groovy.mock.example.CheeseSlicer.class);
-//        suite.addTestSuite(groovy.mock.example.SandwichMaker.class);
-//        suite.addTestSuite(groovy.model.MvcDemo.class);
-//        suite.addTestSuite(groovy.OuterUser.class);
-//        suite.addTestSuite(groovy.script.AtomTestScript.class);
-//        suite.addTestSuite(groovy.script.Entry.class);
-//        suite.addTestSuite(groovy.script.Feed.class);
-//        suite.addTestSuite(groovy.script.PackageScript.class);
-//        suite.addTestSuite(groovy.script.Person.class);
-//        suite.addTestSuite(groovy.sql.Person.class);
-//        suite.addTestSuite(groovy.swing.MyTableModel.class);
-//        suite.addTestSuite(groovy.swing.SwingDemo.class);
-//        suite.addTestSuite(groovy.swing.TableDemo.class);
-//        suite.addTestSuite(groovy.swing.TableLayoutDemo.class);
-//        suite.addTestSuite(groovy.txn.TransactionBean.class);
-//        suite.addTestSuite(groovy.txn.TransactionBuilder.class);
-//        suite.addTestSuite(groovy.util.Dummy.class);
-//        suite.addTestSuite(groovy.util.DummyMBean.class);
-//        suite.addTestSuite(groovy.util.SpoofTask.class);
-//        suite.addTestSuite(groovy.util.SpoofTaskContainer.class);
-//        suite.addTestSuite(groovy.xml.TestXmlSupport.class);
-
-}
diff --git a/groovy/modules/classic/src/test/UberTestCase3.java b/groovy/modules/classic/src/test/UberTestCase3.java
deleted file mode 100644
index 3684831..0000000
--- a/groovy/modules/classic/src/test/UberTestCase3.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * to prevent a JVM startup-shutdown time per test, it should be more efficient to
- * collect the tests together into a suite.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-import junit.framework.*;
-public class UberTestCase3 extends TestCase {
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTestSuite(org.codehaus.groovy.ast.ClassNodeTest.class);
-        suite.addTestSuite(org.codehaus.groovy.ast.ModuleNodeTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.BytecodeHelperTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.CallClosureFieldAsMethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.CapitalizeTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.ConstructorIssueTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.ConstructorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.ForTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.GetPropertyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.GroovyClassLoaderTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.GStringTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.IfElseTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.MainTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.MetaClassTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.MethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.PropertyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.RunGroovyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.TupleListTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.VerifierCodeVisitorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.DefaultGroovyMethodsTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.InheritedInterfaceMethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.InvokeConstructorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.InvokeGroovyMethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.InvokeMethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.InvokerTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.MethodFailureTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.MethodKeyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.NewStaticMetaMethodTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.TupleListTest.class);
-        suite.addTestSuite(org.codehaus.groovy.sandbox.util.XmlSlurperTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.AbstractTokenStreamTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.lexer.AbstractCharStreamTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.lexer.LexerTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.lexer.LexerTokenStreamTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.lexer.StringCharStreamTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.AbstractMethodCheckTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.CSTNodeTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.ParserTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.ReturnTypeErrorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.TokenTest.class);
-        suite.addTestSuite(org.codehaus.groovy.tools.CompilerTest.class);
-        suite.addTestSuite(org.codehaus.groovy.tools.FileSystemCompilerTest.class);
-        suite.addTestSuite(org.codehaus.groovy.tools.xml.DomToGroovyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.wiki.TestCaseRenderEngineTest.class);
-        return suite;
-    }
-
-// todo - Are we still using wiki tests as none turn up on my build???
-//        suite.addTestSuite(org.codehaus.groovy.wiki.RunWikiTest.class);
-
-// no tests inside (should we have an AbstractGroovyTestCase???)
-//
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DummyTestDerivation.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.TestSupport.class);
-
-//  The following classes appear in target/test-classes but do not extend junit.framework.TestCase
-//
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DerivedBean.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DummyReflector.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DumpClass.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DumpClass2.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DumpClass3.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DumpClass4.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.DumpingClassLoader.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.Main.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.MyBean.class);
-//        suite.addTestSuite(org.codehaus.groovy.classgen.SimpleBean.class);
-//        suite.addTestSuite(org.codehaus.groovy.dummy.FooHandler.class);
-//        suite.addTestSuite(org.codehaus.groovy.runtime.DummyBean.class);
-//        suite.addTestSuite(org.codehaus.groovy.runtime.MockGroovyObject.class);
-//        suite.addTestSuite(org.codehaus.groovy.syntax.parser.TestParserSupport.class);
-//        suite.addTestSuite(org.codehaus.groovy.tools.DocGeneratorMain.class);
-
-}
diff --git a/groovy/modules/classic/src/test/UberTestCaseLongRunningTests.java b/groovy/modules/classic/src/test/UberTestCaseLongRunningTests.java
deleted file mode 100644
index 7bde9a7..0000000
--- a/groovy/modules/classic/src/test/UberTestCaseLongRunningTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * The tests collected here all take a 'significant' length of time to execute,
- * i.e. greater than 2 seconds elapsed on my machine.
- *
- * to prevent a JVM startup-shutdown time per test, it should be more efficient to
- * collect the tests together into a suite.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-import junit.framework.*;
-public class UberTestCaseLongRunningTests extends TestCase {
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        suite.addTestSuite(ClosureListenerTest.class);
-        suite.addTestSuite(ScriptTest.class);
-        suite.addTestSuite(groovy.util.AntTest.class);
-        suite.addTestSuite(org.codehaus.groovy.bsf.BSFTest.class);
-        suite.addTestSuite(org.codehaus.groovy.bsf.CacheBSFTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.ReflectorGeneratorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.RunBugsTest.class);
-        suite.addTestSuite(org.codehaus.groovy.classgen.RunClosureTest.class);
-        suite.addTestSuite(org.codehaus.groovy.runtime.PropertyTest.class);
-        suite.addTestSuite(org.codehaus.groovy.sandbox.markup.StreamingMarkupTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.ASTBuilderTest.class);
-        suite.addTestSuite(org.codehaus.groovy.syntax.parser.CompilerErrorTest.class);
-        suite.addTestSuite(org.codehaus.groovy.wiki.RunHtml2WikiTest.class);
-        return suite;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/.cvsignore b/groovy/modules/classic/src/test/groovy/.cvsignore
deleted file mode 100644
index e43b0f9..0000000
--- a/groovy/modules/classic/src/test/groovy/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-.DS_Store
diff --git a/groovy/modules/classic/src/test/groovy/AmbiguousInvocationTest.groovy b/groovy/modules/classic/src/test/groovy/AmbiguousInvocationTest.groovy
deleted file mode 100644
index bd49cd7..0000000
--- a/groovy/modules/classic/src/test/groovy/AmbiguousInvocationTest.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * to prove GROOVY-467 is no longer an issue    
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-import groovy.DummyMethods
-
-class AmbiguousInvocationTest extends GroovyTestCase { 
-    property dummy
-    
-    void setUp() {
-    	dummy = new DummyMethods()
-    }
-    
-    void testAmbiguousInvocationWithFloats() {
-   	assert "float args" == dummy.foo("bar",1.0f,2.0f)
-   	assert "float args" == dummy.foo("bar",(float)1,(float)2)
-   	assert "float args" == dummy.foo("bar",(Float)1,(Float)2)
-    }
-    void testAmbiguousInvocationWithInts() {
-   	assert "int args" == dummy.foo("bar",1,2)
-   	assert "int args" == dummy.foo("bar",(int)1,(int)2)
-   	assert "int args" == dummy.foo("bar",(Integer)1,(Integer)2)
-    }
-} 
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ArrayAutoboxingTest.groovy b/groovy/modules/classic/src/test/groovy/ArrayAutoboxingTest.groovy
deleted file mode 100644
index fa34bc8..0000000
--- a/groovy/modules/classic/src/test/groovy/ArrayAutoboxingTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-class ArrayAutoboxingTest extends GroovyTestCase {
-    
-    void testUnwantedAutoboxingWhenInvokingMethods() {
-      cl = blah2(new int[2*2])
-      assert cl == "[I"
-      cl = blah2(new long[2*2])
-      assert cl == "[J"
-      cl = blah2(new short[2*2])
-      assert cl == "[S"
-      cl = blah2(new boolean[2*2])
-      assert cl == "[Z"
-      cl = blah2(new char[2*2])
-      assert cl == "[C"
-      cl = blah2(new double[2*2])
-      assert cl == "[D"
-      cl = blah2(new float[2*2])
-      assert cl == "[F"
-    }
-    
-    blah2(Object o) {
-       return o.class.name
-    }
-        
-} 
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ArrayParamMethodTest.groovy b/groovy/modules/classic/src/test/groovy/ArrayParamMethodTest.groovy
deleted file mode 100644
index 2d220ea..0000000
--- a/groovy/modules/classic/src/test/groovy/ArrayParamMethodTest.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-import groovy.DummyInterface
-
-class ArrayParamMethodTest extends GroovyTestCase implements DummyInterface {
-
-    void testMethodCall() {
-        array = "a b c".split(' ')
-        
-        assert array.size() == 3
-        
-        methodWithArrayParam(array)
-	}
-    
-    void methodWithArrayParam(String[] args) {
-        println("first item: ${args[0]}")
-        
-        // lets turn it into a list
-        list = args.toList()
-        assert list instanceof java.util.List
-        list[4] = "e"
-        
-        assert list == ["a", "b", "c", null, "e"]
-        
-        println("Created list ${list}")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ArrayTest.groovy b/groovy/modules/classic/src/test/groovy/ArrayTest.groovy
deleted file mode 100644
index 072d9d6..0000000
--- a/groovy/modules/classic/src/test/groovy/ArrayTest.groovy
+++ /dev/null
@@ -1,129 +0,0 @@
-class ArrayTest extends GroovyTestCase {
-
-    void testFixedSize() {
-        array = new String[10]
-        
-        assert array.size() == 10
-        
-        array[0] = "Hello"
-        
-        assert array[0] == "Hello"
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-	}
-    
-    void testArrayWithInitializer() {
-        array = new String[] { "nice", "cheese", "gromit" }
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-        
-        assert array.size() == 3
-        assert array[0] == "nice" : array.inspect()
-        assert array[1] == "cheese"
-        assert array[2] == "gromit"
-    }
-
-	void testCharArrayCreate() {
-   		array  = new char[3]
-   		assert array.size() == 3
-	}
-	
-    void testCharArrayWithInitializer() {
-        array = new char[] { 'a', 'b', 'c' }
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-        
-        assert array.size() == 3
-        assert array[0] == 'a' : array.inspect()
-        assert array[1] == 'b'
-        assert array[2] == 'c'
-    }
-    
-	void testByteArrayCreate() {
-		array = new byte[100]
-		assert array.size() == 100;
-	}
-	
-    void testByteArrayWithInitializer() {
-        array = new byte[] { 0, 1, 2, 3 }
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-        
-        assert array.size() == 4
-        assert array[0] == 0 : array.inspect()
-        assert array[1] == 1
-        assert array[2] == 2
-        assert array[3] == 3
-    }
-
-    void testByteArrayWithInitializerAndAssignmentOfNumber() {
-		array = new byte[] { 2, 4}
-        println "Created array ${array.inspect()} with type ${array.class}"
-		assert array.size() == 2
-		assert array[0] == 2
-		assert array[1] == 4
-		
-		array[0] = 76
-		array[1] = 32
-		assert array[0] == 76
-		assert array[1] == 32
-		
-		array.putAt(0, 45)
-		array.putAt(1, 67)
-		assert array[0] == 45
-		assert array[1] == 67
-	}
-		
-	void testDoubleArrayCreate() {
-   		array  = new double[3]
-   		assert array.size() == 3
-	}
-	
-    void testDoubleArrayWithInitializer() {
-        array = new double[] { 1.3, 3.14, 2.7 }
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-        
-        assert array.size() == 3
-        assert array[0] == 1.3 : array.inspect()
-        assert array[1] == 3.14
-        assert array[2] == 2.7
-    }		
-
-    	
-    void testIntArrayCreate() {
-        array = new int[5]
-        
-        assert array.size() == 5
-    }
-
-    void testIntArrayWithInitializer() {
-		array = new int[] { 42, -5, 360 }
-        
-        println "Created array ${array.inspect()} with type ${array.class}"
-        
-        assert array.size() == 3
-        assert array[0] == 42 : array.inspect()
-        assert array[1] == -5
-        assert array[2] == 360
-    }
-	
-	
-	
-/*
-    void testArrayDeclaration() {
-        String[] array = new String{} { "a", "b", "c" }
-
-        array.each { |element| println( element ) }
-
-        assert array.size() == 3
-
-    }
-
-    static void main( String[] args ) {
-        o = new ArrayTest();
-
-        o.testArrayDeclaration();
-    }
-*/
-}
diff --git a/groovy/modules/classic/src/test/groovy/AssertNumberTest.groovy b/groovy/modules/classic/src/test/groovy/AssertNumberTest.groovy
deleted file mode 100644
index 2edbc8c..0000000
--- a/groovy/modules/classic/src/test/groovy/AssertNumberTest.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-class AssertNumberTest extends GroovyTestCase {
-
-    property x
-    
-    void testCompare() {
-        assert x == null
-   		assert x != 432
-   		assert x != 423.2342
-   		     
-        x = 123
-
-        assert x != null
-        assert x != 432
-        assert x != 423.2342
-        assert x == 123
-		
-        x = 42.2342
-
-        assert x != null
-   		assert x != 432
-   		assert x != 423.2342
-		assert x == 42.2342
-	}
-	
-	void testLessThan() {
-	    x = 123
-	    
-        assert x < 200
-        assert x <= 200
-        assert x <= 123
-	    
-	}
-
-    void testGreaterThan() {
-        x = 123
-	    
-        assert x > 10
-        assert x >= 10
-        assert x >= 123
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/AssertTest.groovy b/groovy/modules/classic/src/test/groovy/AssertTest.groovy
deleted file mode 100644
index bb2487e..0000000
--- a/groovy/modules/classic/src/test/groovy/AssertTest.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-class AssertTest extends GroovyTestCase {
-
-    void testAssert() {
-        x = null
-        
-        assert x == null
-        assert x != "abc"
-        assert x != "foo"
-	    
-        x = "abc"
-
-        assert x != "foo"
-        assert x !=  null
-        assert x != "def"
-        assert x == "abc"
-        
-        assert x.equals("abc")
-        
-        assert !x.equals("def")
-        assert !false
-        assert !(1==2)
-        assert !(1>3)
-        assert !(1!=1)
-	}
-	
-	void testAssertFail() {
-	    x = 1234
-	    
-	    runCode = false
-        try {
-	        runCode = true
-	    	assert x == 5
-	    	
-	    	fail("Should have thrown an exception")
-	    }
-	    catch (AssertionError e) {
-	        //msg = "Expression: (x == 5). Values: x = 1234"
-	        //assert e.getMessage() == msg
-	        //assert e.message == msg
-	    }
-	    assert runCode : "has not ran the try / catch block code"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/Bar.groovy b/groovy/modules/classic/src/test/groovy/Bar.groovy
deleted file mode 100644
index 40659f2..0000000
--- a/groovy/modules/classic/src/test/groovy/Bar.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-package cheese;
-
-import java.util.HashMap as Goober;
-
-class Cheddar extends Goober implements Runnable
-{
-    property Goober theMap;
-    protected property cheesier;
-    public static property cheesiest;
-
-    cheeseIt() {  }
-
-    String getStringCheese() { }
-    String getOtherCheese(foo,bar) { }
-
-    void run() { cheeseIt() }
-
-    static Goober mutateGoober(Goober theGoober) { }
-   
-}
-
-class Provolone
-{
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/Base64Test.groovy b/groovy/modules/classic/src/test/groovy/Base64Test.groovy
deleted file mode 100644
index 0a1b32c..0000000
--- a/groovy/modules/classic/src/test/groovy/Base64Test.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-class Base64Test extends GroovyTestCase {
-
-    void testCodec() {
-   		testString ="§1234567890-=±!@£$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;'\\ASDFGHJKL:\"|`zxcvbnm,./~ZXCVBNM<>?\u0000\u00ff\u00f0\u000f"
-
-		// get a byte array using the least significant eigth bits of each caharacter
-   		testBytes = testString.getBytes("ISO-8859-1")
-   		
-   		// turn the bytes back into a string for later comparison
-    		testString = new String(testBytes, "ISO-8859-1")
-    		
-    		// encode the bytes as base64. This produces a Writable object convert it to a String
-    		encodedBytes = testBytes.encodeBase64().toString()
-    		
-    		// decode the base64 back to a byte array
-    		decodedBytes = encodedBytes.decodeBase64()
-    		
-    		// turn the byte array back to a String for caomparison
-    		decodedString = new String(decodedBytes, "ISO-8859-1")
-    		
-    		assert decodedString.equals(testString)
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/BigDecimalOperationTest.groovy b/groovy/modules/classic/src/test/groovy/BigDecimalOperationTest.groovy
deleted file mode 100644
index 722a65e..0000000
--- a/groovy/modules/classic/src/test/groovy/BigDecimalOperationTest.groovy
+++ /dev/null
@@ -1,78 +0,0 @@
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-class BigDecimalOperationTest extends GroovyTestCase {
-
-    property x
-    property y
-
-    void testPlus() {
-        x = .1 + 1.1
-        assert x == 1.2
-        assert x instanceof BigDecimal;
-
-        x = 3 + 2.2
-        assert x == 5.2
-
-        x = 2.2 + 4
-        assert x == 6.2
-
-        y = x + 1
-        assert y == 7.2
-
-        z = y + x + 1 + 2
-        assert z == 16.4
-    }
-
-    void testMinus() {
-        x = 1.1-0.01
-        assert x == 1.09
-
-        x = 6 - 2.2
-        assert x == 3.8
-
-        x = 5.8 - 2
-        assert x == 3.8
-
-        y = x - 1
-        assert y == 2.8
-    }
-
-    void testMultiply() {
-        x = 3 * 2.0
-        assert x == 6.0
-
-        x = 3.0 * 2
-        assert x == 6.0
-
-        x = 3.0 * 2.0
-        assert x == 6.0
-
-        y = x * 2
-        assert y == 12.0
-
-        y = 11 * 3.333
-        assert y == 36.663 : "y = " + y
-
-        y = 3.333 * 11
-        assert y == 36.663 : "y = " + y
-    }
-
-    void testDivide() {
-        x = 80.0 / 4
-        assert x == 20.0 : "x = " + x
-
-        x = 80 / 4.0
-        assert x == 20.0 : "x = " + x
-
-        y = x / 2
-        assert y == 10.0 : "y = " + y
-        assert y == 10 : "y = " + y
-
-        y = 34 / 3.000
-        assert y == 11.3333333333 : "y = " + y
-
-        y = 34.00000000000 / 3
-        assert y == 11.33333333333 : "y = " + y
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/BindingTest.groovy b/groovy/modules/classic/src/test/groovy/BindingTest.groovy
deleted file mode 100644
index 89f6279..0000000
--- a/groovy/modules/classic/src/test/groovy/BindingTest.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-class BindingTest extends GroovyTestCase {
-
-    void testProperties() {
-    	b = new Binding()
-    	b.setVariable("foo", 123)
-    	
-    	assert b.foo == 123
-    	
-    	b.bar = 456
-    	
-    	assert b.getVariable("bar") == 456
-    	assert b["bar"] == 456
-    	
-    	b["a.b.c"] = 'abc'
-    	
-    	assert b.getVariable("a.b.c") == 'abc'
-    	assert b["a.b.c"] == 'abc'
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/BitwiseOperationsTest.groovy b/groovy/modules/classic/src/test/groovy/BitwiseOperationsTest.groovy
deleted file mode 100644
index dc2c5eb..0000000
--- a/groovy/modules/classic/src/test/groovy/BitwiseOperationsTest.groovy
+++ /dev/null
@@ -1,281 +0,0 @@
-/** 
- * Test Bitwise Operations in Classic/New Groovy
- * 
- * @author Pilho Kim
- * @version $Revision$
- */
-class BitwiseOperationsTest extends GroovyTestCase {
-
-    void testBitwiseShift() {
-        a = 4
-        b = -4
-        assert a << 1 == 8
-        assert a << 2 == 16
-        assert a >> 1 == 2
-        assert a >> 2 == 1
-        assert a >>> 1 == 2
-        assert a >>> 2 == 1
-        assert b << 1 == -8
-        assert b << 2 == -16
-        assert b >> 1 == -2
-        assert b >> 2 == -1
-        assert b >>> 1 == 0x7FFFFFFE
-        assert b >>> 2 == 0x3FFFFFFF
-    }
-
-    void testBitwiseShiftEQUAL() {
-        a = 4
-        a <<= 1
-        assert a == 8
-        a <<= 2
-        assert a == 32
-        a >>= 1
-        assert a == 16
-        a >>= 2
-        assert a == 4
-
-        b = -4
-        b <<= 1
-        assert b == -8
-        b <<= 2
-        assert b == -32
-        b >>= 1
-        assert b == -16
-        b >>= 2
-        assert b == -4
-
-        b = -4
-        b >>>= 1
-        assert b == 0x7FFFFFFE
-        b = -8
-        b >>>= 2
-        assert b == 0x3FFFFFFE
-    }
-
-    void testBitwiseAnd() {
-       /*
-        // Oprator Precedence Problem
-        // ^, &, | should be prior to ==, <, >, <=, >=
-        a = 13
-        assert a & 3 == 1    // 0x0000000D & 0x00000003
-        assert a & 7 == 5    // 0x0000000D & 0x00000007
-        b = -13
-        assert b & 3 == 3    // 0xFFFFFFF3 & 0x00000003
-        assert b & 7 == 3    // 0xFFFFFFF3 & 0x00000007
-       */
-
-        a = 13
-        assert (a & 3) == 1    // 0x0000000D & 0x00000003
-        assert (a & 7) == 5    // 0x0000000D & 0x00000007
-        b = -13
-        assert (b & 3) == 3    // 0xFFFFFFF3 & 0x00000003
-        assert (b & 7) == 3    // 0xFFFFFFF3 & 0x00000007
-    }
-
-    void testBitwiseAndEqual() {
-        a = 13
-        a &= 3
-        assert a == 1    // 0x0000000D & 0x00000003
-        a &= 4
-        assert a == 0    // 0x00000001 & 0x00000004
-        b = -13
-        b &= 3
-        assert b == 3    // 0xFFFFFFF3 & 0x00000003
-        b &= 7
-        assert b == 3    // 0x00000003 & 0x00000007
-    }
-
-    void testBitwiseOr() {
-       /*
-        // Oprator Precedence Problem
-        // ^, &, | should be prior to ==, <, >, <=, >=
-        a = 13
-        assert a | 8 == 13      // 0x0000000D | 0x00000008
-        assert a | 16 == 29     // 0x0000000D | 0x00000010
-        b = -13
-        assert b | 8 == -5      // 0xFFFFFFF3 | 0x00000008
-        assert b | 16 == -13    // 0xFFFFFFF3 | 0x00000010
-       */
-
-        a = 13
-        assert (a | 8) == 13      // 0x0000000D | 0x00000008
-        assert (a | 16) == 29     // 0x0000000D | 0x00000010
-        b = -13
-        assert (b | 8) == -5      // 0xFFFFFFF3 | 0x00000008
-        assert (b | 16) == -13    // 0xFFFFFFF3 | 0x00000010
-    }
-
-    void testBitwiseOrEqual() {
-        a = 13
-        a |= 2
-        assert a == 15     // 0x0000000D | 0x00000002
-        a |= 16
-        assert a == 31     // 0x0000000F | 0x0000001F
-        b = -13
-        b |= 8
-        assert b == -5     // 0xFFFFFFF3 | 0x00000008
-        b |= 1
-        assert b == -5     // 0xFFFFFFFB | 0x00000001
-    }
-
-    void testBitwiseXor() {
-       /*
-        // Oprator Precedence Problem
-        // ^, &, | should be prior to ==, <, >, <=, >=
-        a = 13
-        assert a ^ 10 == 7     // 0x0000000D ^ 0x0000000A = 0x000000007
-        assert a ^ 15 == 2     // 0x0000000D ^ 0x0000000F = 0x000000002
-        b = -13
-        assert b ^ 10 == -7    // 0xFFFFFFF3 ^ 0x0000000A = 0xFFFFFFF9
-        assert b ^ 15 == -4    // 0xFFFFFFF3 ^ 0x0000000F = 0xFFFFFFFC
-       */
-
-        a = 13
-        assert (a ^ 10) == 7     // 0x0000000D ^ 0x0000000A = 0x000000007
-        assert (a ^ 15) == 2     // 0x0000000D ^ 0x0000000F = 0x000000002
-        b = -13
-        assert (b ^ 10) == -7    // 0xFFFFFFF3 ^ 0x0000000A = 0xFFFFFFF9
-        assert (b ^ 15) == -4    // 0xFFFFFFF3 ^ 0x0000000F = 0xFFFFFFFC
-    }
-
-    void testBitwiseXorEqual() {
-        a = 13
-        a ^= 8
-        assert a == 5      // 0x0000000D ^ 0x00000008 = 0x000000005
-        a ^= 16
-        assert a == 21     // 0x00000005 ^ 0x00000010 = 0x000000015
-        b = -13
-        b ^= 8
-        assert b == -5     // 0xFFFFFFF3 ^ 0x00000008 = 0xFFFFFFFB
-        b ^= 16
-        assert b == -21    // 0xFFFFFFFB ^ 0x00000010 = 0xFFFFFFEB
-    }
-
-    void testBitwiseOrInClosure() {
-        c1 = { x, y | x | y }
-        assert c1(14, 5) == 15          // 0x0000000E | 0x00000005 = 0x0000000F
-        assert c1(0x0D, 0xFE) == 255    // 0x0000000D | 0x000000FE = 0x000000FF
-
-        c2 = { |x, y| x | y }
-        assert c2(14, 5) == 15          // 0x0000000E | 0x00000005 = 0x0000000F
-        assert c2(0x0D, 0xFE) == 255    // 0x0000000D | 0x000000FE = 0x000000FF
-    }
-
-    void testAmbiguityOfBitwiseOr() {
-        c1 = { x, y | x | y }
-        assert c1(14, 5) == 15          // 0x0000000E | 0x00000005 = 0x0000000F
-        assert c1(0x0D, 0xFE) == 255    // 0x0000000D | 0x000000FE = 0x000000FF
-
-        c2 = { |x, y| x | y }
-        assert c2(14, 5) == 15          // 0x0000000E | 0x00000005 = 0x0000000F
-        assert c2(0x0D, 0xFE) == 255    // 0x0000000D | 0x000000FE = 0x000000FF
-
-        x = 3
-        y = 5
-        c1 = { x | y }      // | is a pipe
-        c2 = { x & y }      // & is a bitAnd
-        c3 = { x ^ y }      // & is a bitXor
-        c11 = {
-             x | y          // | is a pipe
-        }
-        c12 = {
-             (x | y)        // | is a bitOr
-        }
-        c13 = {| x | y      // two |'s are pipes
-        }
-        c14 = {|| x | y     // last | is a bitOr
-        }
-
-        assert c1() == 5
-        assert c2() == 1
-        assert c3() == 6
-        assert c11() == 5
-        assert c12() == 7
-        assert c13() == 5
-        assert c14() == 7
-
-        x = 0x03
-
-        d1 = { x | x }      // | is a pipe
-        d2 = { x & x }      // & is a bitAnd
-        d3 = { x ^ x }      // & is a bitXor
-        d11 = {
-             x | x          // | is a pipe
-        }
-        d12 = {
-             (x | x)        // | is a bitOr
-        }
-        d13 = {| x | x      // two |'s are pipes
-        }
-        d14 = {|| x | x     // last | is a bitOr
-        }
-        assert d1(0xF0) == 0xF0
-        assert d2(0xF0) == 0x03
-        assert d3(0xF0) == 0
-        assert d11(0xF0) == 0xF0
-        assert d12(0xF0) == 0x03
-        assert d13(0xF0) == 0xF0
-        assert d14(0xF0) == 0x03
-    }
-
-    void testBitwiseNegation() {
-        assert ~1 == -2     // ~0x00000001 = 0xFFFFFFFE
-        assert ~-1 == 0     // ~0xFFFFFFFF = 0x00000000
-        assert ~~5 == 5     // ~~0x00000005 = ~0xFFFFFFFA = 0xFFFFFFF5
-        a = 13
-        assert ~a  == -14     // ~0x0000000D = 0xFFFFFFF2
-        assert ~~a  == 13     // ~~0x0000000D = ~0xFFFFFFF2 = 0x0000000D
-        assert -~a  == 14     // -~0x0000000D = -0xFFFFFFF2 = 0x0000000E
-    }
-
-    void testBitwiseNegationType() {
-        x = ~7
-        assert x.class == java.lang.Integer
-
-        y = ~"foo"
-        assert y.class == java.util.regex.Pattern
-
-        z = ~"${x}"
-        assert z.class == java.util.regex.Pattern
-    }
-
-    void testBitwiseNegationTypeCallFunction() {
-        // integer test
-        assert neg(2).class == java.lang.Integer
-        assert neg(2) instanceof java.lang.Integer
-        assert neg(2) == ~2
-
-        // long test
-        assert neg(2L).class == java.lang.Long
-        assert neg(2L) instanceof java.lang.Long
-        assert neg(2L) == ~2
-
-        // BigInteger test
-        assert neg(new java.math.BigInteger("2")).class == java.math.BigInteger
-        assert neg(new java.math.BigInteger("2")) instanceof java.math.BigInteger
-        assert neg(new java.math.BigInteger("2")) == ~2
-
-        // BigInteger test
-        assert neg(2G).class == java.math.BigInteger
-        assert neg(2G) instanceof java.math.BigInteger
-        assert neg(2G) == ~2
-
-        assert neg("foo").class == java.util.regex.Pattern
-        assert neg("foo") instanceof java.util.regex.Pattern
-    }
-
-    Object neg(n) {
-        if (n instanceof java.lang.Integer) {
-            return ~n
-        }
-        else if (n instanceof java.lang.Long) {
-            return ~n
-        }
-        else if (n instanceof java.math.BigInteger) {
-            return ~n
-        }
-        else {
-             return ~n.toString()
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/BooleanOperationTest.groovy b/groovy/modules/classic/src/test/groovy/BooleanOperationTest.groovy
deleted file mode 100644
index cdf5b32..0000000
--- a/groovy/modules/classic/src/test/groovy/BooleanOperationTest.groovy
+++ /dev/null
@@ -1,71 +0,0 @@
-class BooleanOperationTest extends GroovyTestCase {
-
-    void testComparisons() {
-        assert true
-        assert true != false
-        
-        x = true
-        
-        assert x
-        assert x == true
-        assert x != false
-        
-        x = false
-        
-        assert x == false
-        assert x != true
-        
-        assert !x
-        
-        y = false        
-        assert x == y
-        
-        y = true
-        assert x != y
-    }
-    
-    
-    void testIfBranch() {
-        x = false
-        r = false
-        
-        if ( x ) {
-            // ignore
-        }
-        else {
-            r = true
-        }
-
-        assert r
-        
-        x = true
-        r = false
-        
-        if ( x ) {
-            r = true
-        }
-        else {
-            // ignore
-        }
-        assert r
-        
-        if ( !x ) {
-            r = false
-        }
-        else {
-            r = true
-        }
-        
-        assert r
-    }
-
-
-	void testBooleanExpression() {
-	    x = 5
-	    value = x > 2
-	    assert value
-	    
-	    value = x < 2
-	    assert value == false
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/CallInnerClassCtorTest.groovy b/groovy/modules/classic/src/test/groovy/CallInnerClassCtorTest.groovy
deleted file mode 100644
index 4b5b220..0000000
--- a/groovy/modules/classic/src/test/groovy/CallInnerClassCtorTest.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-import groovy.OuterUser
-
-/**
- * Checks that it's possible to call inner classes constructor from groovy
- * @author Guillaume Laforge
- */
-class CallInnerClassCtorTest extends GroovyTestCase {
-
-    void testCallCtor() {
-        user = new groovy.OuterUser()
-        user.name = "Guillaume"
-        user.age = 27
-
-        assert user.name == "Guillaume"
-        assert user.age == 27
-    }
-
-    void testCallInnerCtor() {
-        address = new groovy.OuterUser.InnerAddress()
-        address.city = "Meudon"
-        address.zipcode = 92360
-
-        assert address.city == "Meudon"
-        assert address.zipcode == 92360
-    }
-
-    void testCallInnerInnerCtor() {
-        address = new groovy.OuterUser.InnerAddress.Street()
-        address.name = "rue de la paix"
-        address.number = 17
-
-        assert address.name == "rue de la paix"
-        assert address.number == 17
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/CastTest.groovy b/groovy/modules/classic/src/test/groovy/CastTest.groovy
deleted file mode 100644
index c351956..0000000
--- a/groovy/modules/classic/src/test/groovy/CastTest.groovy
+++ /dev/null
@@ -1,104 +0,0 @@
-class CastTest extends GroovyTestCase {
-
-    Short b = 1
-    
-    void testCast() {
-        x = (Short) 5
-
-        println("Cast Integer to ${x} with type ${x.class}")
-        
-        assert x.class == Short
-        
-        methodWithShort(x)
-    }
-    
-    void testImplicitCast() {
-        Short x = 6
-        
-        println("Created ${x} with type ${x.class}")
-        
-        assert x.class == Short : "Type is ${x.class}"
-        
-		methodWithShort(x)
-        
-        x = 7
-        
-        println("Updated ${x} with type ${x.class}")
-        
-        assert x.class == Short : "Type is ${x.class}"
-    }
-
-    void testImplicitCastOfField() {
-
-        println("Field is ${b} with type ${b.class}")
-        
-        assert b.class == Short : "Type is ${b.class}"
-        
-        b = 5
-        
-        println("Updated field ${b} with type ${b.class}")
- 
-        assert b.class == Short : "Type is ${b.class}"
-    }
-    
-    void testIntCast() {
-        i = (Integer) 'x'
-        
-        assert i instanceof Integer
-    }
-    
-    void testCharCompare() {
-        i = (Integer) 'x'
-        c = 'x'
-        
-        assert i == c
-        assert i =='x'
-        assert c == 'x'
-		assert i == i
-		assert c == c
-
-        assert 'x' == 'x'
-        assert 'x' == c
-        assert 'x' == i
-    }
-    
-    void testCharCast() {
-        c = (Character) 'x'
-        
-        assert c instanceof Character
-        
-        c = (Character)10
-        
-        assert c instanceof Character
-    }
-    
-    void methodWithShort(Short s) {
-        println("Called with ${s} with type ${s.class}")
-        assert s.class == Short
-    }
-    
-    void methodWithChar(Character x) {
-        println("Called with ${x} with type ${s.class}")
-        
-        text = "text"
-        idx = text.indexOf(x)
-        
-        assert idx == 2
-    }
-    // br
-    void testPrimitiveCasting() {
-        d = 1.23
-        i1 = (int)d
-        i2 = (Integer)d
-        assert i1.class.name == 'java.lang.Integer'
-        assert i2.class.name == 'java.lang.Integer'
-
-        ch = (char) i1
-        assert ch.class.name == 'java.lang.Character'
-
-        dd = (double)d
-        assert dd.class.name == 'java.lang.Double'
-
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/CategoryTest.groovy b/groovy/modules/classic/src/test/groovy/CategoryTest.groovy
deleted file mode 100644
index a1c76ff..0000000
--- a/groovy/modules/classic/src/test/groovy/CategoryTest.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-class CategoryTest extends GroovyTestCase {
-
-  void testCategories() {
-    use (StringCategory) {
-      assert "Sam".lower() == "sam";
-      use (IntegerCategory) {
-        assert "Sam".lower() == "sam";
-        assert 1.inc() == 2;
-      }
-        shouldFail(MissingMethodException, { 1.inc() });
-    }
-    shouldFail(MissingMethodException, { "Sam".lower() });
-  }
-
-  static void main(args) {
-    t = new CategoryTest();
-    t.testCategories();
-  }
-}
-
-class StringCategory {
-  static String lower(String string) {
-    return string.toLowerCase();
-  }
-}
-
-class IntegerCategory {
-  static Integer inc(Integer i) {
-    return i + 1;
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ChainedAssignment.groovy b/groovy/modules/classic/src/test/groovy/ChainedAssignment.groovy
deleted file mode 100644
index 25d0a98..0000000
--- a/groovy/modules/classic/src/test/groovy/ChainedAssignment.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-class ChainedAssignment extends GroovyTestCase {
-
-    dummy(v) {
-        print v
-    }
-
-    void testCompare() {
-        i = 123
-        s = "hello"
-
-        i1 = i2 = i;
-        assert i1 == 123
-        assert i2 == 123
-
-        dummy(s1 = s)
-        assert  s1 == "hello"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClassExpressionTest.groovy b/groovy/modules/classic/src/test/groovy/ClassExpressionTest.groovy
deleted file mode 100644
index bb9edfa..0000000
--- a/groovy/modules/classic/src/test/groovy/ClassExpressionTest.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-/** 
- * Tests the use of classes as variable expressions
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClassExpressionTest extends GroovyTestCase {
-
-    void testUseOfClass() {
-        x = String
-        
-        System.out.println("x: " + x)
-        
-        assert x != null
-
-        assert x.getName().endsWith('String')
-        assert x.name.endsWith('String')
-
-        x = Integer
-        
-        assert x != null
-        assert x.name.endsWith('Integer')
-        
-        x = GroovyTestCase
-        
-        assert x != null
-        assert x.name.endsWith('GroovyTestCase')
-        
-        x = ClassExpressionTest
-        
-        assert x != null
-
-        System.out.println("x: " + x)
-    }
-
-    void testClassPsuedoProperty() {
-
-        x = "cheese";
-
-        assert x.class != null
-
-        assert x.class == x.getClass();
-
-        System.err.println( "x.class: " + x.class );
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClassLoaderBug.groovy b/groovy/modules/classic/src/test/groovy/ClassLoaderBug.groovy
deleted file mode 100644
index 0c5cca2..0000000
--- a/groovy/modules/classic/src/test/groovy/ClassLoaderBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-class ClassLoaderBug extends GroovyTestCase {
-    
-    static void main(args) {
-        gst = new ClassLoaderBug();
-        gst.testWithOneVariable();
-    }
-
-    void testWithOneVariable() {
-        println("Called method")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClassTest.groovy b/groovy/modules/classic/src/test/groovy/ClassTest.groovy
deleted file mode 100644
index db65b48..0000000
--- a/groovy/modules/classic/src/test/groovy/ClassTest.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-class ClassTest extends GroovyTestCase {
-
-    void testClassExpression() {
-    	c = String.class
-    	println c
-    	assert c instanceof Class
-    	assert c.name == "java.lang.String" : c.name
-    	
-    	c = GroovyTestCase.class
-    	println c
-    	assert c instanceof Class
-    	assert c.name.endsWith("GroovyTestCase") : c.name
-    	
-    	c = ClassTest.class
-    	println c
-    	assert c instanceof Class
-    	assert c.name.endsWith("ClassTest") : c.name
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ClosureAsParamTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureAsParamTest.groovy
deleted file mode 100644
index b12ccaa..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureAsParamTest.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-/** 
- * Tests Closures in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureAsParamTest extends GroovyTestCase {
-
-    void testSimpleBlockCall() {
-        assertClosure({owner| println(owner) })
-    }
-  
-	assertClosure(Closure block) {
-	    assert block != null
-	    block.call("hello!")
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureCloneTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureCloneTest.groovy
deleted file mode 100644
index 06c1535..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureCloneTest.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureCloneTest extends GroovyTestCase {
-
-    void testCloneOfClosure() {
-		factor = 2        
-        closure = { it * factor }
-		
-		value = closure(5)
-		assert value == 10
-		
-		// now lets clone the closure
-		c2 = closure.clone()
-		assert c2 != null
-		
-		value = c2(6)
-		assert value == 12
-    }  
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureComparatorTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureComparatorTest.groovy
deleted file mode 100644
index 78e6db3..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureComparatorTest.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-/**
- * Tests for ClosureComparator
- *
- * @author Alexey Verkhovsky
- * @version $Revision$
- */
- class ClosureComparatorTest extends GroovyTestCase {
-
-
-  public void testClosureComparatorForGroovyObjects() {
-
-    comparator = new ClosureComparator() {
-      | one, another|
-      one.greaterThan(another)
-    }
-
-    one = new ComparableFoo(5)
-    another = new ComparableFoo(-5)
-
-    assertEquals(10L, comparator.compare(one, another))
-    assertEquals(0L, comparator.compare(one, one))
-    assertEquals(-10L, comparator.compare(another, one))
-
-  }
-
-  public void testClosureComparatorForNumericTypes() {
-
-    comparator = new ClosureComparator() {
-      | one, another|
-      one - another
-    }
-
-    assertEquals(1L, comparator.compare(Integer.MAX_VALUE, Integer.MAX_VALUE-1))
-    assertEquals(0L, comparator.compare(Double.MIN_VALUE, Double.MIN_VALUE))
-    assertEquals(-1L, comparator.compare(Long.MIN_VALUE, Long.MIN_VALUE+1))
-  }
-
-}
-
-class ComparableFoo {
-  long value
-
-  public ComparableFoo(long theValue) {
-    this.value = theValue
-  }
-
-  greaterThan(anotherFoo) {
-    return (this.value - anotherFoo.value)
-  }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/ClosureCurryTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureCurryTest.groovy
deleted file mode 100644
index ec2c39b..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureCurryTest.groovy
+++ /dev/null
@@ -1,83 +0,0 @@
-/** 
- * @author Hallvard Tr¾tteberg
- * @version $Revision$
- */
-class ClosureCurryTest extends GroovyTestCase {
-
-    void testCurry() {
-		clos1 = {s1, s2 | s1 + s2}
-		clos2 = clos1.curry("hi")
-		value = clos2("there") 
-		assert value == "hithere"
-		
-		clos3 = {s1, s2, s3 | s1 + s2 + s3}
-		clos4 = clos3.curry('a')
-		clos5 = clos4.curry('b')
-		clos6 = clos4.curry('x')
-		clos7 = clos4.curry('f', 'g')
-		value = clos5('c')
-		assert value == "abc"
-		value = clos6('c')
-		assert value == "axc"
-		value = clos4('y', 'z')
-		assert value == "ayz"
-		value = clos7()
-		assert value == "afg"
-		
-		clos3 = {s1, s2, s3 | s1 + s2 + s3}.asWritable()
-		clos4 = clos3.curry('a')
-		clos5 = clos4.curry('b')
-		clos6 = clos4.curry('x')
-		clos7 = clos4.curry('f', 'g')
-		value = clos5('c')
-		assert value == "abc"
-		value = clos6('c')
-		assert value == "axc"
-		value = clos4('y', 'z')
-		assert value == "ayz"
-		value = clos7()
-		assert value == "afg"
-		
-		clos3 = {s1, s2, s3 | s1 + s2 + s3}
-		clos4 = clos3.curry('a').asWritable()
-		clos5 = clos4.curry('b').asWritable()
-		clos6 = clos4.curry('x').asWritable()
-		clos7 = clos4.curry('f', 'g').asWritable()
-		value = clos5('c')
-		assert value == "abc"
-		value = clos6('c')
-		assert value == "axc"
-		value = clos4('y', 'z')
-		assert value == "ayz"
-		value = clos7()
-		assert value == "afg"
-		
-		clos3 = {s1, s2, s3 | s1 + s2 + s3}
-		clos4 = clos3.curry('a').clone()
-		clos5 = clos4.curry('b').clone()
-		clos6 = clos4.curry('x').clone()
-		clos7 = clos4.curry('f', 'g').clone()
-		value = clos5('c')
-		assert value == "abc"
-		value = clos6('c')
-		assert value == "axc"
-		value = clos4('y', 'z')
-		assert value == "ayz"
-		value = clos7()
-		assert value == "afg"
-		
-		clos3 = {s1, s2, s3 | s1 + s2 + s3}
-		clos4 = clos3.curry('a').asWritable().clone()
-		clos5 = clos4.curry('b').asWritable().clone()
-		clos6 = clos4.curry('x').asWritable().clone()
-		clos7 = clos4.curry('f', 'g').asWritable().clone()
-		value = clos5('c')
-		assert value == "abc"
-		value = clos6('c')
-		assert value == "axc"
-		value = clos4('y', 'z')
-		assert value == "ayz"
-		value = clos7()
-		assert value == "afg"
-    }  
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureInClosureTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureInClosureTest.groovy
deleted file mode 100644
index 68c3deb..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureInClosureTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Bug illustrating the nested closures variable scope visibility issue.
- * l.each is ClosureInClosureBug$1 and it.each is ClosureInClosureBug$2
- * The variable text is not visible from ClosureInClosureBug$2.
- * Indeed, a closure can only see the variable defined outside this closure (one level up)
- * but cannot see what's in the second level.
- *
- * In order to make the test work, do not forget to uncomment the line "println(text)"
- *
- * @authour Guillaume Laforge
- */
-class ClosureInClosureTest extends GroovyTestCase
-{
-	void testInvisibleVariable()
-	{
-		text = "test "
-
-		l = [1..11, 2..12, 3..13, 4..14]
-
-		l.each{
-			it.each{
-			    println(text)
-			}
-		}
-	}
-
-	static void main(args)
-	{
-		bug = new ClosureInClosureTest()
-		bug.testInvisibleVariable()
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ClosureInStaticMethodTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureInStaticMethodTest.groovy
deleted file mode 100644
index 97a44f8..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureInStaticMethodTest.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureInStaticMethodTest extends GroovyTestCase {
-
-    void testClosureInStaticMethod() {
-        closure = closureInStaticMethod()
-        assertClosure(closure)    
-    }
-
-    void testMethodClosureInStaticMethod() {
-        closure = methodClosureInStaticMethod()
-        assertClosure(closure)    
-    }
-    
-    static closureInStaticMethod() {
-        return { println(it) }
-    }
-
-    static methodClosureInStaticMethod() {
-        System.out.println
-    }
-    
-    static assertClosure(Closure block) {
-        assert block != null
-        block.call("hello!")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureListenerTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureListenerTest.groovy
deleted file mode 100644
index 204e687..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureListenerTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-import javax.swing.JButton
-import java.util.Arrays
-
-/**
- * @version $Revision$
- */
-class ClosureListenerTest extends GroovyTestCase {
-     
-    void testAddingAndRemovingAClosureListener() {
-        value = System.getProperty('java.awt.headless')
-        println("Value of java.awt.headless = ${value}")
-        
-        b = new JButton("foo")
-        b.actionPerformed = { println("Found ${it}") }
-
-        size = b.actionListeners.size()
-        assert size == 1
-        
-        l = b.actionListeners[0]
-		code = l.hashCode()
-        
-        println("listener: ${l} with hashCode code ${code}")
-        
-        assert l.toString() != "null"
-        
-        assert l.equals(b) == false
-        assert l.equals(l)
-        
-        assert l.hashCode() != 0
-        
-        b.removeActionListener(l)
-        
-        println(b.actionListeners)
-        
-        size = b.actionListeners.size()
-        assert size == 0
-    }
-    
-    void testGettingAListenerProperty() {
-    	b = new JButton("foo")
-    	foo = b.actionPerformed
-    	assert foo == null
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ClosureMethodCallTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureMethodCallTest.groovy
deleted file mode 100644
index f329fc2..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureMethodCallTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureMethodCallTest extends GroovyTestCase {
-
-    void testCallingClosureWithMultipleArguments() {
-        closure = { a, b | foo = "hello ${a} and ${b}".toString() }                
-        
-        closure("james", "bob")
-
-        assert foo == "hello james and bob"
-
-        closure.call("sam", "james")
-
-        assert foo == "hello sam and james"
-    }
-    
-    
-    void testSystemOutPrintlnAsAClosure() {
-        closure = System.out.println
-        closure("Hello world")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureMethodTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureMethodTest.groovy
deleted file mode 100644
index f3ffe9c..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureMethodTest.groovy
+++ /dev/null
@@ -1,229 +0,0 @@
-import java.io.File
-
-/** 
- * Tests the various Closure methods in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureMethodTest extends GroovyTestCase {
-
-    void testListCollect() {
-        list = [1, 2, 3, 4]
-        answer = list.collect( {item| return item * 2 } )
-
-        assert answer.size() == 4
-        
-        expected = [2, 4, 6, 8]
-        assert answer == expected
-    }
-
-    void testMapCollect() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.collect( {e| return e.key + e.value } )
-		
-		// lest sort the results since maps are in hash code order
-		answer = answer.sort()
-		
-        assert answer.size() == 4
-        assert answer == [3, 6, 9, 12]
-        assert answer.get(0) == 3
-        assert answer.get(1) == 6
-        assert answer.get(2) == 9
-        assert answer.get(3) == 12
-    }
-
-    void testListFind() {
-        list = ["a", "b", "c"]
-        answer = list.find( {item| return item == "b" })
-        assert answer == "b"
-        
-        answer = list.find{item| return item == "z" }
-        assert answer == null
-    }
-    
-    void testMapFind() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.find( {entry| return entry.value == 6 })
-        assert answer != null
-        assert answer.key == 3
-        assert answer.value == 6
-        
-        answer = map.find{entry| return entry.value == 0 }
-        assert answer == null
-    }
-
-    void testListFindAll() {
-        list = [20, 5, 40, 2]
-        answer = list.findAll( {item| return item < 10 } )
-
-        assert answer.size() == 2
-        assert answer == [5, 2]
-    }
-    
-    void testMapFindAll() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.findAll( {entry| return entry.value > 5 })
-
-        assert answer.size() == 2
-        
-        keys = answer.collect( {entry| return entry.key })
-        values = answer.collect {entry| return entry.value }
-
-        println("keys " + keys + " values " + values)
-		
-        // maps are in hash order so lets sort the results       
-        keys.sort() 
-        values.sort() 
-        
-        assert keys == [3, 4]
-        assert values == [6, 8]
-    }
-
-    void testListEach() {
-        count = 0
-
-        list = [1, 2, 3, 4]
-        list.each({item| count = count + item })
-		
-        assert count == 10
-
-        list.each{item| count = count + item }
-		
-        assert count == 20
-    }
-
-    void testMapEach() {
-        count = 0
-
-        map = [1:2, 2:4, 3:6, 4:8]
-        map.each({e| count = count + e.value })
-
-        assert count == 20
-        
-        map.each({e| count = count + e.value + e.key })
-		
-        assert count == 50
-    }
-    
-    void testMapEachWith2Params() {
-        count = 0
-
-        map = [1:2, 2:4, 3:6, 4:8]
-        map.each {key, value | count = count + value }
-
-        assert count == 20
-        
-        map.each {key, value | count = count + value + key }
-        
-        assert count == 50
-    }
-    
-    void testListEvery() {
-        assert [1, 2, 3, 4].every {i| return i < 5 }
-        assert [1, 2, 7, 4].every {i| return i < 5 } == false
-    }
-
-    void testListAny() {
-        assert [1, 2, 3, 4].any {i| return i < 5 }
-        assert [1, 2, 3, 4].any {i| return i > 3 }
-        assert [1, 2, 3, 4].any {i| return i > 5 } == false
-    }
-    
-    void testJoin() {
-        value = [1, 2, 3].join('-')
-        assert value == "1-2-3"
-    }
-    
-    void testListReverse() {
-        value = [1, 2, 3, 4].reverse()
-        assert value == [4, 3, 2, 1]
-    }
-    
-    void testListInject() {
-        value = [1, 2, 3].inject('counting: ') { str, item | str + item }
-        assert value == "counting: 123"
-
-        value = [1, 2, 3].inject(0) { c, item | c + item }
-        assert value == 6
-    }
-    
-    void testDump() {
-        text = dump()
-        println("Dumping object ${text}")
-        assert text != null && text.startsWith("<")
-    }
-
-    void testInspect() {
-        text = [1, 2, 'three'].inspect()
-        println("Inspecting ${text}")
-        assert text == '[1, 2, "three"]'
-    }
-
-    void testEachLine() {
-        file = new File("src/test/groovy/Bar.groovy")
-        if(file.exists() == false)
-            file = new File("Bar.groovy")
-        
-        println("Contents of file: " + file)
-        
-        file.eachLine { line | println(line) }
-        
-        println("")
-    }
-    
-    void testForEachLine() {
-        file = new File("src/test/groovy/Bar.groovy")
-        if(file.exists() == false)
-            file = new File("Bar.groovy")
-        
-        println("For loop to display contents of file: " + file)
-        
-        for (line in file) { println(line) }
-        
-        println("")
-    }
-    
-    void testReadLines() {
-        file = new File("src/test/groovy/Bar.groovy")
-        if(file.exists() == false)
-            file = new File("Bar.groovy")
-
-		lines = file.readLines()
-		
-		assert lines != null
-		assert lines.size() > 0
-
-        println("File has: " + lines.size() + " line(s)")
-    }
-    
-    void testEachFile() {
-        file = new File("src/test/groovy")
-        if(!file.exists())
-            file = new File(".")
-        
-        println("Closure loop to display contents of dir: " + file)
-        
-        file.eachFile { f | println(f.getName()) }
-        
-        println("")
-    }
-    
-    void testTokenize() {
-        text = "hello-there-how-are-you"
-        
-        answer = []
-        for (i in text.tokenize('-')) {
-            answer.add(i)
-        }
-        assert answer == ['hello', 'there', 'how', 'are', 'you']
-    }
-    
-    void testUpto() {
-        answer = []
-        
-        1.upto(5) { answer.add(it) }
-        
-        assert answer == [1, 2, 3, 4, 5]
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureReturnTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureReturnTest.groovy
deleted file mode 100644
index c16b54e..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureReturnTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-/** 
- * Tests Closures in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureReturnTest extends GroovyTestCase {
-
-    void testReturnValues() {
-        block = {x| return x > 5}
-        
-        value = block.call(10)
-        assert value
-	    
-        value = block.call(3)
-        assert value == false
-    }
-	
-    void testReturnValueUsingFunction() {
-        block = {x| return someFunction(x) }
-        
-        value = block.call(10)
-        assert value
-
-        value = block.call(3)
-        assert value == false
-    }
-    
-    someFunction(x) {
-        return x > 5
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy
deleted file mode 100644
index fcfde1f..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-class ClosureReturnWithoutReturnStatementTest extends GroovyTestCase {
-
-    void testReturnValues() {
-        block = {x| x > 5}
-        
-        value = block.call(10)
-        assert value
-	    
-        value = block.call(3)
-        assert value == false
-    }
-	
-    void testReturnValueUsingFunction() {
-        block = {x| someFunction(x) }
-        
-        value = block.call(10)
-        assert value
-
-        value = block.call(3)
-        assert value == false
-    }
-    
-    someFunction(x) {
-        x > 5
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureSugarTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureSugarTest.groovy
deleted file mode 100644
index a5aef07..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureSugarTest.groovy
+++ /dev/null
@@ -1,38 +0,0 @@
-class ClosureSugarTest
-	extends GroovyTestCase
-{
-    property count;
-
-    void testClosureSugar()
-    {
-        count = 11;
-
-        sugar {
-             count = 20;
-        }
-
-        assert count == 20;
-    }
-
-    void testMixedClosureSugar()
-    {
-        count = 11;
-
-        mixedSugar (5){a|
-             count = count + a;
-        }
-
-        assert count == 16;
-
-    }
-
-    mixedSugar(incrBy, Closure closure)
-    {
-        closure.call( incrBy ); 
-    }
-
-    sugar(Closure closure)
-    {
-        closure.call();
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureTest.groovy
deleted file mode 100644
index 652e61e..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureTest.groovy
+++ /dev/null
@@ -1,119 +0,0 @@
-/** 
- * Tests Closures in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureTest extends GroovyTestCase {
-
-	property count
-
-    void testSimpleBlockCall() {
-        count = 0
-
-        block = {owner| owner.incrementCallCount() }
-        
-        assertClosure(block)
-        assert count == 1
-
-        assertClosure({owner| owner.incrementCallCount() })
-        assert count == 2
-    }
-
-    void testVariableLengthParameterList() {
-
-        c1 = {| Object[] args | args.each{count += it}}
-        
-        count = 0
-        c1(1, 2, 3)
-        assert count == 6
-        
-        count = 0
-        c1(1)
-        assert count == 1
-         
-        count = 0
-        c1(new Object[]{1, 2, 3})
-        assert count == 6
-
-        c2 = {| a, Object[] args | count += a; args.each{count += it}}
-        
-        count = 0
-        c2(1, 2, 3)
-        assert count == 6
-        
-        count = 0
-        c2(1)
-        assert count == 1
-         
-        count = 0
-        c2(1, new Object[]{2, 3})
-        assert count == 6
-    }
-
-    void testBlockAsParameter() {
-        count = 0
-        
-        callBlock(5, {owner| owner.incrementCallCount() })
-        assert count == 6
-
-        callBlock2(5, {owner| owner.incrementCallCount() })
-        assert count == 12
-    }
-  
-    void testMethodClosure() {
-        block = this.incrementCallCount
-
-        count = 0
-  	    
-        block.call()
-  	    
-        assert count == 1
-  	        
-        block = System.out.println
-  	    
-        block.call("I just invoked a closure!")
-    }
-  
-    incrementCallCount() {
-        //System.out.println("invoked increment method!")
-        count = count + 1
-    }
-	
-    assertClosure(Closure block) {
-        assert block != null
-        block.call(this)
-    }
-	
-    protected callBlock(Integer num, Closure block) {
-        for ( i in 0..num ) {
-            block.call(this)
-        }
-    }
-
-    protected callBlock2(num, block) {
-        for ( i in 0..num ) {
-            block.call(this)
-        }
-    }
-
-
-    int numAgents = 4
-    boolean testDone = false
-
-    void testIntFieldAccess() {
-        agents = new ArrayList();
-        numAgents.times {
-            TinyAgent btn = new TinyAgent()
-            testDone = true
-            btn.x = numAgents
-            agents.add(btn)
-        }
-        assert agents.size() == numAgents
-    }
-}
-
-public class TinyAgent {
-    int x
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/ClosureUsingOuterVariablesTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureUsingOuterVariablesTest.groovy
deleted file mode 100644
index 69db178..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureUsingOuterVariablesTest.groovy
+++ /dev/null
@@ -1,66 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureUsingOuterVariablesTest extends GroovyTestCase {
-    
-    void testUseOfOuterVariable() {
-        
-        x = 123
-        y = "hello"
-        
-        closure = { i | 
-            println("x ${x}")
-            println("y ${y}")
-            println("i ${i}")
-                
-            assert x == 123
-            assert y == 'hello'
-        }
-        closure.call(321)
-	}
-
-     void testInnerVariablesVisibleInOuterScope() {
-        
-        closure = { z = 456 } 
-        closure.call(321)
-        
-        assert z == 456
-    }
-    
-    void testModifyingOuterVariable() {
-        
-        m = 123
-        
-        closure = { m = 456 } 
-        closure.call(321)
-        
-        assert m == 456
-    }
-    
-    void testCounting() {
-        sum = 0
-
-        [1, 2, 3, 4].each { sum = sum + it }
-
-        assert sum == 10
-    }
-    
-    void testExampleUseOfClosureScopes() {
-        a = 123
-		
-        c = { b = a + it }
-        c(5)
-        
-        println(b)
-        assert b == a + 5
-    }
-
-    void testExampleUseOfClosureScopesUsingEach() {
-        a = 123
-        
-        [5].each { b = a + it }
-
-        assert b == a + 5
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ClosureWithDefaultParamTest.groovy b/groovy/modules/classic/src/test/groovy/ClosureWithDefaultParamTest.groovy
deleted file mode 100644
index bfd47bb..0000000
--- a/groovy/modules/classic/src/test/groovy/ClosureWithDefaultParamTest.groovy
+++ /dev/null
@@ -1,156 +0,0 @@
-import java.io.File
-
-/** 
- * Demonstrates the use of the default named parameter in a closure
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ClosureWithDefaultParamTest extends GroovyTestCase {
-
-    void testListCollect() {
-        list = [1, 2, 3, 4]
-        answer = list.collect { it * 2 }
-
-        assert answer.size() == 4
-        
-        expected = [2, 4, 6, 8]
-        assert answer == expected
-    }
-
-    void testMapCollect() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.collect { it.key + it.value }
-		
-		// lest sort the results since maps are in hash code order
-		answer = answer.sort()
-		
-        assert answer.size() == 4
-        assert answer == [3, 6, 9, 12]
-        assert answer.get(0) == 3
-        assert answer.get(1) == 6
-        assert answer.get(2) == 9
-        assert answer.get(3) == 12
-    }
-
-    void testListFind() {
-        list = ["a", "b", "c"]
-        answer = list.find {it == "b" }
-        assert answer == "b"
-        
-        answer = list.find {it == "z" }
-        assert answer == null
-    }
-    
-    void testMapFind() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.find {it.value == 6 }
-        assert answer != null
-        assert answer.key == 3
-        assert answer.value == 6
-        
-        answer = map.find {it.value == 0 }
-        assert answer == null
-    }
-
-    void testListFindAll() {
-        list = [20, 5, 40, 2]
-        answer = list.findAll {it < 10 }
-
-        assert answer.size() == 2
-        assert answer == [5, 2]
-    }
-    
-    void testMapFindAll() {
-        map = [1:2, 2:4, 3:6, 4:8]
-        answer = map.findAll {it.value > 5 }
-
-        assert answer.size() == 2
-        
-        keys = answer.collect {it.key }
-        values = answer.collect {it.value }
-
-        System.out.println("keys " + keys + " values " + values)
-		
-        // maps are in hash order so lets sort the results       
-        keys.sort() 
-        values.sort() 
-        
-        assert keys == [3, 4]
-        assert values == [6, 8]
-    }
-
-    void testListEach() {
-        count = 0
-
-        list = [1, 2, 3, 4]
-        list.each { count = count + it }
-		
-        assert count == 10
-
-        list.each { count = count + it }
-		
-        assert count == 20
-    }
-
-    void testMapEach() {
-        count = 0
-
-        map = [1:2, 2:4, 3:6, 4:8]
-        map.each { count = count + it.value }
-
-        assert count == 20
-    }
-    
-    void testListEvery() {
-        assert [1, 2, 3, 4].every { it < 5 }
-        assert [1, 2, 7, 4].every { it < 5 } == false
-    }
-
-    void testListAny() {
-        assert [1, 2, 3, 4].any { it < 5 }
-        assert [1, 2, 3, 4].any { it > 3 }
-        assert [1, 2, 3, 4].any { it > 5 } == false
-    }
-    
-    void testJoin() {
-        value = [1, 2, 3].join('-')
-        assert value == "1-2-3"
-    }
-    
-    void testListReverse() {
-        value = [1, 2, 3, 4].reverse()
-        assert value == [4, 3, 2, 1]
-    }
-    
-    void testEachLine() {
-        file = new File("src/test/groovy/Bar.groovy")
-        
-        System.out.println("Contents of file: " + file)
-        
-        file.eachLine { println(it) }
-        
-        println("")
-    }
-    
-    void testReadLines() {
-        file = new File("src/test/groovy/Bar.groovy")
-
-		lines = file.readLines()
-		
-		assert lines != null
-		assert lines.size() > 0
-
-        System.out.println("File has number of lines: " + lines.size())
-    }
-    
-    void testEachFile() {
-        file = new File("src/test/groovy")
-        
-        System.out.println("Contents of dir: " + file)
-        
-        file.eachFile { println(it.getName()) }
-        
-        println("")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/CompareToTest.groovy b/groovy/modules/classic/src/test/groovy/CompareToTest.groovy
deleted file mode 100644
index 0f867ab..0000000
--- a/groovy/modules/classic/src/test/groovy/CompareToTest.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-class CompareToTest extends GroovyTestCase {
-
-    void testCompareTo() {
-
-        a = 12
-        b = 20
-        c = 30
-        
-        result = a <=> b
-        assert result < 0
-        
-        result = a <=> 12
-        assert result == 0
-        
-        result = c <=> b
-        assert result > 0
-        
-        assert a <=> b < 0
-        assert a <=> 12 == 0
-        assert c <=> b > 0
-    }
-    
-    void testNullCompares() {
-    
-    	a = 123
-    	b = null
-    	
-    	result = a <=> b
-    	assert result > 0
-    	
-    	result = b <=> a
-    	assert result < 0
-    	
-    	result = b <=> null
-    	assert result == 0
-   	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/CompareTypesTest.groovy b/groovy/modules/classic/src/test/groovy/CompareTypesTest.groovy
deleted file mode 100644
index 8218b8e..0000000
--- a/groovy/modules/classic/src/test/groovy/CompareTypesTest.groovy
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * @version $Revision$
- */
-class NumberTest extends GroovyTestCase { 
-    void testCompareByteToInt() { 
-        Byte a = 12
-        Integer b = 10
-        
-        assert a instanceof Byte
-        assert b instanceof Integer
-        
-        assert a > b
-    } 
-    
-    void testCompareByteToDouble() { 
-        Byte a = 12
-        Double b = 10
-        
-        assert a instanceof Byte
-        assert b instanceof Double
-        
-        assert a > b
-    } 
-     
-    void testCompareLongToDouble() { 
-        Long a = 12
-        Double b = 10
-        
-        assert a instanceof Long
-        assert b instanceof Double
-        
-        assert a > b
-    } 
-     
-    void testCompareLongToByte() { 
-        Long a = 12
-        Byte b = 10
-        
-        assert a instanceof Long
-        assert b instanceof Byte
-        
-        assert a > b
-    } 
-     
-    void testCompareIntegerToByte() { 
-        Integer a = 12
-        Byte b = 10
-        
-        assert a instanceof Integer
-        assert b instanceof Byte
-        
-        assert a > b
-    } 
-} 
-
-
diff --git a/groovy/modules/classic/src/test/groovy/CompilerErrorTest.groovy b/groovy/modules/classic/src/test/groovy/CompilerErrorTest.groovy
deleted file mode 100644
index e3b8c08..0000000
--- a/groovy/modules/classic/src/test/groovy/CompilerErrorTest.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-class CompilerErrorTest extends GroovyTestCase {
-
-    void testBadMethodName() {
-
-        shouldFail {
-            shell = new GroovyShell()
-            text = 'println ${name}'
-            println "About to test script ${text}"
-            shell.evaluate text
-        }
-    }
-
-    void testBadPropertyName() {
-
-        shouldFail {
-            shell = new GroovyShell()
-            shell.evaluate """
-                x = [:]
-                x.$foo = 123
-            """
-        }
-    }
-
-    void testBadVariableName() {
-
-        shouldFail {
-            shell = new GroovyShell()
-            shell.evaluate """
-                $x = 123
-            """
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/DateTest.groovy b/groovy/modules/classic/src/test/groovy/DateTest.groovy
deleted file mode 100644
index 561a2f8..0000000
--- a/groovy/modules/classic/src/test/groovy/DateTest.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-import java.util.Date
-
-class DateTest extends GroovyTestCase {
-  
-    void testNextPrevious() {
-        x = new Date()
-        y = x + 2
-        
-        assert x < y
-        x++
-        y--
-        
-        assert x == y
-        x += 2
-        assert x > y
-        
-        println "have dates ${x} and ${y}"
-	}
-    
-    void testDateRange() {
-        
-        today = new Date()
-        later = today + 3
-        
-        expected = [today, today + 1, today + 2, today + 3]
-        
-        list = []
-        for (d in today..later) {
-            list << d
-        }
-        assert list == expected
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/DefaultParamClosureTest.groovy b/groovy/modules/classic/src/test/groovy/DefaultParamClosureTest.groovy
deleted file mode 100644
index 10f8ddb..0000000
--- a/groovy/modules/classic/src/test/groovy/DefaultParamClosureTest.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-class DefaultParamClosureTest extends GroovyTestCase {
-
-    void testDefaultParameters() {
-    /** @todo get default parameters working for closures 
-		doSomething = { | a, b = 'defB', c = 'defC' |
-			println "Called with a: ${a}, b ${b}, c ${c}"
-			
-			return a + "-" + b + "-" + c
-		}
-	
-    	value = doSomething("X", "Y", "Z")
-    	assert value == "X-Y-Z"
-    	
-    	value = doSomething("X", "Y")
-    	assert value == "X-Y-defC"
-    	
-    	value = doSomething("X")
-    	assert value == "X-defB-defC"
-    	
-    	shouldFail { doSomething() }
-     */
-    }
-
-    void testDefaultTypedParameters() {
-		/** @todo parser to handle typed parameters 
-		
-		doTypedSomething = { | String a = 'defA', String b = 'defB', String c = 'defC' |
-			println "Called typed method with a: ${a}, b ${b}, c ${c}"
-			
-			return a + "-" + b + "-" + c
-		}
-	
-    	value = doTypedSomething("X", "Y", "Z")
-    	assert value == "X-Y-Z"
-    	
-    	value = doTypedSomething("X", "Y")
-    	assert value == "X-Y-defC"
-    	
-    	value = doTypedSomething("X")
-    	assert value == "X-defB-defC"
-    	
-    	value = doTypedSomething()
-    	assert value == "defA-defB-defC"
-	*/
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/DefaultParamTest.groovy b/groovy/modules/classic/src/test/groovy/DefaultParamTest.groovy
deleted file mode 100644
index 83e5ecb..0000000
--- a/groovy/modules/classic/src/test/groovy/DefaultParamTest.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-class DefaultParamTest extends GroovyTestCase {
-
-    void testDefaultParameters() {
-    
-    	value = doSomething("X", "Y", "Z")
-    	assert value == "X-Y-Z"
-    	
-    	value = doSomething("X", "Y")
-    	assert value == "X-Y-defC"
-    	
-    	value = doSomething("X")
-    	assert value == "X-defB-defC"
-    	
-    	shouldFail { doSomething() }
-    }
-
-    void testDefaultTypedParameters() {
-    	value = doTypedSomething("X", "Y", "Z")
-    	assert value == "X-Y-Z"
-    	
-    	value = doTypedSomething("X", "Y")
-    	assert value == "X-Y-defC"
-    	
-    	value = doTypedSomething("X")
-    	assert value == "X-defB-defC"
-    	
-    	value = doTypedSomething()
-    	assert value == "defA-defB-defC"
-    }
-
-
-	doSomething(a, b = 'defB', c = 'defC') {
-		println "Called with a: ${a}, b ${b}, c ${c}"
-		
-		return a + "-" + b + "-" + c
-	}
-
-	String doTypedSomething(String a = 'defA', String b = 'defB', String c = 'defC') {
-		println "Called typed method with a: ${a}, b ${b}, c ${c}"
-		
-		return a + "-" + b + "-" + c
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/DollarEscapingTest.groovy b/groovy/modules/classic/src/test/groovy/DollarEscapingTest.groovy
deleted file mode 100644
index 5f946f3..0000000
--- a/groovy/modules/classic/src/test/groovy/DollarEscapingTest.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-class DollarEscapingTest extends GroovyTestCase {
-
-    void testEscaping() {
-        foo = "hello \${foo}"
-        
-        assert foo instanceof String
-        
-        c = foo.count("$")
-        
-        assert c == 1 : foo
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/DoubleOperationTest.groovy b/groovy/modules/classic/src/test/groovy/DoubleOperationTest.groovy
deleted file mode 100644
index 0b0881b..0000000
--- a/groovy/modules/classic/src/test/groovy/DoubleOperationTest.groovy
+++ /dev/null
@@ -1,80 +0,0 @@
-class DoubleOperationTest extends GroovyTestCase {
-
-    property x
-    property y
-    
-    void testPlus() {
-        x = 2.1 + 2.1
-        assert x == 4.2
-        
-        x = 3 + 2.2
-        assert x == 5.2
-        
-        x = 2.2 + 4
-        assert x == 6.2
-        
-        y = x + 1
-        assert y == 7.2       
-        	
-        z = y + x + 1 + 2
-        assert z == 16.4
-    }
-    
-    void testMinus() {
-        x = 6 - 2.2
-        assert x == 3.8
-        
-        x = 5.8 - 2
-        assert x == 3.8
-        
-        y = x - 1
-		assert y == 2.8        
-    }
-    
-    void testMultiply() {
-        x = 3 * 2.0
-        assert x == 6.0
-        
-        x = 3.0 * 2
-        assert x == 6.0
-        
-        x = 3.0 * 2.0
-        assert x == 6.0
-        y = x * 2
-        assert y == 12.0        
-    }
-    
-    void testDivide() {
-        x = 80.0 / 4
-        assert x == 20.0 : "x = " + x
-        
-        x = 80 / 4.0
-        assert x == 20.0 : "x = " + x
-        
-        y = x / 2
-        assert y == 10.0 : "y = " + y     
-    }
-
-    void testMethodNotFound() {
-    	try {
-    		println( Math.sin("foo", 7) );
-	    	fail("Should catch a MissingMethodException");
-    	} catch (MissingMethodException mme) {
-    	}
-    }
-        
-    void testCoerce() {
-    	xyz = Math.sin(1.1);
-    	assert xyz instanceof Double;
-    	assert xyz == Math.sin(1.1D);
-    	
-        //Note that (7.3F).doubleValue() != 7.3D
-    	x = Math.sin(7.3F);
-    	assert x instanceof Double;
-    	assert x == Math.sin((7.3F).doubleValue());
-
-    	x = Math.sin(7);
-    	assert x instanceof Double;
-    	assert x == Math.sin(7.0D);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/DummyInterface.java b/groovy/modules/classic/src/test/groovy/DummyInterface.java
deleted file mode 100644
index 969ddc8..0000000
--- a/groovy/modules/classic/src/test/groovy/DummyInterface.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package groovy;
-
-public interface DummyInterface {
-
-    public void methodWithArrayParam(String[] args);
-}
diff --git a/groovy/modules/classic/src/test/groovy/DummyMethods.java b/groovy/modules/classic/src/test/groovy/DummyMethods.java
deleted file mode 100644
index 8c49769..0000000
--- a/groovy/modules/classic/src/test/groovy/DummyMethods.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * methods with specific parameters (e.g. primitives)
- * for use with groovy tests
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-package groovy;
-
-public class DummyMethods {
-    public String foo(String a, float b, float c) {
-    	return "float args";
-    }
-    public String foo(String a, int b, int c) {
-    	return "int args";
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/EscapedUnicodeTest.groovy b/groovy/modules/classic/src/test/groovy/EscapedUnicodeTest.groovy
deleted file mode 100644
index 4dbd6cb..0000000
--- a/groovy/modules/classic/src/test/groovy/EscapedUnicodeTest.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-\u0063\u006c\u0061\u0073\u0073\u0020\u0045\u0073\u0063\u0061\u0070\u0065\u0064\u0055\u006e\u0069\u0063\u006f\u0064\u0065\u0054\u0065\u0073\u0074\u0020\u0065\u0078\u0074\u0065\u006e\u0064\u0073\u0020\u0047\u0072\u006f\u006f\u0076\u0079\u0054\u0065\u0073\u0074\u0043\u0061\u0073\u0065\u0020\u007b
-
-\u0020\u0020\u0020\u0020\u0076\u006f\u0069\u0064\u0020\u0074\u0065\u0073\u0074\u0041\u0073\u0073\u0065\u0072\u0074\u0028\u0029\u0020\u007b
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0078\u0020\u003d\u0020\u0022\u0061\u0062\u0063\u0022
-
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0078\u0020\u0021\u003d\u0020\u0022\u0066\u006f\u006f\u0022
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0078\u0020\u0021\u003d\u0020\u0020\u006e\u0075\u006c\u006c
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0078\u0020\u0021\u003d\u0020\u0022\u0064\u0065\u0066\u0022
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0078\u0020\u003d\u003d\u0020\u0022\u0061\u0062\u0063\u0022
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0078\u002e\u0065\u0071\u0075\u0061\u006c\u0073\u0028\u0022\u0061\u0062\u0063\u0022\u0029
-\u0009\u007d
-\u0020\u0020\u0020\u0020
-\u0020\u0020\u0020\u0020\u0076\u006f\u0069\u0064\u0020\u0074\u0065\u0073\u0074\u0055\u006e\u006b\u006e\u006f\u0077\u006e\u0056\u0061\u0072\u0069\u0061\u0062\u006c\u0065\u0028\u0029\u0020\u007b
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0074\u0072\u0079\u0020\u007b
-\u0009\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0079\u0020\u003d\u0020\u0078
-\u0009\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0066\u0061\u0069\u006c\u0028\u0022\u0078\u0020\u0069\u0073\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064\u002c\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0074\u0068\u0072\u006f\u0077\u0020\u0061\u006e\u0020\u0065\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0022\u0029
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u007d
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0063\u0061\u0074\u0063\u0068\u0020\u0028\u004d\u0069\u0073\u0073\u0069\u006e\u0067\u0050\u0072\u006f\u0070\u0065\u0072\u0074\u0079\u0045\u0078\u0063\u0065\u0070\u0074\u0069\u006f\u006e\u0020\u0065\u0029\u0020\u007b
-\u0009\u0009\u0009\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0065\u002e\u0067\u0065\u0074\u0050\u0072\u006f\u0070\u0065\u0072\u0074\u0079\u0028\u0029\u0020\u003d\u003d\u0020\u0022\u0078\u0022\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0074\u0065\u0078\u0074\u0020\u003d\u0020\u0065\u002e\u006d\u0065\u0073\u0073\u0061\u0067\u0065
-\u0009\u0009\u0009\u002f\u002f\u0065\u002e\u0070\u0072\u0069\u006e\u0074\u0053\u0074\u0061\u0063\u006b\u0054\u0072\u0061\u0063\u0065\u0028\u0029
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0061\u0073\u0073\u0065\u0072\u0074\u0020\u0074\u0065\u0078\u0074\u0020\u003d\u003d\u0020\u0022\u004e\u006f\u0020\u0073\u0075\u0063\u0068\u0020\u0070\u0072\u006f\u0070\u0065\u0072\u0074\u0079\u003a\u0020\u0078\u0020\u0066\u006f\u0072\u0020\u0063\u006c\u0061\u0073\u0073\u003a\u0020\u0045\u0073\u0063\u0061\u0070\u0065\u0064\u0055\u006e\u0069\u0063\u006f\u0064\u0065\u0054\u0065\u0073\u0074\u0022
-\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u007d
-\u0020\u0020\u0020\u0020\u007d
-\u0009\u0020\u0020\u0020\u0020
-\u007d
diff --git a/groovy/modules/classic/src/test/groovy/ExceptionInClosureTest.groovy b/groovy/modules/classic/src/test/groovy/ExceptionInClosureTest.groovy
deleted file mode 100644
index bbfa5c7..0000000
--- a/groovy/modules/classic/src/test/groovy/ExceptionInClosureTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-/** 
- * Tests exception handling inside of a closure
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ExceptionInClosureTest extends GroovyTestCase {
-
-    void testCallingOfFailedClosure() {
-        closure = { it | it.foo() }
-        
-        try {
-	        closure.call("cheese")
-	        
-	        fail("Should have thrown an exception by now")
-        }
-        catch (MissingMethodException e) {
-   			System.out.println("Caught: " + e)    
-   			
-   			assert e.method == "foo"
-			assert e.type == String   			
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ExpandoPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/ExpandoPropertyTest.groovy
deleted file mode 100644
index 4daf6bf..0000000
--- a/groovy/modules/classic/src/test/groovy/ExpandoPropertyTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-class ExpandoPropertyTest extends GroovyTestCase {
-
-    void testExpandoProperty() {
-        foo = new Expando()
-        
-        foo.cheese = "Cheddar"
-        foo.name = "Gromit"
-        
-        assert foo.cheese == "Cheddar"
-        assert foo.name == "Gromit"
-        
-        assert foo.expandoProperties.size() == 2
-    }
-    
-    void testExpandoMethods() {
-        foo = new Expando()
-
-        foo.cheese = "Cheddar"
-        foo.fullName = "Gromit"
-        foo.nameLength = { return fullName.length() }
-        foo.multiParam = { a, b, c | println("Called with ${a}, ${b}, ${c}"); return a + b + c }
-
-        assert foo.cheese == "Cheddar"
-        assert foo.fullName == "Gromit"
-        assert foo.nameLength() == 6 : foo.nameLength()
-        assert foo.multiParam(1, 2, 3) == 6
-        
-        // lets test using wrong number of parameters
-        shouldFail { foo.multiParam(1) }
-        shouldFail { foo.nameLength(1, 2) }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/FilterLineTest.groovy b/groovy/modules/classic/src/test/groovy/FilterLineTest.groovy
deleted file mode 100644
index bd8cae3..0000000
--- a/groovy/modules/classic/src/test/groovy/FilterLineTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * check that the new filterLine() method on InputStream is ok
- * (and indirectly test newReader() method on InputStream)
- * as specified in GROOVY-624 and GROOVY-625
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-import java.io.*
-
-class FilterLineTest extends GroovyTestCase {
-	property myFile
-	property myInput
-	property myOutput
-
-	void setUp() {
-	    myFile = new File("src/test/groovy/FilterLineTest.groovy")
-		myInput = new FileInputStream(myFile)
-		myOutput = new CharArrayWriter()
-	}
-
-	void testFilterLineOnFileReturningAWritable() {
-		writable = myFile.filterLine() {it.contains("testFilterLineOnFileReturningAWritable")}
-		writable.writeTo(myOutput)
-		assert 3 == myOutput.toString().count("testFilterLineOnFileReturningAWritable")
-	}
-
-	void testFilterLineOnFileUsingAnOutputStream() {
-		myFile.filterLine(myOutput) {it.contains("testFilterLineOnFileUsingAnOutputStream")}
-		assert 3 == myOutput.toString().count("testFilterLineOnFileUsingAnOutputStream")
-	}
-
-	void testFilterLineOnInputStreamReturningAWritable() {
-		writable = myInput.filterLine() {it.contains("testFilterLineOnInputStreamReturningAWritable")}
-		writable.writeTo(myOutput)
-		assert 3 == myOutput.toString().count("testFilterLineOnInputStreamReturningAWritable")
-	}
-
-	void testFilterLineOnInputStreamUsingAnOutputStream() {
-		myInput.filterLine(myOutput) {it.contains("testFilterLineOnInputStreamUsingAnOutputStream")}
-		assert 3 == myOutput.toString().count("testFilterLineOnInputStreamUsingAnOutputStream")
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/Foo.groovy b/groovy/modules/classic/src/test/groovy/Foo.groovy
deleted file mode 100644
index ce9ba36..0000000
--- a/groovy/modules/classic/src/test/groovy/Foo.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-import java.io.Serializable
-
-/** 
- * A dummy bean for testing the use of properties in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class Foo implements Serializable {
-
-    // public properties
-    name = "James"
-    count
-    String location = "London"
-    
-    // declare private variables
-	private blah = 9
-	private invisible = "invisible"
-
-    // declare a protected variable
-    protected prot = "hide me!"
-
- 	// provide a getter method
- 	getCount() {
- 	    if (count == null) {
- 	        count = 1
- 	    }
- 	    return count
- 	}
-     
-	getBlah() {
- 	    return blah
- 	}
-	
-    // declare a bean with explicit typing
-    private String body
-
-    public String getBody() {
-        return this.body
-    }
-
-    public void setBody(String body) {
-        this.body = body
-    }
-
-	String toString() {
-		return super.toString() + " name: ${name} location: ${location}"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/ForLoopTest.groovy b/groovy/modules/classic/src/test/groovy/ForLoopTest.groovy
deleted file mode 100644
index aa6c87a..0000000
--- a/groovy/modules/classic/src/test/groovy/ForLoopTest.groovy
+++ /dev/null
@@ -1,110 +0,0 @@
-import groovy.bugs.TestSupport
-
-import java.util.Vector
-
-class ForLoopTest extends GroovyTestCase {
-
-	property x
-	
-    void testRange() {
-        x = 0
-
-        for ( i in 0..9 ) {
-            x = x + i
-        }
-
-        assert x == 45
-    }
-
-    void testRangeWithType() {
-        x = 0
-
-        for ( Integer i in 0..9 ) {
-        	assert i.class == Integer
-            x = x + i
-        }
-
-        assert x == 45
-    }
-
-	void testRangeWithJdk15Style() {
-        x = 0
-
-        for ( i : 0..9 ) {
-            x = x + i
-        }
-
-        assert x == 45
-	}
-	
-	void testRangeWithJdk15StyleAndType() {
-        x = 0
-
-        for ( Integer i : 0..9 ) {
-        	assert i.class == Integer
-            x = x + i
-        }
-
-        assert x == 45
-	}
-	
-    void testList() {
-        x = 0
-		
-        for ( i in [0, 1, 2, 3, 4] ) {
-            x = x + i
-        }
-
-        assert x == 10
-    }
-
-    void testArray() {
-        array = (0..4).toArray()
-        
-        println "Class: ${array.class} for array ${array}"
-        
-        x = 0
-        
-        for ( i in array ) {
-            x = x + i
-        }
-
-        assert x == 10
-	}
-    
-    void testIntArray() {
-        array = TestSupport.getIntArray()
-        
-        println "Class: ${array.class} for array ${array}"
-        
-        x = 0
-        
-        for ( i in array ) {
-            x = x + i
-        }
-
-        assert x == 15
-    }
-    
-    void testString() {
-        text = "abc"
-        
-        list = []
-        for (c in text) {
-            list.add(c)
-        }
-        
-        assert list == ["a", "b", "c"]
-    }
-    
-    void testVector() {
-        vector = new Vector()
-        vector.addAll( [1, 2, 3] )
-        
-        answer = []
-        for (i in vector.elements()) {
-            answer << i
-        }
-        assert answer == [1, 2, 3]
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ForLoopWithLocalVariablesTest.groovy b/groovy/modules/classic/src/test/groovy/ForLoopWithLocalVariablesTest.groovy
deleted file mode 100644
index e692b29..0000000
--- a/groovy/modules/classic/src/test/groovy/ForLoopWithLocalVariablesTest.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Tests iterating with local variables
- */
-class ForLoopWithLocalVariablesTest extends GroovyTestCase {
-
-    void testForLoop() {
-        x = null
-
-        for ( i in 0..9 ) {
-            x = i
-        }
-
-        assert x == 9
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/GStringTest.groovy b/groovy/modules/classic/src/test/groovy/GStringTest.groovy
deleted file mode 100644
index ccefd78..0000000
--- a/groovy/modules/classic/src/test/groovy/GStringTest.groovy
+++ /dev/null
@@ -1,134 +0,0 @@
-class GStringTest extends GroovyTestCase {
-
-    void testWithOneVariable() {
-        
-        name = "Bob"
-        
-        template = "hello ${name} how are you?"
-				
-		assert template instanceof GString
-											 
-	 	count = template.getValueCount()
-		assert count == 1
-		assert template.getValue(0) == "Bob"
-											 
-		string = template.toString()
-		assert string == "hello Bob how are you?"
-	}
-    
-    void testWithVariableAtEnd() {
-        name = "Bob"
-        template = "hello ${name}"
-        string = template.toString()
-        
-        assert string == "hello Bob"
-    }
-    
-    void testWithVariableAtBeginning() {
-        name = "Bob"
-        template = "${name} hey"
-        string = template.toString()
-        
-        assert string == "Bob hey"
-    }
-
-    void testWithJustVariable() {
-        name = "Bob"
-        template = "${name}"
-        string = template.toString()
-        
-        assert string == "Bob"
-    }
-    
-    void testWithTwoVariables() {
-        name = "Bob"
-        template = "${name}${name}"
-        string = template.toString()
-        
-        assert string == "BobBob"
-    }
-    
-    void testWithTwoVariablesWithSpace() {
-        name = "Bob"
-        template = "${name} ${name}"
-        string = template.toString()
-        
-        assert string == "Bob Bob"
-    }
-    
-    void testAppendString() {
-        a = "dog" 
-        b = "a ${a}"
-        
-		c = b + " cat"
-
-        println("Created ${c}")
-        
-        assert c.toString() == "a dog cat" : c
-        
-        b += " cat"
-        
-        assert b.toString() == "a dog cat" : b
-    }
-    
-    void testAppendGString() {
-        a = "dog" 
-        b = "a ${a}" 
-        b += " cat${a}"
-        
-        assert b.toString() == "a dog catdog" : b
-        
-        println("Created ${b}")
-    }
-    
-    void testReturnString() {
-        value = dummyMethod()
-        assert value == "Hello Gromit!"
-    }
-    
-    String dummyMethod() {
-        name = "Gromit"
-        return "Hello ${name}!"
-    }
-    
-    void testCoerce() {
-        it = "US-ASCII"
-        value = "test".getBytes("${it}")
-        
-        println "Created ${value}"
-        assert value != null
-    }
-    
-    void testGroovy441() {
-		arg = "test" 
-		content = "${arg} =" 
-
-		if (arg != "something") 
-		{ 
-			content += "?" 
-		}
-
-		content += "= ${arg}." 
-
-		assert content == "test =?= test."
-    }
-
-    void testTwoStringsInMiddle() {
-        a = "---"
-        b = "${a} :"
-        b += "<<"
-        b += ">>"
-        b += ": ${a}"
-        assert b == "--- :<<>>: ---"
-    }
-
-    void testAlternatingGStrings() {
-        a = "---"
-        b = "${a} :"
-        b += "<<"
-        b += " [[${a}]] "
-        b += ">>"
-        b += ": ${a}"
-        assert b == "--- :<< [[---]] >>: ---"
-    }
- }
diff --git a/groovy/modules/classic/src/test/groovy/GeneratorTest.groovy b/groovy/modules/classic/src/test/groovy/GeneratorTest.groovy
deleted file mode 100644
index 4e41e8f..0000000
--- a/groovy/modules/classic/src/test/groovy/GeneratorTest.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-
-class GeneratorTest extends GroovyTestCase {
-
-    void testGenerator() {
-        x = this.sampleGenerator
-        //System.out.println("x: " + x)
-		
-        result = ''
-        for (i in x) {
-            result = result + i
-        }
-	    
-        assert result == "ABC"
-    }
-
-    void testFindAll() {
-        x = this.sampleGenerator
- 	    
-        value = x.findAll { item | return item == "C" }
-        assert value == ["C"]
- 	    
-        value = x.findAll { item | return item != "B" }
-        assert value == ["A", "C"]
-    }
-    
-	
-    void testEach() {
-        x = this.sampleGenerator
- 	    
-        value = x.each { println(it) }
-    }
-    
-	
-    void testMissingThisBug() {
-        result = ''
-        for (i in sampleGenerator) {
-            result = result + i
-        }
-	    
-        assert result == "ABC"
-    }
-	
-	void sampleGenerator(closure) {
-	    // kinda like yield statements
-	    closure.call("A")
-	    closure.call("B")
-	    closure.call("C")
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/GlobalPrintlnTest.groovy b/groovy/modules/classic/src/test/groovy/GlobalPrintlnTest.groovy
deleted file mode 100644
index 17d08ef..0000000
--- a/groovy/modules/classic/src/test/groovy/GlobalPrintlnTest.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-class GlobalPrintlnTest extends GroovyTestCase {
-
-    void testGlobalPrintln() {
-        println("Hello World!")
-	}
-
-    void testGlobalPrint() {
-        print("Hello ")
-        println("World!")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/GroovyMethodsTest.groovy b/groovy/modules/classic/src/test/groovy/GroovyMethodsTest.groovy
deleted file mode 100644
index f5c0ff4..0000000
--- a/groovy/modules/classic/src/test/groovy/GroovyMethodsTest.groovy
+++ /dev/null
@@ -1,208 +0,0 @@
-import java.io.InputStreamReader
-
-/** 
- * Tests the various new Groovy methods
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Guillaume Laforge
- * @version $Revision$
- */
-class GroovyMethodsTest extends GroovyTestCase {
-	void testCollect() {
-		assert [2, 4, 6].collect { it * 2} == [4, 8, 12]
-		
-		answer = [2, 4, 6].collect(new Vector()) { it * 2}
-		
-		assert answer[0] == 4
-		assert answer[1] == 8
-		assert answer[2] == 12
-	}
-
-    void testJoin() {
-        assert [2, 4, 6].join("-") == "2-4-6"
-        assert ["edam", "cheddar", "brie"].join(", ") == 'edam, cheddar, brie'
-        
-        println( ["abc", 5, 2.34].join(", ") )
-    }
-    
-    void testTimes() {
-        count = 0
-        5.times { i | count = count + i }
-        assert count == 10
-        
-        count = 0
-        temp = 5
-        temp.times { i | count = count + i }
-        
-        assert count == 10
-    }
-    
-    void testArraySubscript() {
-        list = [1, 2, 3, 4]
-        array = list.toArray()
-        
-        value = array[2]
-        
-        assert value == 3
-        
-        array[0] = 9
-        
-       	assert array[0] == 9
-    }
-    
-    void testToCharacterMethod() {
-    	s = 'c'
-    	x = s.toCharacter()
-    	
-    	assert x instanceof Character
-    }
-
-    void testListGrep() {
-        list = ["James", "Bob", "Guillaume", "Sam"]
-        answer = list.grep(~".*a.*")
-
-        assert answer == ["James", "Guillaume", "Sam"]
-
-        answer = list.grep(~"B.b")
-
-        assert answer == ["Bob"]
-    }
-
-    void testCollectionToList() {
-        c = [1, 2, 3, 4, 5] // but it's a list
-        l = c.toList()
-
-        assert l.containsAll(c)
-        assert c.size() == l.size()
-    }
-
-    void testJoinString() {
-        arr = new String[] {"a", "b", "c", "d"}
-        joined = arr.join(", ")
-
-        assert joined == "a, b, c, d"
-    }
-
-    void testReverseEach() {
-        l = ["cheese", "loves", "Guillaume"]
-        expected = ["Guillaume", "loves", "cheese"]
-        
-        answer = []
-        l.reverseEach{ answer << it }
-
-        assert answer == expected
-    }
-    
-    void testGrep() {
-	    	list = ["Guillaume", "loves", "cheese"]
-	    	
-	    	answer = list.grep(~".*ee.*")
-	    	assert answer == ["cheese"]
-	    	
-	    	list = [123, "abc", 4.56]
-	    	answer = list.grep(String)
-	    	assert answer == ["abc"]
-	    	
-	    	list = [4, 2, 7, 3, 6, 2]
-	    	answer = list.grep(2..3)
-	    	assert answer == [2, 3, 2]
-	}
-    
-    void testMapGetWithDefault() {
-    		map = [:]
-    		
-    		assert map.foo == null
-    		
-    		map.get("foo", []).add(123)
-    		
-    		assert map.foo == [123]
-    		
-    		map.get("bar", [:]).get("xyz", [:]).cheese = 123
-    		
-    		assert map.bar.xyz.cheese == 123
-    		assert map.size() == 2
-    	}
-    		
-    void DISABLE_testExecuteCommandLineProcessUsingAString() {
-	    	/** @todo why does this not work
-	    	javaHome = System.getProperty('java.home', '')
-	    	cmd = "${javaHome}/bin/java -version"
-	    	*/
-	    	
-	    	cmd = "ls -l"
-	    	if (System.getProperty('os.name', '').contains('Win')) {
-	    		cmd = "dir"
-	    	}
-	    	
-	    	println "executing command: ${cmd}"
-	    	
-	    	process = cmd.execute()
-	    	//process = "ls -l".execute()
-	    	
-	    	// lets have an easier way to do this!
-	    	count = 0
-	    	
-	    	println "Read the following lines..."
-	
-	    	/** @todo we should simplify the following line!!! */
-	    	new InputStreamReader(process.in).eachLine { line |
-	    		println line
-	    		count++
-	    	}
-	    	println ""
-	    	
-	    	process.waitFor()
-	    	value = process.exitValue()
-	    	println "Exit value of command line is ${value}"
-	    	
-	    	assert count > 1
-    }
-    
-    void DISABLED_testExecuteCommandLineProcessAndUseWaitForOrKill() {
-    	/** @todo why does this not work
-    	javaHome = System.getProperty('java.home', '')
-    	cmd = "${javaHome}/bin/java -version"
-    	*/
-    	
-    	cmd = "ls -l"
-    	if (System.getProperty('os.name', '').contains('Win')) {
-    		cmd = "dir"
-    	}
-    	
-    	println "executing command: ${cmd}"
-    	
-    	process = cmd.execute()
-    	
-    	process.waitForOrKill(1000)
-    	value = process.exitValue()
-    	println "Exit value of command line is ${value}"
-    	
-    	
-    	process = cmd.execute()
-    	
-    	process.waitForOrKill(1)
-    	value = process.exitValue()
-    	println "Exit value of command line is ${value}"
-    }
-    
-    void testDisplaySystemProperties() {
-    	println "System properties are..."
-    	properties = System.properties
-    	keys = properties.keySet().sort()
-    	for (k in keys) { 
-    		println "${k} = ${properties[k]}"
-    	}
-    }
-
-    void testMax() {
-        assert [-5, -3, -1, 0, 2, 4].max{ it * it } == -5
-    }
-
-    void testMin() {
-        assert [-5, -3, -1, 0, 2, 4].min{ it * it } == 0
-    }
-    
-    void testSort() {
-    	assert [-5, -3, -1, 0, 2, 4].sort { it*it } == [0, -1, 2, -3, 4, -5]
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/HeredocsTest.groovy b/groovy/modules/classic/src/test/groovy/HeredocsTest.groovy
deleted file mode 100644
index 5f5049c..0000000
--- a/groovy/modules/classic/src/test/groovy/HeredocsTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-class HeredocsTest extends GroovyTestCase {
-
-    void testHeredocs() {
-        name = "James"
-        s = <<<EOF
-abcd
-efg
-
-hijk
-     
-hello ${name}
-        
-EOF
-        println s
-		assert s != null
-		assert s instanceof GString
-
-		assert s.contains("i")
-		assert s.contains("James")
-    }
-    
-    void testDollarEscaping() {
-        s = <<<EOF
-hello $${name}
-EOF
-		println s
-		assert s != null
-		assert s.contains("$")
-		c = s.count("$")
-		assert c == 1
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/HomepageTest.groovy b/groovy/modules/classic/src/test/groovy/HomepageTest.groovy
deleted file mode 100644
index ffcb329..0000000
--- a/groovy/modules/classic/src/test/groovy/HomepageTest.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-class HomepageTest extends GroovyTestCase {
-
-	void testHomePage() {
-	    
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/IfElseCompactTest.groovy b/groovy/modules/classic/src/test/groovy/IfElseCompactTest.groovy
deleted file mode 100644
index 87e7e5c..0000000
--- a/groovy/modules/classic/src/test/groovy/IfElseCompactTest.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-class IfElseCompactTest extends GroovyTestCase {
-
-    void testIf_NoElse() {
-
-        x = false
-
-        if ( true ) {x = true}
-
-        assert x == true
-    }
-
-    void testIf_WithElse_MatchIf() {
-
-        x = false
-        y = false
-
-        if ( true ) {x = true} else {y = true}
-
-        assert x == true
-        assert y == false
-
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/IfElseTest.groovy b/groovy/modules/classic/src/test/groovy/IfElseTest.groovy
deleted file mode 100644
index fc012ed..0000000
--- a/groovy/modules/classic/src/test/groovy/IfElseTest.groovy
+++ /dev/null
@@ -1,131 +0,0 @@
-class IfElseTest extends GroovyTestCase {
-
-    void testIf_NoElse() {
-
-        x = false
-
-        if ( true ) {
-            x = true
-        }
-
-        assert x == true
-    }
-
-    void testIf_WithElse_MatchIf() {
-
-        x = false
-        y = false
-
-        if ( true ) {
-            x = true
-        } else {
-            y = true
-        }
-
-        assert x == true
-        assert y == false
-
-    }
-
-    void testIf_WithElse_MatchElse() {
-
-        x = false
-        y = false
-
-        if ( false ) {
-            x = true
-        } else {
-            y = true
-        }
-
-        assertEquals( false, x )
-        assertEquals( true, y )
-    }
-
-    void testIf_WithElseIf_MatchIf() {
-
-        x = false
-        y = false
-
-        if ( true ) {
-            x = true
-        } else if ( false ) {
-            y = true
-        }
-
-        assert x == true
-        assert y == false
-    }
-
-    void testIf_WithElseIf_MatchElseIf() {
-
-        x = false
-        y = false
-
-        if ( false ) {
-            x = true
-        } else if ( true ) {
-            y = true
-        }
-
-        assertEquals( false, x )
-        assertEquals( true, y )
-    }
-
-    void testIf_WithElseIf_WithElse_MatchIf() {
-
-        x = false
-        y = false
-        z = false
-
-        if ( true ) {
-            x = true
-        } else if ( false ) {
-            y = true
-        } else {
-            z = true
-        }
-
-        assert x == true
-        assert y == false
-        assertEquals( false, z )
-    }
-
-    void testIf_WithElseIf_WithElse_MatchElseIf() {
-
-        x = false
-        y = false
-        z = false
-
-        if ( false ) {
-            x = true
-        } else if ( true ) {
-            y = true
-        } else {
-            z = true
-        }
-
-        assertEquals( false, x )
-        assertEquals( true, y )
-        assertEquals( false, z )
-    }
-
-    void testIf_WithElseIf_WithElse_MatchElse() {
-
-        x = false
-        y = false
-        z = false
-
-        if ( false ) {
-            x = true
-        } else if ( false ) {
-            y = true
-        } else {
-            z = true
-        }
-
-        assertEquals( false, x )
-        assert y == false
-        assertEquals( true, z )
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/IfPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/IfPropertyTest.groovy
deleted file mode 100644
index 5016c11..0000000
--- a/groovy/modules/classic/src/test/groovy/IfPropertyTest.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-class IfPropertyTest extends GroovyTestCase {
-	
-    dummy
-    
-	// This is because normal classes are not extensible, but scripts are extensible by default.
-	Object get(String key) {
-	    println("asking for property " + key)
-		return dummy
-	}
-	
-	void set(Object key, Object value) {
-	    println("setting the property " + key + " to: " + value)
-	    dummy = value
-	}
-
-    void testIfNullPropertySet() {
-        if (cheese == null) {
-            cheese = 1
-        }
-        if (cheese != 1) {
-            fail("Didn't change cheese")
-        }
-        assert cheese == 1
-    }
-    
-    void testIfNullPropertySetRecheck() {
-		if (cheese == null) {
-			cheese = 1
-		}
-		if (cheese == 1) {
-			cheese = 2
-		}
-		assert cheese == 2
-    }
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/IfTest.groovy b/groovy/modules/classic/src/test/groovy/IfTest.groovy
deleted file mode 100644
index efa270a..0000000
--- a/groovy/modules/classic/src/test/groovy/IfTest.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-class IfTest extends GroovyTestCase {
-
-    void testUsingNumber() {
-		x = 1
-		
-		if (x) {
-			println "${x} is true"
-		}
-		else {
-			fail("should not be false")
-		}
-		
-		x = 0
-		
-		if (x) {
-			fail("should not be true")
-		}
-		else {
-			println "${x} is false"
-		}
-		
-    }
-
-    void testUsingString() {
-		x = "abc"
-		
-		if (x) {
-			println "${x} is true"
-		}
-		else {
-			fail("should not be false")
-		}
-		
-		x = 0
-		
-		if (x) {
-			fail("should not be true")
-		}
-		else {
-			println "${x} is false"
-		}
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/IfWithMethodCall.groovy b/groovy/modules/classic/src/test/groovy/IfWithMethodCall.groovy
deleted file mode 100644
index ba2e4a3..0000000
--- a/groovy/modules/classic/src/test/groovy/IfWithMethodCall.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-class IfWithMethodCallTest extends GroovyTestCase {
-
-	void testIfWithMethodCall() {
-	    x = ["foo", "cheese"]
-	    
-        if ( x.contains("cheese") ) {
-            // ignore
-        }
-        else {
-            assert false : "x should contain cheese!"
-        }
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/ImmutableModificationTest.groovy b/groovy/modules/classic/src/test/groovy/ImmutableModificationTest.groovy
deleted file mode 100644
index 5ac3863..0000000
--- a/groovy/modules/classic/src/test/groovy/ImmutableModificationTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * check that the new asImmutable() method works
- * as specified in GROOVY-623
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-class ImmutableModificationTest extends GroovyTestCase {
-	void testCollectionAsImmutable() {
-	    challenger = ["Telson", "Sharna", "Darv", "Astra"]
-	    hopefullyImmutable = challenger.asImmutable()
-	    try {
-	        challenger.add("Angel One")
-	        challenger << "Angel Two"
-
-	        // @todo fail("'challenger' is supposed to be an immutable collection.")
-
-	    } catch (UnsupportedOperationException e) {
-	        // success if this exception is thrown
-            assert 4 == challenger.size()
-	    }
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ImportTest.groovy b/groovy/modules/classic/src/test/groovy/ImportTest.groovy
deleted file mode 100644
index 01f9082..0000000
--- a/groovy/modules/classic/src/test/groovy/ImportTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-import java.io.*
-import java.util.Map, List
-
-class ImportTest extends GroovyTestCase {
-
-    void testImportAll() {
-        file = new File("foo.txt")
-		assert file instanceof File
-		assert file.class.name == "java.io.File"
-    }
-    
-    void testImportByName() {
-        x = [:]
-        assert x instanceof Map
-        /** @todo 
-        assert x.class != null 
-        */
-        assert x.getClass().name.startsWith("java.util.")
-        
-        y = [1, 2, 3]
-        assert y instanceof List
-        assert y.getClass().name.startsWith("java.util.")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/InstanceofTest.groovy b/groovy/modules/classic/src/test/groovy/InstanceofTest.groovy
deleted file mode 100644
index f18d345..0000000
--- a/groovy/modules/classic/src/test/groovy/InstanceofTest.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-import java.util.Map
-
-class InstanceofTest extends GroovyTestCase {
-
-    void testTrue() {
-
-        x = false
-		o = 12
-        
-        if ( o instanceof Integer ) {
-            x = true
-        }
-
-        assert x == true
-    }
-    
-    void testFalse() {
-
-        x = false
-        o = 12
-        
-        if ( o instanceof Double ) {
-            x = true
-        }
-
-        assert x == false
-    }
-    
-    void testImportedClass() {
-        m = [1:2]
-        assert m instanceof Map
-        assert !(m instanceof Double)
-        
-        assertTrue(m instanceof Map)
-        assertFalse(m instanceof Double)
-    }
-    
-    void testFullyQualifiedClass() {
-        l = [1, 2, 3]
-        assert l instanceof java.util.List
-        assert !(l instanceof Map)
-        
-        assertTrue(l instanceof java.util.List)
-        assertFalse(l instanceof Map)
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/IntegerOperationTest.groovy b/groovy/modules/classic/src/test/groovy/IntegerOperationTest.groovy
deleted file mode 100644
index cb2a433..0000000
--- a/groovy/modules/classic/src/test/groovy/IntegerOperationTest.groovy
+++ /dev/null
@@ -1,186 +0,0 @@
-class IntegerOperationTest extends GroovyTestCase {
-
-    property x
-    property y
-    
-    void testPlus() {
-        x = 2 + 2
-        assert x == 4
-        
-        y = x + 1
-		assert y == 5
-		
-		z = y + x + 1 + 2
-		assert z == 12 
-    }
-    
-    void testCharacterPlus() {
-    	Character c1 = 1
-    	Character c2 = 2
-    	
-        x = c2 + 2
-        assert x == 4
-    	
-        x = 2 + c2
-        assert x == 4
-    	
-        x = c2 + c2
-        assert x == 4
-          
-        y = x + c1
-		assert y == 5
-          
-        y = c1 + x
-		assert y == 5
-		
-		z = y + x + c1 + 2
-		assert z == 12 
-		
-		z = y + x + 1 + c2
-		assert z == 12 
-		
-		z = y + x + c1 + c2
-		assert z == 12 
-    }
-    
-    void testMinus() {
-        x = 6 - 2
-        assert x == 4
-        
-        y = x - 1
-		assert y == 3        
-    }
-    
-    void testCharacterMinus() {
-    	Character c1 = 1
-    	Character c2 = 2
-    	Character c6 = 6
-    	
-        x = c6 - 2
-        assert x == 4
-    	
-        x = 6 - c2
-        assert x == 4
-    	
-        x = c6 - c2
-        assert x == 4
-        
-        y = x - c1
-		assert y == 3        
-    }
-    
-    void testMultiply() {
-        x = 3 * 2
-        assert x == 6
-        
-        y = x * 2
-        assert y == 12        
-    }
-    
-    void testDivide() {
-        x = 80 / 4
-        assert x == 20.0 : "x = " + x
-        
-        y = x / 2
-        assert y == 10.0 : "y = " + y        
-    }
-    
-    void testIntegerDivide() {
-        x = 52 \ 3
-        assert x == 17 : "x = " + x
-        
-        y = x \ 2
-        assert y == 8 : "y = " + y 
-        
-        y = 11
-        y \= 3
-        assert y == 3       
-    }
-    
-    void testMod() {
-    	x = 100 % 3
-    	
-    	assert x == 1
-    	
-    	y = 11
-    	y %= 3
-    	assert y == 2
-    }
-    
-    void testAnd() {
-    	/** @todo parser 
-    	x = 1 & 3
-    	
-    	assert x == 1
-    	*/
-    	
-    	x = 1.and(3)
-    	
-    	assert x == 1
-    }
-     
-     void testOr() {
-     	/** @todo parser
-     	x = 1 | 3
-     	
-     	assert x == 3
-     	
-     	x = 1 | 4
-     	
-     	assert x == 5
-     	*/
-     	
-     	x = 1.or(3)
-     	
-     	assert x == 3
-     	
-     	x = 1.or(4)
-     	
-     	assert x ==5
-    }
-    
-    void testShiftOperators() {
-
-    	x = 8 >> 1
-    	assertTrue(x == 4)
-    	assertTrue(x instanceof Integer)
-
-    	x = 8 << 2
-    	assertTrue(x == 32)
-    	assertTrue(x instanceof Integer)
-
-    	x = 8L << 2
-    	assertTrue(x == 32)
-    	assertTrue(x instanceof Long)
-
-		x = -16 >> 4
-		assertTrue(x == -1)
-
-		x = -16 >>> 4
-		assertTrue(x == 0xFFFFFFF)
-		
-		//Ensure that the type of the right operand (shift distance) is ignored when calculating the
-		//result.  This is how java works, and for these operators, it makes sense to keep that behavior.
-		x = Integer.MAX_VALUE << 1L
-		assertTrue(x == -2)
-    	assertTrue(x instanceof Integer)
-    	
-		x = new Long(Integer.MAX_VALUE).longValue() << 1
-		assertTrue(x == 0xfffffffe)
-    	assertTrue(x instanceof Long)
-    	
-    	//The left operand (shift value) must be an integral type
-    	try {
-    		x = 8.0F >> 2
-    		fail("Should catch UnsupportedOperationException");
-    	} catch (UnsupportedOperationException uoe) {
-    	} 
-
-    	//The right operand (shift distance) must be an integral type
-    	try {
-    		x = 8 >> 2.0
-    		fail("Should catch UnsupportedOperationException");
-    	} catch (UnsupportedOperationException uoe) {
-    	} 
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/InvokeNormalMethodsFirstTest.groovy b/groovy/modules/classic/src/test/groovy/InvokeNormalMethodsFirstTest.groovy
deleted file mode 100644
index 3e79e3f..0000000
--- a/groovy/modules/classic/src/test/groovy/InvokeNormalMethodsFirstTest.groovy
+++ /dev/null
@@ -1,60 +0,0 @@
-
-/**
- * Invoke normal methods first: if no statically typed method exist, use invokeMethod().
- *
- * @author Guillaume Laforge
- */
-class InvokeNormalMethodsFirstTest extends GroovyTestCase {
-
-    void testPrintln() {
-        println "call global println function"
-    }
-
-    void testStaticMethodOnJdkObject() {
-        myString = " static method "
-        newString = myString.trim()
-
-        assert newString == "static method"
-    }
-
-    void testCallClosure() {
-        clos = { |msg| return msg + " is Groovy" }
-        str = clos("Guillaume")
-
-        assert str == "Guillaume is Groovy"
-    }
-
-    void testCallNormalMethodFromAGroovyDefinedClass() {
-        p = new Printer()
-        str = "Guillaume"
-        result = p.returnSelf(str)
-
-        assert result == str
-    }
-
-    void testCallNormalMethodFirstFromWackyObject() {
-        w = new Wacky()
-        str = "Groovy"
-        staticResult = w.returnSelf(str)
-        invokeResult = w.nonExistingMethod(str)
-
-        assert staticResult == str
-        assert invokeResult == "invokerMethod call"
-    }
-}
-
-class Printer {
-    String returnSelf(msg) {
-        return msg
-    }
-}
-
-class Wacky {
-    String returnSelf(msg) {
-        return msg
-    }
-
-    Object invokeMethod(String name, Object args) {
-        return "invokerMethod call"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ListIteratingTest.groovy b/groovy/modules/classic/src/test/groovy/ListIteratingTest.groovy
deleted file mode 100644
index b6d97a0..0000000
--- a/groovy/modules/classic/src/test/groovy/ListIteratingTest.groovy
+++ /dev/null
@@ -1,58 +0,0 @@
-import java.util.ArrayList
-
-/** 
- * Tests iterating using Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ListIteratingTest extends GroovyTestCase {
-
-/** @todo parser
-    testIteratingWithTuples() {
-        s = 1, 2, 3, 4
-        assertSequence(s)
-    }
-
-    testIteratingWithTuplesAsParameter() {
-        assertSequence(1, 2, 3, 4)
-    }
-*/
-
-    void testIteratingWithSequences() {
-        s = [1, 2, 3, 4 ]
-        assertSequence(s)
-    }
-    
-    void testIteratingWithSequencesAsParameter() {
-        assertSequence([1, 2, 3, 4 ])
-    }
-    
-    testIteratingWithList() {
-        s = new ArrayList()
-        s.add(1)
-        s.add(2)
-        s.add(3)
-        s.add(4)
-        assertSequence(s)
-    }
-
-    protected assertSequence(s) {
-        result = 0
-        for ( i in s ) {
-            result = result + i
-        }
-	    
-        assert(result == 10)
-        assert(s.size() == 4)
-        
-        assert(s[2] == 3)
-        /** @todo parser
-        result = 0
-        for ( i in s[1:2] ) {
-            result += i
-        }
-        assert(result == 2+3)
-        */
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ListTest.groovy b/groovy/modules/classic/src/test/groovy/ListTest.groovy
deleted file mode 100644
index 594107b..0000000
--- a/groovy/modules/classic/src/test/groovy/ListTest.groovy
+++ /dev/null
@@ -1,209 +0,0 @@
-class ListTest extends GroovyTestCase {
-
-    void testList() {
-        x = [10, 11]
-		
-		assert x.size() == 2
-		
-		x.add("cheese")
-		
-		assert x.size() == 3
-		
-        assert x.contains(10)
-        assert x.contains(11)
-		assert x.contains("cheese")
-
-
-        assert x.get(0) == 10
-        assert x.get(1) == 11
-        assert x.get(2) == "cheese"
-
-		// subscript operator
-		assert x[0] == 10
-        assert x[1] == 11
-        assert x[2] == "cheese"
-		
-        x[3] = 12
-		
-		assert x[3] == 12
-		
-		
-		if ( x.contains("cheese") ) {
-            // ignore
-        }
-        else {
-            assert false : "x should contain cheese!"
-        }
-		
-        if ( x.contains(10) ) {
-            // ignore
-        }
-        else {
-            assert false : "x should contain 1!"
-        }
-    }
-    
-    void testEmptyList() {
-        x = []
-        
-        assert x.size() == 0
-        
-       	x.add("cheese")
-       	
-       	assert x.get(0) == "cheese"
-
-        assert x.size() == 1
-
-       	assert x[0] == "cheese"
-    }
-    
-    void testSubscript() {
-        x = []
-        x[1] = 'cheese'
-        
-        assert x[0] == null
-        assert x[1] == 'cheese'
-        
-        x[2] = 'gromit'
-        x[3] = 'wallace'
-        
-        assert x.size() == 4
-        
-        x[-1] = 'nice'
-        
-        assert x[3] == 'nice'
-        
-        x[-2] = 'cheese'
-        
-        assert x[2] == 'cheese'
-    }
-    
-    void testClosure() {
-        l = [1, 2, 3, "abc"]
-        block = {i| println(i) }
-        l.each(block)
-        
-        l.each {i| println(i) }
-    }
-    
-    void testMax() {
-        l = [1, 2, 5, 3, 7, 1]        
-        assert l.max() == 7
-        
-        l = [7, 2, 3]
-        assert l.max() == 7
-        
-        l = [1, 2, 7]
-        assert l.max() == 7
-    }
-    
-    void testMin() {
-        l = [6, 4, 5, 1, 7, 2]        
-        assert l.min() == 1
-        
-        l = [7, 1, 3]
-        assert l.min() == 1
-        
-        l = [1, 2, 7]
-        assert l.min() == 1
-    }
-    
-    void testPlus() {
-        l1 = [6, 4, 5, 1, 7, 2]        
-        l2 = [6, 4, 5, 1, 7, [4,5]]
-        assert l1 + l2 == [6, 4, 5, 1, 7, 2, 6, 4, 5, 1, 7, [4,5]]            
-    }
-    
-    void testPlusOneElement() {
-        l1 = [6, 4, 5, 1, 7, 2]        
-        l2 = "erererer"
-        assert l1 + l2 == [6, 4, 5, 1, 7, 2, "erererer"]            
-    }
-    
-    void testListAppend() {
-        list = [1, 2]
-        
-        list << 3 << 4 << 5
-        
-        assert list == [1, 2, 3, 4, 5]
-        
-        x = [] << 'a' << 'hello' << [2, 3] << 5
-        
-        assert x == ['a', 'hello', [2, 3], 5]
-    }
-    
-    void testTimes() {
-        l = [4,7,8]
-        assert l * 3 == [4, 7, 8, 4, 7, 8, 4, 7, 8]
-    }
-    
-    void testMinus() {
-        l1 = [1, 1, 2, 2, 3, 3, 3, 4, 5] 
-        l2 = [1, 2, 4] 
-        assert l1 - l2 == [3, 5] 
-    }
-
-    void testMinusDifferentTypes() {
-        l1 = [1, 1, "wrer", 2, 3, 3, "wrewer", 4, 5, "w", "w"] 
-        l2 = [1, 2, "w"] 
-        assert l1 - l2 == ["wrer", 3, "wrewer", 4, 5] 
-    }  
-     
-    void testIntersect() {
-        l1 = [1, 1, "wrer", 2, 3, 3, "wrewer", 4, 5, "w", "w"] 
-        l2 = [1, 2, "f", "w"] 
-        assert l1.intersect(l2) == [1, 2, "w"] 
-    }
-      
-    void testFlatten() {
-        l= [[[4, 5, 6, [46, 7, "erer"]], 4, [3, 6, 78]], 4]
-        assert l.flatten() == [4, 5, 6, 46, 7, "erer", 4, 3, 6, 78, 4]
-    }
-    
-    void testFlattenWithRanges() {
-        flat = [1, 3, 20..24, 33].flatten()
-        assert flat == [1, 3, 20, 21, 22, 23, 24, 33]
-    }
-    
-    void testListsAndRangesCompare() {
-        l = [1, 2, 3]
-        r = 1..3
-        
-        assert r == l
-        assert l == r
-    }
-    
-    void testRemove() {
-        l = ['a', 'b', 'c']
-        
-        l.remove(1)
-        
-        assert l == ['a', 'c']
-        
-        l.remove(0)
-        
-        assert l == ['c']
-        assert l.size() == 1
-    }
-    
-    void testPop() {
-        l = []
-        l << 'a' << 'b'
-        value = l.pop()
-        assert value == 'b'
-        assert l == ['a']
-        
-        l.add('c')
-        value = l.pop()
-        assert value == 'c'
-        value = l.pop()
-        assert value == 'a'
-        try {
-            value = l.pop()
-            fail("Should have thrown an exception")
-        }
-        catch (UnsupportedOperationException e) {
-            println "Worked: caught expected exception: ${e}"
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/LiteralTypesTest.groovy b/groovy/modules/classic/src/test/groovy/LiteralTypesTest.groovy
deleted file mode 100644
index 9dde966..0000000
--- a/groovy/modules/classic/src/test/groovy/LiteralTypesTest.groovy
+++ /dev/null
@@ -1,146 +0,0 @@
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * Test numeric literal types (with and without suffixes)
- * @see org.codehaus.groovy.syntax.parser/ASTBuilder#createIntegralNumber()
- * @see org.codehaus.groovy.syntax.parser/ASTBuilder#createDecimalNumber()
- *
- * @author Brian Larson
- */
-class LiteralTypesTest extends GroovyTestCase {
-
-    void testIntegral() {
-        x = 42;
-        assert x instanceof Integer;
-
-        x = 42I;
-        assert x instanceof Integer;
-
-        x = 42i;
-        assert x instanceof Integer;
-
-        x = 42L;
-        assert x instanceof Long;
-
-        x = 42G;
-        assert x instanceof BigInteger;
-
-        x = 0xFF; //Hex
-        assert x instanceof Integer;
-        assert x == new Integer("255");
-
-        x = 0xFFL; //Hex
-        assert x instanceof Long;
-        assert x == new Long("255");
-
-        x = 0xFFG; //Hex
-        assert x instanceof BigInteger;
-        assert x == new BigInteger("FF",16);
-
-        x = 0x9000000000000000;
-        assert x instanceof BigInteger;
-        assert x == new BigInteger("9000000000000000",16);
-
-        x = 077; //octal
-        assert x instanceof Integer;
-        assert x == new Integer("63");
-
-        x = 077l; //octal
-        assert x instanceof Long;
-        assert x == new Long("63");
-
-        x = 077g; //octal
-        assert x instanceof BigInteger;
-        assert x == new BigInteger("77",8);
-
-        x = 2147483647;           // max integer value
-        assert x instanceof Integer;
-        assert x == new Integer("2147483647");
-
-        x = -2147483648;          // min integer constant
-        assert x instanceof Integer;
-        assert x == new Integer("-2147483648");
-
-        x = -2147483649;          // min integer value - 1
-        assert x == new Long("-2147483649");
-        assert x instanceof Long;
-
-        x = 2147483648;           // 1 + max integer value
-        assert x == new Long("2147483648");
-        assert x instanceof Long;
-
-        x = 9223372036854775807;  // max long value
-        assert x == new Long("9223372036854775807");
-        assert x instanceof Long;
-
-        x = -9223372036854775808; // min long value
-        assert x == new Long("-9223372036854775808");
-        assert x instanceof Long;
-
-        x = -9223372036854775809; // min long value - 1
-        assert x == new BigInteger("-9223372036854775809");
-        assert x instanceof BigInteger;
-
-        x = 9223372036854775808;  // 1 + max long value
-        assert x == new BigInteger("9223372036854775808");
-        assert x instanceof BigInteger;
-
-    }
-
-    void testDecimal() {
-        x = 3.2;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.2");
-
-        x = 3.2G;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.2");
-
-        x = 3.2g;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.2");
-
-        x = -3.2;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("-3.2");
-
-        x = 3.2D;
-        assert x instanceof Double;
-        assert x == new Double("3.2");
-
-        x = -3.2d;
-        assert x instanceof Double;
-        assert x == new Double("-3.2");
-
-        x = 3.2F;
-        assert x instanceof Float;
-        assert x == new Float("3.2");
-
-        x = -3.2f;
-        assert x instanceof Float;
-        assert x == new Float("-3.2");
-    }
-
-    void testExponential() {
-        x = 3.1415926535e42;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.1415926535e42");
-
-        x = 3.2e+2;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.2e+2");
-
-        x = 3.2e-2;
-        assert x instanceof BigDecimal;
-        assert x == new BigDecimal("3.2e-2");
-
-        x = 3.2e2d;
-        assert x instanceof Double;
-        assert x == new Double("3.2e2");
-
-        x = 3.2e2f;
-        assert x instanceof Float;
-        assert x == new Float("3.2e2");
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/LittleClosureTest.groovy b/groovy/modules/classic/src/test/groovy/LittleClosureTest.groovy
deleted file mode 100644
index 9f8d374..0000000
--- a/groovy/modules/classic/src/test/groovy/LittleClosureTest.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-class LittleClosureTest extends GroovyTestCase {
-
-    void testClosure() {
-        block = {x| return x > 5}
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/LocalFieldTest.groovy b/groovy/modules/classic/src/test/groovy/LocalFieldTest.groovy
deleted file mode 100644
index 2d3339c..0000000
--- a/groovy/modules/classic/src/test/groovy/LocalFieldTest.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-class LocalFieldTest extends GroovyTestCase {
-
-    private x
-	
-	void testAssert() {
-        /** @todo
-        this.x = "abc"
-	    
-	    assert this.x == "abc"
-	    assert this.x != "def"
-         */
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/LocalPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/LocalPropertyTest.groovy
deleted file mode 100644
index 26d8d51..0000000
--- a/groovy/modules/classic/src/test/groovy/LocalPropertyTest.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-class LocalPropertyTest extends GroovyTestCase {
-
-    property x
-    
-	void testNormalPropertyAccess() {
-	    x = "abc"
-	    
-	    assert x == "abc"
-        assert x != "def"
-	}
-	
-	void testPropertyWithThis() {
-        this.x = "abc"
-	    
-	    assert this.x == "abc"
-	    assert this.x != "def"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/LocalVariableTest.groovy b/groovy/modules/classic/src/test/groovy/LocalVariableTest.groovy
deleted file mode 100644
index 8dd3258..0000000
--- a/groovy/modules/classic/src/test/groovy/LocalVariableTest.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-class LocalVariableTest extends GroovyTestCase {
-
-    void testAssert() {
-        x = "abc"
-
-        assert x != "foo"
-        assert x !=  null
-        assert x != "def"
-        assert x == "abc"
-        
-        assert x.equals("abc")
-	}
-    
-    void testUnknownVariable() {
-        try {
-	        y = x
-	        fail("x is undefined, should throw an exception")
-        }
-        catch (MissingPropertyException e) {
-			assert e.getProperty() == "x"            
-            text = e.message
-			//e.printStackTrace()
-            assert text == "No such property: x for class: LocalVariableTest"
-        }
-    }
-	    
-}
diff --git a/groovy/modules/classic/src/test/groovy/LogTest.groovy b/groovy/modules/classic/src/test/groovy/LogTest.groovy
deleted file mode 100644
index 6f5954f..0000000
--- a/groovy/modules/classic/src/test/groovy/LogTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-/** 
- * Tests the use of GroovyLog
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class LogTest extends GroovyTestCase {
-
-	void testUseLog() {
-	    file = "something.txt"
-	    
-        log = GroovyLog.newInstance(getClass())
-        
-        log.starting("Hey I'm starting up...")
-        
-	    log.openFile("Am about to open file ${file}")
-	    
-	    // ...
-	    
-	    log.closeFile("Have closed the file ${file}")
-
-        log.stopping("..Finished")
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/LogicTest.groovy b/groovy/modules/classic/src/test/groovy/LogicTest.groovy
deleted file mode 100644
index 8f6361e..0000000
--- a/groovy/modules/classic/src/test/groovy/LogicTest.groovy
+++ /dev/null
@@ -1,75 +0,0 @@
-class LogicTest extends GroovyTestCase {
-
-    void testAndWithTrue() {
-
-        x = false
-        n = 2
-        
-        if ( n > 1 && n < 10 ) {
-            x = true
-        }
-
-        assert x == true
-    }
-
-    void testAndWithFalse() {
-
-        x = false
-        n = 20
-        
-        if ( n > 1 && n < 10 ) {
-            x = true
-        }
-
-        assert x == false
-
-        n = 0
-        
-        if ( n > 1 && n < 10 ) {
-            x = true
-        }
-
-        assert x == false
-	}
-
-    void testOrWithTrue() {
-
-        x = false
-        n = 2
-        
-        if ( n > 1 || n < 10 ) {
-            x = true
-        }
-
-        assert x == true
-
-        x = false
-        n = 0
-        
-        if ( n > 1 || n == 0 ) {
-            x = true
-        }
-
-        assert x == true
-    }
-
-    void testOrWithFalse() {
-
-        x = false
-        n = 11
-        
-        if ( n < 10 || n > 20 ) {
-            x = true
-        }
-
-        assert x == false
-
-        n = 11
-        
-        if ( n < 10 || n > 20 ) {
-            x = true
-        }
-    
-        assert x == false
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/LoopBreakTest.groovy b/groovy/modules/classic/src/test/groovy/LoopBreakTest.groovy
deleted file mode 100644
index eccd0fc..0000000
--- a/groovy/modules/classic/src/test/groovy/LoopBreakTest.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-class LoopBreakTest extends GroovyTestCase {
-
-    void testWhileWithBreak() {
-        x = 0
-        while (true) {
-            if (x == 5) {
-                break
-            }
-            x++
-            
-            assert x < 10 : "Should never get here"
-        }
-        
-        println "worked: while completed with value ${x}"
-	}
-    
-    
-    void testDoWhileWithBreak() {
-        x = 0
-        do {
-            //println "in do-while loop and x = ${x}"
-            
-            if (x == 5) {
-                break
-            }
-            x++
-            
-            assert x < 10 : "Should never get here"
-        }
-    	while (true)
-        
-        println "worked: do-while completed with value ${x}"
-    }
-
-    void testForWithBreak() {
-        /** @todo commenting out the x = 0 causes bytecode gen error */
-        x = 0
-        for (x in 0..20) {
-            if (x == 5) {
-                break
-            }
-            assert x < 10 : "Should never get here"
-        }
-        
-        println "worked: for loop completed with value ${x}"
-    }
- }
diff --git a/groovy/modules/classic/src/test/groovy/MapConstructionTest.groovy b/groovy/modules/classic/src/test/groovy/MapConstructionTest.groovy
deleted file mode 100644
index b010722..0000000
--- a/groovy/modules/classic/src/test/groovy/MapConstructionTest.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-import java.util.HashMap
-import java.util.Map
-
-/** 
- * Tests creating Maps in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class MapConstructionTest extends GroovyTestCase {
-
-    void testMap() {
-        m = [ 1 : 'abc', 2 : 'def', 3 : 'xyz' ]
-
-        println(m)
-
-        mtoo = [ 1 : [ "innerKey" : "innerValue" ], 2 : m ]
-
-        println(mtoo)
-
-        assertMap(m)
-    }
-
-    testMapAsParameter() {
-        assertMap([ 1 : 'abc', 2 : 'def', 3 : 'xyz' ])
-    }
-
-    testMapViaHashMap() {
-        m = new HashMap()
-        m.put(1, 'abc')
-        m.put(2, 'def')
-        m.put(3, 'xyz')
-        assertMap(m)
-    }
-
-    assertMap(m) {
-        assert m instanceof Map
-        assert m.getClass().getName() == "java.util.HashMap"
-
-        result = 0
-        text = ""
-        for ( e in m ) {
-            result = result + e.key
-            text = text + e.value
-        }
-        assert result == 6
-        assert text == "abcdefxyz"
-	    
-        assert m.size() == 3
-
-        assert m[2] == 'def'
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/MapPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/MapPropertyTest.groovy
deleted file mode 100644
index b8c7761..0000000
--- a/groovy/modules/classic/src/test/groovy/MapPropertyTest.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class MapPropertyTest extends GroovyTestCase {
-
-    void testGetAndSetProperties() {
-        m = [ 'name' : 'James', 'location' : 'London', 'id':1 ]
-        
-        assert m.name == 'James'
-        assert m.location == 'London'
-        assert m.id == 1
-        
-        m.name = 'Bob'
-        m.location = 'Atlanta'
-        m.id = 2
-        
-        assert m.name == 'Bob'
-        assert m.location == 'Atlanta'
-        assert m.id == 2
-    }
-
-    void testSetupAndEmptyMap() {
-        m = [:]
-        
-        m.name = 'Bob'
-        m.location = 'Atlanta'
-        m.id = 2
-        
-        assert m.name == 'Bob'
-        assert m.location == 'Atlanta'
-        assert m.id == 2
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/MapTest.groovy b/groovy/modules/classic/src/test/groovy/MapTest.groovy
deleted file mode 100644
index 888cd1e..0000000
--- a/groovy/modules/classic/src/test/groovy/MapTest.groovy
+++ /dev/null
@@ -1,87 +0,0 @@
-class MapTest extends GroovyTestCase {
-
-    void testMap() {
-
-        m = [1:'one', '2':'two', 3:'three']
-
-		assert m.size() == 3
-		assert m.get(1) == 'one'
-        assert m.get('2') == 'two'
-        assert m.get(3) == 'three'
-        
-        assert m.containsKey(1)
-        assert m.containsKey('2')
-        assert m.containsKey(3)
-	
-        assert m.containsValue('one')
-        assert m.containsValue('two')
-        assert m.containsValue('three')
-	
-        assert m.keySet().size() == 3
-        assert m.values().size() == 3
-        assert m.keySet().contains(1)
-        assert m.values().contains('one')
-	
-        m.remove(1)
-        m.remove('2')
-		
-        assert m.size() == 1
-        assert m.get('1') == null
-        assert m.get('2') == null
-        
-		m.put('cheese', 'cheddar')
-		
-        assert m.size() == 2
-
-        assert m.containsKey("cheese")
-        assert m.containsValue("cheddar")
-		
-		
-		if ( m.containsKey("cheese") ) {
-            // ignore
-        }
-        else {
-            assert false : "should contain cheese!"
-        }
-		
-        if ( m.containsKey(3) ) {
-            // ignore
-        }
-        else {
-            assert false : "should contain 3!"
-        }
-    }
-    
-    void testEmptyMap() {
-    	m = [:]
-    	
-    	assert m.size() == 0
-    	assert !m.containsKey("cheese")
-    	
-    	m.put("cheese", "cheddar")
-
-        assert m.size() == 1
-        assert m.containsKey("cheese")
-    }
-    
-    void testMapMutation() {    
-        m = [ 'abc' : 'def', 'def' : 134, 'xyz' : 'zzz' ]
-	    
-	    assert m['unknown'] == null
-	    
-	    assert m['def'] == 134
-	    
-        println(m['xyz'])
-        
-        m['def'] = 'cafebabe'
-	    
-        assert m['def'] == 'cafebabe'
-	    
-        assert m.size() == 3
-	    
-        m.remove('def')
-	    
-        assert m['def'] == null
-        assert m.size() == 2
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/MethodCallTest.groovy b/groovy/modules/classic/src/test/groovy/MethodCallTest.groovy
deleted file mode 100644
index 43a39db..0000000
--- a/groovy/modules/classic/src/test/groovy/MethodCallTest.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-class MethodCallTest extends GroovyTestCase {
-
-    void testMethodCall() {
-        System.out.print("hello")
-        println("world!")
-	}
-	
-    void testObjectMethodCall() {
-        c = getClass()
-        assert c != null
-        assert c.name.endsWith("MethodCallTest")
-        assert c.getName().endsWith("MethodCallTest")
-    }
-	
-    void testObjectMethodCall2() {
-        s = "hello"
-        c = s.getClass()
-        assert c != null
-        assert c.name == "java.lang.String"
-        assert c.getName() == "java.lang.String"
-    }
-	
-	void testGetNameBug() {
-	    c = getClass()
-	    n = c.getName()
-        assert c.getName().endsWith("MethodCallTest")
-        assert n.endsWith("MethodCallTest")
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/MethodCallWithoutParenthesisTest.groovy b/groovy/modules/classic/src/test/groovy/MethodCallWithoutParenthesisTest.groovy
deleted file mode 100644
index 1df0f8e..0000000
--- a/groovy/modules/classic/src/test/groovy/MethodCallWithoutParenthesisTest.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-class MethodCallWithoutParenthesisTest extends GroovyTestCase {
-
-    flag = false
-    
-    void testMethodCallWithOneParam() {
-        flag = false
-        
-        methodWithOneParam "hello"
-        
-        assert flag
-    }
-    
-    void testMethodCallWithOneParamUsingThis() {
-        flag = false
-        
-        this.methodWithOneParam "hello"
-        
-        assert flag
-    }
-    
-    void methodWithOneParam(text) {
-        println("Called method with parameter ${text}")
-        assert text == "hello"
-        flag = true
-    }
-    
-    void testMethodCallWithTwoParams() {
-        value = methodWithTwoParams 5, 6
-        
-        assert value == 11
-    }
-    
-    void testMethodCallWithTwoParamsUsingThis() {
-        value = this.methodWithTwoParams 5, 6
-        
-        assert value == 11
-    }
-    
-    methodWithTwoParams(a, b) {
-        println("Called method with parameters ${a} and ${b}")
-        a + b
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy b/groovy/modules/classic/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy
deleted file mode 100644
index 534ca5f..0000000
--- a/groovy/modules/classic/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * To test access to method scoped variable within closure
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-class MethodParameterAccessWithinClosureTest extends GroovyTestCase { 
-    property cheese
-    property shop
-       
-    void setUp() {
-        cheese = null
-        shop = ["wensleydale"]
-    }              
-    void testSimpleMethodParameterAccess() { 
-        assert "wensleydale" == vendor1("wensleydale") 
-    }
-    void testMethodParameterWithDifferentNameToPropertyUsingClosure() {
-        assert "wensleydale" == vendor2("wensleydale")
-    }
-    void testMethodParameterWithSameNameAsPropertyUsingClosure() {
-        //@todo fails in 1.0b6   
-        //assert "wensleydale" == vendor3("wensleydale")
-    }
-    
-    private String vendor1(cheese) {
-        cheese
-    }
-    
-    private String vendor2(aCheese) {
-        shop.find() {it == aCheese}
-    }
-    
-    private String vendor3(cheese) {
-        // problem is that cheese here refers to property 'cheese'
-        // and not the method parameter 'cheese'
-        shop.find() {it == cheese}      
-    }
-} 
diff --git a/groovy/modules/classic/src/test/groovy/MinMaxTest.groovy b/groovy/modules/classic/src/test/groovy/MinMaxTest.groovy
deleted file mode 100644
index 757f351..0000000
--- a/groovy/modules/classic/src/test/groovy/MinMaxTest.groovy
+++ /dev/null
@@ -1,50 +0,0 @@
-/** 
- * Tests the min() and max() functions
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class MinMaxTest extends GroovyTestCase {
-
-    void testSimpleMinMax() {
-        list = [5, 2, 6, 1, 9, 8]
-        
-        n = list.min()
-        assert n == 1
-        
-        n = list.max()
-        assert n == 9
-    }
-    
-    void testMinMaxWithComparator() {
-		people = getPeople()
-		
-		// lets find the maximum by name
-		
-		order = new OrderBy( { it.get('@cheese') } )
-		
-		println("People ${people}")
-		
-		p = people.min(order)
-		
-		println("Found ${p}")
-		
-		assert p.get("@name") == "Joe" : "found person ${p}"
-		
-		p = people.max(order)
-		assert p.get("@name") == "Chris" : "found person ${p}"
-	}
-    
-    getPeople() {
-        builder = new NodeBuilder()
-        tree = builder.people {
-            person(name:'James', cheese:'Edam', location:'London')
-            person(name:'Bob', cheese:'Cheddar', location:'Atlanta')
-            person(name:'Chris', cheese:'Red Leicester', location:'London')
-            person(name:'Joe', cheese:'Brie', location:'London')
-        }
-        
-        return tree.children()
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/MinusEqualsTest.groovy b/groovy/modules/classic/src/test/groovy/MinusEqualsTest.groovy
deleted file mode 100644
index e63ff1e..0000000
--- a/groovy/modules/classic/src/test/groovy/MinusEqualsTest.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-class MinusEqualsTest extends GroovyTestCase {
-
-    void testIntegerMinusEquals() {
-        x = 4
-        y = 2
-        x -= y
-        
-        assert x == 2
-        
-        y -= 1
-        
-        assert y == 1
-    }
-
-    void testCharacterMinusEquals() {
-        Character x = 4
-        Character y = 2
-        x -= y
-        
-        assert x == 2
-        
-        y -= 1
-        
-        assert y == 1
-    }
-    
-    void testNumberMinusEquals() {
-        x = 4.2
-        y = 2
-        x -= y
-        
-        assert x == 2.2
-        
-        y -= 0.1
-        
-        assert y == 1.9
-    }
-    
-    void testStringMinusEquals() {
-        foo = "nice cheese"
-        foo -= "cheese"
-        
-        assert foo == "nice "
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ModuloTest.groovy b/groovy/modules/classic/src/test/groovy/ModuloTest.groovy
deleted file mode 100644
index f0abfb8..0000000
--- a/groovy/modules/classic/src/test/groovy/ModuloTest.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-class ModuloTest extends GroovyTestCase {
-  int modulo = 100
-
-  void testModuloLesser() {
-    for (i in 0..modulo-1) {
-      assert (i%modulo)==i
-    }
-  }
-
-  void testModuloEqual() {
-    for (i in 0..modulo) {
-      assert ((i*modulo) % modulo)==0
-    }
-  }
-
-  void testModuloBigger() {
-    for (i in 0..modulo-1) {
-      assert ((i*modulo+i) % modulo)==i
-    }
-  }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/MultilineStringTest.groovy b/groovy/modules/classic/src/test/groovy/MultilineStringTest.groovy
deleted file mode 100644
index 77e5044..0000000
--- a/groovy/modules/classic/src/test/groovy/MultilineStringTest.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-class MultilineStringTest extends GroovyTestCase {
-
-    void testMultilineString() {
-        s = "abcd
-efg
-
-        hijk
-        
-"
-        println(s)
-		assert s != null
-        idx = s.indexOf("i")
-		assert idx > 0
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/MultiplyDivideEqualsTest.groovy b/groovy/modules/classic/src/test/groovy/MultiplyDivideEqualsTest.groovy
deleted file mode 100644
index 5933a9a..0000000
--- a/groovy/modules/classic/src/test/groovy/MultiplyDivideEqualsTest.groovy
+++ /dev/null
@@ -1,80 +0,0 @@
-class MultiplyDivideEqualsTest extends GroovyTestCase {
-
-    void testIntegerMultiplyEquals() {
-        x = 2
-        y = 3
-        x *= y
-        
-        assert x == 6
-        
-        y *= 4
-        
-        assert y == 12
-    }
-
-    void testCharacterMultiplyEquals() {
-        Character x = 2
-        Character y = 3
-        x *= y
-        
-        assert x == 6
-        
-        y *= 4
-        
-        assert y == 12
-    }
-    
-    void testNumberMultiplyEquals() {
-        x = 1.2
-        y = 2
-        x *= y
-        
-        assert x == 2.4
-    }
-    
-    void testStringMultiplyEquals() {
-        x = "bbc"
-        y = 2
-        x *= y
-        
-        assert x == "bbcbbc"
-
-        x = "Guillaume"
-        y = 0
-        x *= y
-        assert x == ""
-    }
-    
-    
-    void testIntegerDivideEquals() {
-        x = 18
-        y = 6
-        x /= y
-        
-        assert x == 3.0
-        
-        y /= 3
-        
-        assert y == 2.0
-    }
-    
-    void testCharacterDivideEquals() {
-        Character x = 18
-        Character y = 6
-        x /= y
-        
-        assert x == 3.0
-        
-        y /= 3
-        
-        assert y == 2.0
-    }
-    
-    void testNumberDivideEquals() {
-        x = 10.4
-        y = 2
-        x /= y
-        
-        assert x == 5.2
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/NamedParameterTest.groovy b/groovy/modules/classic/src/test/groovy/NamedParameterTest.groovy
deleted file mode 100644
index 712f4e8..0000000
--- a/groovy/modules/classic/src/test/groovy/NamedParameterTest.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-class NamedParameterTest extends GroovyTestCase {
-
-    void testPassingNamedParametersToMethod() {
-        someMethod(name:"gromit", eating:"nice cheese", times:2)
-    }
-    
-    protected someMethod(args) {
-        assert args.name == "gromit"
-        assert args.eating == "nice cheese"
-        assert args.times == 2
-        assert args.size() == 3
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/NegateListsTest.groovy b/groovy/modules/classic/src/test/groovy/NegateListsTest.groovy
deleted file mode 100644
index 44b2253..0000000
--- a/groovy/modules/classic/src/test/groovy/NegateListsTest.groovy
+++ /dev/null
@@ -1,77 +0,0 @@
-/** 
- * Test to negate lists in Classic Groovy.
- * Test to check whether a given function is even/odd on a given domain.
- * 
- * @author Pilho Kim
- * @version $Revision$
- */
-class NegateListsTest extends GroovyTestCase {
-
-    void testNegateList() {
-        assert -[1, 2, 3] == [-1, -2, -3]
-
-        x = [1, 2, 3]
-        assert -x == [-1, -2, -3]
-        assert x == -[-1, -2, -3]
-        assert -(-x) == x
-
-        y = [-1, -2, -3]
-        assert -x == y
-        assert x == -y
-    }
-
-    void testBitwiseNegateList() {
-        assert ~[1, 2, 3] == [-2, -3, -4]
-
-        x = [1, 2, 3]
-        assert ~x == [-2, -3, -4]
-        assert x == ~[-2, -3, -4]
-        assert ~~x == x
-        assert ~(~x) == x
-
-        y = [-2, -3, -4]
-        assert ~x == [-2, -3, -4]
-        assert x == ~y
-    }
-
-    void testEvenFunction() {
-        PI = Math.PI
-
-        /////////////////////////////////////////////////////////////////////
-        // A case of partition having 10 subintervals.
-        // x = [0.0*PI/2, 0.1*PI/2, 0.2*PI/2, 0.3*PI/2, 0.4*PI/2, 0.5*PI/2, 
-        //               0.6*PI/2, 0.7*PI/2, 0.8*PI/2, 0.9*PI/2, 1.0*PI/2]
-
-        /////////////////////////////////////////////////////////////////////
-        // Generate a domain of function used om testing.
-        n = 1000    // the number of partitions for the interval 0..2/PI
-        x = []
-        for (i in 0..n) {
-            x << i*PI/n
-        }
-        // println x
-
-        cos = { Math.cos(it) }
-        assertTrue(isEvenFn(cos, x))
-
-        sin = { Math.sin(it) }
-        assertTrue(isOddFn(sin, x))
-
-        tan = { Math.tan(it) }
-        assertTrue(isOddFn(tan, x))
-    }
-
-    boolean isEvenFn(f, domain) {
-        // println domain.collect(f)
-        // println( (-domain).collect(f) )
-        println( (domain.collect(f)) == ((-domain).collect(f)) )
-        return (domain.collect(f)) == ((-domain).collect(f))
-    }
-
-    boolean isOddFn(f, domain) {
-        // println domain.collect(f)
-        // println(  (-domain).collect(f) )
-        println( domain.collect(f) == -((-domain).collect(f)) )
-        return domain.collect(f) == -((-domain).collect(f))
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/NegationTests.groovy b/groovy/modules/classic/src/test/groovy/NegationTests.groovy
deleted file mode 100644
index d8a478e..0000000
--- a/groovy/modules/classic/src/test/groovy/NegationTests.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-class NegationTests extends GroovyTestCase {
-
-	void testNegateInteger() {
-		a = -1
-		assert a == -1
-	}
-
-	void testNegateIntegerExpression() {
-		a = -1
-		a = -a
-		assert a == 1
-	}
-
-	void testNegateDouble() {
-		a = -1.0
-		assert a == -1.0
-	}
-
-	void testNegateDoubleExpression() {
-		a = -1.0
-		a = -a
-		assert a == 1.0
-	}
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/NewExpressionTest.groovy b/groovy/modules/classic/src/test/groovy/NewExpressionTest.groovy
deleted file mode 100644
index c8548db..0000000
--- a/groovy/modules/classic/src/test/groovy/NewExpressionTest.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-import org.codehaus.groovy.runtime.DummyBean
-
-class NewExpressionTest extends GroovyTestCase {
-
-    void testNewInstance() {
-        cheese = new String( "hey you hosers" )
-        
-        assert cheese != null
-        
-        println(cheese)
-    }
-
-    void testNewBeanNoArgs() {
-        bean = new DummyBean()
-        assert bean.name == "James"
-        assert bean.i == 123
-    }
-
-    void testNewBean1Args() {
-        bean = new DummyBean("Bob")
-        assert bean.name == "Bob"
-        assert bean.i == 123
-    }
-
-    void testNewBean2Args() {
-        bean = new DummyBean("Bob", 1707)
-        assert bean.name == "Bob"
-        assert bean.i == 1707
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/NoPackageTest.groovy b/groovy/modules/classic/src/test/groovy/NoPackageTest.groovy
deleted file mode 100644
index b0e87cf..0000000
--- a/groovy/modules/classic/src/test/groovy/NoPackageTest.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-class NoPackageTest
-	extends GroovyTestCase
-{
-    void testClassDef()
-    {
-        assert getClass().name == "NoPackageTest"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/NullPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/NullPropertyTest.groovy
deleted file mode 100644
index 5345dee..0000000
--- a/groovy/modules/classic/src/test/groovy/NullPropertyTest.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * @author Jeremy Rayner 
- */
-class NullPropertyTest extends GroovyTestCase { 
-    wensleydale = null 
-
-    void testNullProperty() { 
-        assert wensleydale == null 
-    } 
-} 
-
-
diff --git a/groovy/modules/classic/src/test/groovy/NumberMathTest.groovy b/groovy/modules/classic/src/test/groovy/NumberMathTest.groovy
deleted file mode 100644
index 492deec..0000000
--- a/groovy/modules/classic/src/test/groovy/NumberMathTest.groovy
+++ /dev/null
@@ -1,141 +0,0 @@
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/** 
- * Basic NumberMath test.
- * @see org.codehaus.groovy.runtime.NumberMath
- */
-class NumberMathTest extends GroovyTestCase {
-
-    void testPromotions() {
-    	C = '1'.toCharacter();
-    	B = new Byte("1");
-    	I = new Integer(1);
-    	L = new Long(1);
-    	F = new Float("1.0");
-    	D = new Double("1.0");
-    	BI = new BigInteger("1");
-    	BD = new BigDecimal("1.0");
-    	
-    	//+, -, and * all promote the same way, so sample the matrix
-    	assert C+B instanceof Integer;
-    	assert C-BD instanceof BigDecimal;
-    	assert B+F instanceof Double;
-    	assert B+I instanceof Integer;
-    	
-    	assert I+I instanceof Integer;
-    	assert I-F instanceof Double;
-    	assert I*D instanceof Double;
-    	assert I+BI instanceof BigInteger;
-    	assert I-BD instanceof BigDecimal;
-    	
-    	assert F*L instanceof Double;
-    	assert D+L instanceof Double;
-    	assert BI-L instanceof BigInteger;
-    	assert BD*L instanceof BigDecimal;
-    	
-    	assert F+F instanceof Double;
-    	assert F-BI instanceof Double;
-    	assert F*BD instanceof Double;
-    	
-    	assert F+D instanceof Double;
-    	assert BI-D instanceof Double;
-    	assert BD*D instanceof Double;
-    	
-    	assert BI+BI instanceof BigInteger;
-    	assert BD-BI instanceof BigDecimal;
-    	assert BD*BD instanceof BigDecimal;
-    	
-    	//Division (/) promotes differently so change the expected results:
-    	assert I/I instanceof BigDecimal;
-    	assert I/F instanceof Double;
-    	assert I/D instanceof Double;
-    	assert I/BI instanceof BigDecimal;
-    	assert I/BD instanceof BigDecimal;
-    	
-    	assert F/L instanceof Double;
-    	assert D/L instanceof Double;
-    	assert BI/L instanceof BigDecimal;
-    	assert BD/L instanceof BigDecimal;
-    	
-    	assert F/F instanceof Double;
-    	assert F/BI instanceof Double;
-    	assert F/BD instanceof Double;
-    	
-    	assert F/D instanceof Double;
-    	assert BI/D instanceof Double;
-    	assert BD/D instanceof Double;
-    	
-    	assert BI/BI instanceof BigDecimal;
-    	assert BD/BI instanceof BigDecimal;
-    	assert BD/BD instanceof BigDecimal;
-    }
-    
-    void testOperations() {
-    	I1 = new Integer(1);
-    	I2 = new Integer(2);
-    	I3 = new Integer(3);
-    	L1 = new Long(1);
-    	L2 = new Long(2);
-    	L3 = new Long(3);
-    	F1 = new Float("1.0");
-    	F2 = new Float("2.0");
-    	D1 = new Double("1.0");
-    	D2 = new Double("2.0");
-    	BI1 = new BigInteger("1");
-    	BI2 = new BigInteger("2");
-    	BD1 = new BigDecimal("1.0");
-    	BD2 = new BigDecimal("2.0");
-    	BD20 = new BigDecimal("2.00");
-
-    	
-    	assert I1/I2 instanceof BigDecimal;
-    	assert I1/I2 == new BigDecimal("0.5");
-
-    	assert I1\I2 instanceof Integer;
-    	assert I1\I2 == 0;
-
-    	assert I3\I2 instanceof Integer;
-    	assert I3\I2 == 1;
-    	
-    	assert L1\I2 instanceof Long;
-    	assert L1\I2 == 0;
-
-    	assert L3\L2 instanceof Long;
-    	assert L3\L2 == 1;
-    	
-    	assert BI1\BI2 instanceof BigInteger;
-    	assert BI1\BI2 == 0;
-    	
-    	assert I1/I3 instanceof BigDecimal;
-    	assert I1/I3 == new BigDecimal("0.3333333333");
-    	
-    	assert I2/I3 instanceof BigDecimal;
-    	assert I2/I3 == new BigDecimal("0.6666666667");
-    	    	
-    	assert I1/BD2 instanceof BigDecimal;
-    	
-    	//Test keeping max scale of (L, R or 10)
-    	BBD1 = new BigDecimal("0.12345678901234567");
-    	assert BD1 + BBD1 == new BigDecimal("1.12345678901234567");
-
-    	BBD2 = new BigDecimal(".000000000000000008");
-    	assert BBD1 + BBD2 == new BigDecimal("0.123456789012345678");
-	}
-	
-	void testUnsupportedIntDivision() {
-	   	try {
-    		1.0 \ 3;
-    	} catch (UnsupportedOperationException uoe) {
-    		return
-    	}
-    	fail("Should catch an UnsupportedOperationException")
-    	
-	   	try {
-    		1.0G \ 3;
-    	} catch (UnsupportedOperationException uoe) {
-    		return
-    	}
-    	fail("Should catch an UnsupportedOperationException")
-	} 
-}
diff --git a/groovy/modules/classic/src/test/groovy/OptionalReturnTest.groovy b/groovy/modules/classic/src/test/groovy/OptionalReturnTest.groovy
deleted file mode 100644
index e8fdea4..0000000
--- a/groovy/modules/classic/src/test/groovy/OptionalReturnTest.groovy
+++ /dev/null
@@ -1,103 +0,0 @@
-class OptionalReturnTest extends GroovyTestCase {
-
-	property y
-	
-    void testSingleExpression() {
-        value = foo()
-		
-        assert value == 'fooReturn'
-    }
-
-    void testLastExpressionIsSimple() {
-        value = bar()
-        
-        assert value == 'barReturn'
-    }
-
-    void testLastExpressionIsBooleanExpression() {
-        value = foo2()
-        
-        assert value
-
-        value = foo3()
-        
-        assert value == false
-    }
-
-    void testLastExpressionIsAssignment() {
-        value = assign()
-        
-        assert value == 'assignReturn'
-        
-        value = assignField()
-        
-        assert value == 'assignFieldReturn'
-    }
-
-    void testLastExpressionIsMethodCall() {
-        value = methodCall()
-        
-        assert value == 'fooReturn'
-    }
-
-    void testEmptyExpression() {
-        value = nullReturn()
-        
-        assert value == null
-    }
-
-//  now is  a compile time error
-//    void testVoidMethod() {
-//        value = voidMethod()
-//
-//        assert value == null
-//    }
-
-    void testNonAssignmentLastExpressions() {
-        value = lastIsAssert()
-        
-        assert value == null
-    }
-
-    foo() {
-        'fooReturn'
-    }	
-	
-    bar() {
-        x = 'barReturn'
-        x
-    }
-	
-    foo2() {
-        x = 'cheese'
-        x == 'cheese'
-    }
-	
-    foo3() {
-        x = 'cheese'
-        x == 'edam'
-    }
-	
-    assign() {
-        x = 'assignReturn'
-    }
-	
-    assignField() {
-        y = 'assignFieldReturn'
-    }
-    
-    nullReturn() {
-    }
-
-    lastIsAssert() {
-        assert 1 == 1
-    }
-
-    methodCall() {
-        foo()
-    }
-    
-    void voidMethod() {
-        foo()
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/OuterUser.java b/groovy/modules/classic/src/test/groovy/OuterUser.java
deleted file mode 100644
index fc30054..0000000
--- a/groovy/modules/classic/src/test/groovy/OuterUser.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package groovy;
-
-/**
- * <p>Sample class used for testing that groovy can call inner classes contructors.</p>
- * 
- * @author Guillaume Laforge
- * 
- * @cvs.revision $Revision$
- */
-public class OuterUser
-{
-    private String name;
-    private Integer age;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getAge() {
-        return age;
-    }
-
-    public void setAge(Integer age) {
-        this.age = age;
-    }
-
-    public static class InnerAddress
-    {
-        private String city;
-        private Integer zipcode;
-
-        public String getCity() {
-            return city;
-        }
-
-        public void setCity(String city) {
-            this.city = city;
-        }
-
-        public Integer getZipcode() {
-            return zipcode;
-        }
-
-        public void setZipcode(Integer zipcode) {
-            this.zipcode = zipcode;
-        }
-
-        public static class Street
-        {
-            private String name;
-            private int number;
-
-            public String getName() {
-                return name;
-            }
-
-            public void setName(String name) {
-                this.name = name;
-            }
-
-            public int getNumber() {
-                return number;
-            }
-
-            public void setNumber(int number) {
-                this.number = number;
-            }
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/OverloadInvokeMethodTest.groovy b/groovy/modules/classic/src/test/groovy/OverloadInvokeMethodTest.groovy
deleted file mode 100644
index d4e00b4..0000000
--- a/groovy/modules/classic/src/test/groovy/OverloadInvokeMethodTest.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * @version $Revision$
- */
-class OverloadInvokeMethodTest extends GroovyTestCase {
-    
-    void testBug() {
-        value = foo(123)
-        assert value == 246
-    }
-
-    /**
-     * Lets overload the invokeMethod() mechanism to provide an alias
-     * to an existing method
-     */
-    invokeMethod(String name, Object args) {
-        try {
-            return metaClass.invokeMethod(this, name, args)
-        }
-        catch (MissingMethodException e) {
-            if (name == 'foo') {
-                return metaClass.invokeMethod(this, 'bar', args)
-            }
-            else {
-                throw e
-            }
-        }
-    }
-    
-    bar(param) {
-        return param * 2
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/OverridePropertyGetterTest.groovy b/groovy/modules/classic/src/test/groovy/OverridePropertyGetterTest.groovy
deleted file mode 100644
index 2d62320..0000000
--- a/groovy/modules/classic/src/test/groovy/OverridePropertyGetterTest.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * test to ensure that overriding getter doesn't throw a NPE on access
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-class OverridePropertyGetterTest extends GroovyTestCase { 
-    property cheese
-       
-    void testSimpleMethodParameterAccess() { 
-        o = new OverridePropertyGetterTest()
-        p = new OverridePropertyGetterTest()
-        try {          
-            //@todo
-            //p.cheese = o.cheese
-        } catch (Exception e) {
-            fail(e.getMessage())
-        }
-    }
-    
-    public String getCheese() {
-        return cheese
-    }
-} 
diff --git a/groovy/modules/classic/src/test/groovy/PlusEqualsTest.groovy b/groovy/modules/classic/src/test/groovy/PlusEqualsTest.groovy
deleted file mode 100644
index afedaeb..0000000
--- a/groovy/modules/classic/src/test/groovy/PlusEqualsTest.groovy
+++ /dev/null
@@ -1,51 +0,0 @@
-class PlusEqualsTest extends GroovyTestCase {
-
-    void testIntegerPlusEquals() {
-        x = 1
-        y = 2
-        x += y
-        
-        assert x == 3
-        
-        y += 10
-        
-        assert y == 12
-    }
-
-    void testCharacterPlusEquals() {
-        Character x = 1
-        Character y = 2
-        x += y
-        
-        assert x == 3
-        
-        y += 10
-        
-        assert y == 12
-    }
-    
-    void testNumberPlusEquals() {
-        x = 1.2
-        y = 2
-        x += y
-        
-        assert x == 3.2
-        
-        y += 10.1
-        
-        assert y == 12.1
-    }
-    
-    void testStringPlusEquals() {
-        x = "bbc"
-        y = 2
-        x += y
-        
-        assert x == "bbc2"
-        
-        foo = "nice cheese"
-        foo += " gromit"
-        
-        assert foo == "nice cheese gromit"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/PostfixTest.groovy b/groovy/modules/classic/src/test/groovy/PostfixTest.groovy
deleted file mode 100644
index f971817..0000000
--- a/groovy/modules/classic/src/test/groovy/PostfixTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-class PostfixTest extends GroovyTestCase {
-
-    void testIntegerPostfix() {
-        x = 1
-        
-        y = x++
-        
-        assert y == 1
-        assert x == 2
-        
-        assert x++ == 2
-        assert x == 3
-    }
-    
-    void testDoublePostfix() {
-        x = 1.2
-        y = x++
-
-        assert y == 1.2
-        assert x++ == 2.2
-        assert x == 3.2
-    }
-
-    /*
-     void testStringPostfix() {
-        x = "bbc"
-        x++
-        
-        assert x == "bbd"
-    }
-    */
-}
diff --git a/groovy/modules/classic/src/test/groovy/PowerOperationTest.groovy b/groovy/modules/classic/src/test/groovy/PowerOperationTest.groovy
deleted file mode 100644
index a06d026..0000000
--- a/groovy/modules/classic/src/test/groovy/PowerOperationTest.groovy
+++ /dev/null
@@ -1,72 +0,0 @@
-/** 
- * Test Math Power Operation in Classic/New Groovy
- * 
- * @author Pilho Kim
- * @version $Revision$
- */
-class PowerOperationTest extends GroovyTestCase {
-
-    void testConstantPowerOperation() {
-        assert 2**5 == 32
-        assert -2**5 == -32
-        assert 3**4 == 81
-        assert -3**4 == -81
-        assert 3**-4 == 3.power(-4)
-        assert -3**-4 == -3.power(-4)
-        assert 7**2 - 7*3 + 2 == 30         //  49 - 21 + 2 = 30
-        assert -7**2 - 7*3 + 2 == -68       // -49 - 21 + 2 = -68
-        assert -(7**2) - 7*3 + 2 == -68     // -49 - 21 + 2 = -68
-        assert (-7)**2 - 7*3 + 2 == 30     //  49 - 21 + 2 = 30
-    }
-
-    void testPowerOperation() {
-        x = 9
-        --x
-        assert x == 8
-        println(--x)
-        assert x == 7
-        println(--x)
-        assert x == 6
-        println((--x)**3)
-        assert x == 5
-        assert (--x)**3 == 64
-        assert (-x**3) == -64
-        assert x == 4
-        assert (++x)**3 == 125
-        assert x == 5
-        assert (x++)**3 == 125
-        assert x == 6
-        println((x++)**3)
-        assert x == 7
-        println(x)
-        println("${x**2}")
-        println("${-x**2}")
-        assert x == 7
-        println("${(--x)**2}")
-        assert x == 6
-        assert (--x)**2 + x*2 - 1 == 34      // 5**2 + 5*2 - 1 = 34
-        assert x == 5
-        assert (x--)**2 + x*2 - 1 == 32      // 5**2 + 4*2 - 1 = 32
-        assert x == 4
-    }
-
-    void testConstantPowerAssignmentOperation() {
-        x = 5
-        x **= 2
-        assert x == 25
-        assert x**2 == 625
-        assert -x**2 != 625
-        assert -x**2 == -625
-    }
-
-    void testPowerAssignmentOperation() {
-        x = 5
-        y = 2
-        x **= y
-        assert x == 25
-        assert x**y == 625
-        assert x**-1 == 1/25
-        assert x**-y == 1/625
-        assert x**-y == x**(-y)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/PrefixTest.groovy b/groovy/modules/classic/src/test/groovy/PrefixTest.groovy
deleted file mode 100644
index ce339eb..0000000
--- a/groovy/modules/classic/src/test/groovy/PrefixTest.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-class PrefixTest extends GroovyTestCase {
-
-    void testIntegerPrefix() {
-        x = 1
-        
-        y = ++x
-        
-        assert y == 2
-        assert x == 2
-        
-        assert ++x == 3
-    }
-    
-    void testDoublePrefix() {
-        x = 1.2
-        y = ++x
-        
-        assert y == 2.2
-        assert x == 2.2
-        assert ++x == 3.2
-        assert x == 3.2
-    }
-
-    void testStringPrefix() {
-        x = "bbc"
-        x++
-        
-        assert x == "bbd"
-        
-        x--
-        x--
-        
-        assert x == "bbb"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/PrimitiveArraysTest.groovy b/groovy/modules/classic/src/test/groovy/PrimitiveArraysTest.groovy
deleted file mode 100644
index f4e52a0..0000000
--- a/groovy/modules/classic/src/test/groovy/PrimitiveArraysTest.groovy
+++ /dev/null
@@ -1,115 +0,0 @@
-class PrimitiveArraysTest extends GroovyTestCase {
-
-    c1Field = new char[]{}
-    char[] c2Field = new char[]{}
-    
-    i1Field = new int[]{}
-    int[] i2Field = new int[]{}
-    
-
-    d1Field = new double[]{}
-    double[] d2Field = new double[]{}
-
-    f1Field = new float[]{}
-    float[] f2Field = new float[]{}
-    
-    l1Field = new long[]{}
-    long[] l2Field = new long[]{}    
-
-
-    b1Field = new byte[]{}
-    byte[] b2Field = new byte[]{}
-    
-    
-    s1Field = new short[]{}
-    short[] s2Field = new short[]{}
-    
-    void testChar() {
-        assert c1Field.class == c2Field.class
-        ca = new char[]{'l','l'}
-        char[] cb = new char[]{'l','l'}
-        assert ca.class == cb.class
-        assert c1Field.class == ca.class
-        assert ca.class.name == "[C"
-        
-        ca.each{ assert it=='l' }
-        cb.each{ assert it=='l' }
-    }
-
-
-    void testInt() {
-        assert i1Field.class == i2Field.class
-        ia = new int[]{1,1}
-        int[] ib = new int[]{1,1}
-        assert ia.class == ib.class
-        assert i1Field.class == ia.class
-        assert ia.class.name == "[I"
-        
-        ia.each{ assert it==1 }
-        ib.each{ assert it==1 }
-    }
-
-
-    void testLong() {
-        assert l1Field.class == l2Field.class
-        la = new long[]{1,1}
-        long[] lb = new long[]{1,1}
-        assert la.class == lb.class
-        assert l1Field.class == la.class
-        assert la.class.name == "[J"
-        
-        la.each{ assert it==1l }
-        lb.each{ assert it==1l }
-    }
-
-
-    void testShort() {
-        assert s1Field.class == s2Field.class
-        sa = new short[]{1,1} 
-        short[] sb = new short[]{1,1}
-        assert sa.class == sb.class
-        assert s1Field.class == sa.class
-        assert sa.class.name == "[S"
-        
-        sa.each{ assert it==1 }
-        sb.each{ assert it==1 }
-    }
-
-    void testByte() {
-        assert b1Field.class == b2Field.class
-        ba = new byte[]{1,1}
-        byte[] bb = new byte[]{1,1}
-        assert ba.class == bb.class
-        assert b1Field.class == ba.class
-        assert ba.class.name == "[B"
-        
-        ba.each{ assert it==1 }
-        bb.each{ assert it==1 }
-    }
-    
-    
-    void testDouble() {
-        assert d1Field.class == d2Field.class
-        da = new double[]{1,1}
-        double[] db = new double[]{1,1}
-        assert da.class == db.class
-        assert d1Field.class == da.class
-        assert da.class.name == "[D"
-        
-        da.each{ assert it==1.0d }
-        db.each{ assert it==1.0d }
-    }
-
-    void testFloat() {
-        assert f1Field.class == f2Field.class
-        fa = new float[]{1,1}
-        float[] fb = new float[]{1,1}
-        assert fa.class == fb.class
-        assert f1Field.class == fa.class
-        assert fa.class.name == "[F"
-        
-        fa.each{ assert it==1.0f }
-        fb.each{ assert it==1.0f }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/PrimitiveTypeFieldTest.groovy b/groovy/modules/classic/src/test/groovy/PrimitiveTypeFieldTest.groovy
deleted file mode 100644
index 009dd96..0000000
--- a/groovy/modules/classic/src/test/groovy/PrimitiveTypeFieldTest.groovy
+++ /dev/null
@@ -1,56 +0,0 @@
-class PrimitiveTypeFieldTest extends GroovyTestCase {
-	private long longField
-	private static short shortField
-	
-	void setValue() {
-		longField = 1
-	}
-
-	getValue() {
-		x = longField
-		return x
-	}
-
-	void testPrimitiveField() {
-		setValue()
-		
-		value = getValue()
-		assert value == 1
-		
-		assert longField == 1
-	}
-
-	void testIntParamBug() {
-		assert bugMethod(123) == 246
-		assert bugMethod2(123) == 246
-		
-		// @todo GROOVY-133 
-		closure = { int x | x * 2 }
-		assert closure.call(123) == 246
-
-	}
-	
-	int bugMethod(int x) {
-		x * 2
-	}
-	
-	bugMethod2(int x) {
-		x * 2
-	}
-	void testStaticPrimitiveField() {
-		shortField = (Short) 123
-		
-		assert shortField == 123
-	}
-
-    void testIntLocalVariable() {
-    		int x = 123
-    		y = x + 1
-    		assert y == 124
-    	}
-    void testLongLocalVariable() {
-        long x = 123
-        y = x + 1
-        assert y == 124
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/PrimitiveTypesTest.groovy b/groovy/modules/classic/src/test/groovy/PrimitiveTypesTest.groovy
deleted file mode 100644
index 1141fc4..0000000
--- a/groovy/modules/classic/src/test/groovy/PrimitiveTypesTest.groovy
+++ /dev/null
@@ -1,65 +0,0 @@
-class PrimitiveTypesTest extends GroovyTestCase {
-
-	int getInt() {
-		return 1;
-	}
-	
-	short getShort() {
-		return 1;
-	}
-	
-	boolean getBoolean() {
-		return true;
-	}
-	
-	double getDouble() {
-		return 1.0;
-	}
-	
-	float getFloat() {
-		return 1.0;
-	}
-	
-	byte getByte() {
-		return 1;
-	}
-	
-	long getLong() {
-		return 1;
-	}
-
-	char getChar() {
-		return 'a';
-	}
-	
-	int getNextInt(int i) {
-		return i + 1
-	}
-	
-	short getNextShort(short i) {
-		return i + 1
-	}
-	
-	void testPrimitiveTypes() {
-		assert 1 == getInt()
-		assert 1 == getShort()
-		assert 1 == getByte()
-		assert 1 == getLong()
-		assert getBoolean()
-		assert getDouble() > 0.99
-		assert getFloat() > 0.99
-		assert 'a' == getChar()
-	}
-
-	void testPrimitiveParameters() {		
-		assert getNextInt(1) == 2
-		assert 3 == getNextInt(2)
-		
-		assert getNextShort((Short) 1) == 2
-		assert 3 == getNextShort((Short) 2)
-	}
-		
-	static void main(args) {
-		new PrimitiveTypesTest().testPrimitiveTypes()
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/PrintTest.groovy b/groovy/modules/classic/src/test/groovy/PrintTest.groovy
deleted file mode 100644
index 29ca434..0000000
--- a/groovy/modules/classic/src/test/groovy/PrintTest.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-class PrintTest extends GroovyTestCase {
-
-    /*
-    void testToString() {
-        assertToString("hello", 'hello')
-        
-        assertToString([], "[]")
-        assertToString([1, 2, "hello"], '[1, 2, hello]')
-        
-        assertToString([1:20, 2:40, 3:'cheese'], '[1=20, 2=40, 3=cheese]')
-        assertToString([:], "[:]")
-
-        assertToString([['bob':'drools', 'james':'geronimo']], '[[james:geronimo, bob:drools]]')
-        assertToString([5, ["bob", "james"], ["bob":"drools", "james":"geronimo"], "cheese"], '[5, [bob, james], [james:geronimo, bob:drools], cheese]')
-    }
-    */
-
-    void testInspect() {
-        assertInspect("hello", '"hello"')
-        
-        assertInspect([], "[]")
-        assertInspect([1, 2, "hello"], '[1, 2, "hello"]')
-        
-        assertInspect([1:20, 2:40, 3:'cheese'], '[1:20, 2:40, 3:"cheese"]')
-        assertInspect([:], "[:]")
-
-        assertInspect([['bob':'drools', 'james':'geronimo']], '[["james":"geronimo", "bob":"drools"]]')
-        assertInspect([5, ["bob", "james"], ["bob":"drools", "james":"geronimo"], "cheese"], '[5, ["bob", "james"], ["james":"geronimo", "bob":"drools"], "cheese"]')
-    }
-    
-    void testCPlusPlusStylePrinting() {
-        endl = "\n"
-        
-        System.out << "Hello world!" << endl
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy b/groovy/modules/classic/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy
deleted file mode 100644
index 1fcff90..0000000
--- a/groovy/modules/classic/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * test to ensure that private instance variables are visible to 
- * other instance variables of the same class
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-class PrivateVariableAccessFromAnotherInstanceTest extends GroovyTestCase implements Cloneable { 
-    property foo
-    private bar
-              
-    public PrivateVariableAccessFromAnotherInstanceTest() {
-        super()
-        foo = "foo"
-        bar = "bar"
-    }
-              
-    public Object clone() {
-        result = new PrivateVariableAccessFromAnotherInstanceTest()
-        result.foo = foo
-        result.bar = bar
-        return result
-    }
-    
-    void testClone() {
-        fred = new PrivateVariableAccessFromAnotherInstanceTest()
-        //@todo fails due to private access to 'bar'
-        //barney = fred.clone()
-        //assert !(barney === fred)
-    }
-} 
diff --git a/groovy/modules/classic/src/test/groovy/ProcessTest.groovy b/groovy/modules/classic/src/test/groovy/ProcessTest.groovy
deleted file mode 100644
index ea518ab..0000000
--- a/groovy/modules/classic/src/test/groovy/ProcessTest.groovy
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * check that groovy Process methods do their job.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-import java.io.*
-import java.util.*
-
-class ProcessTest extends GroovyTestCase {
-    property myProcess
-    
-    void setUp() {
-        myProcess = new MockProcess()
-    }
-    
-    void testProcessAppendBytes() {
-        myBytes = "mooky".getBytes()
-                  
-        myProcess << myBytes
-                  
-        result = myProcess.outputStream.toByteArray()          
-        assert result != null
-        assert Arrays.equals(myBytes,result)
-    }
-    void testProcessAppendTwoByteArrays() {
-        myBytes1 = "foo".getBytes()
-        myBytes2 = "bar".getBytes()
-                  
-        myProcess << myBytes1 << myBytes2
-                  
-        result = myProcess.outputStream.toByteArray()
-        assert result != null
-        assert result.size() == myBytes1.size() + myBytes2.size()          
-    }
-    
-    void testProcessAppend() {
-        myProcess << "mooky"
-        assert "mooky" == myProcess.outputStream.toString()
-    }
-    
-    void testProcessInputStream() {
-        assert myProcess.in instanceof InputStream
-        assert myProcess.in != null
-    }
-    
-    void testProcessText() {
-        assert "" == myProcess.text
-    }
-    
-    void testProcessErrorStream() {
-        assert myProcess.err instanceof InputStream
-        assert myProcess.err != null
-    }
-    
-    void testProcessOutputStream() {
-        assert myProcess.out instanceof OutputStream
-        assert myProcess.out != null
-    }
-    
-    // @todo - ps.waitForOrKill(secs) creates it's own thread, leave this out of test suite for now...
-    
-    void tearDown() {
-        myProcess.destroy()
-    }
-}
-
-/**
- * simple Process, used purely for test cases
- */
-class MockProcess extends Process {
-    private e
-    private i
-    private o
-    public MockProcess() {
-        e = new AnotherMockInputStream()
-        i = new AnotherMockInputStream()
-        o = new ByteArrayOutputStream()
-    }
-    void destroy() {}
-    int exitValue() { return 0 }
-    InputStream getErrorStream() { return e }
-    public InputStream getInputStream() { return i }
-    public OutputStream getOutputStream() { return o }
-    int waitFor() { return 0 }
-}
-
-/**
- * only needed for workaround in groovy, 
- *     new ByteArrayInputStream(myByteArray) doesn't work at mo... (28-Sep-2004)
- */
-class AnotherMockInputStream extends InputStream {
-    int read() { return -1 }
-}
diff --git a/groovy/modules/classic/src/test/groovy/PropertyTest.groovy b/groovy/modules/classic/src/test/groovy/PropertyTest.groovy
deleted file mode 100644
index 4bcc7bd..0000000
--- a/groovy/modules/classic/src/test/groovy/PropertyTest.groovy
+++ /dev/null
@@ -1,118 +0,0 @@
-/** 
- * Tests the use of properties in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class PropertyTest extends GroovyTestCase {
-
-    void testNormalPropertyGettersAndSetters() {
-        
-        println("About to create Foo")
-        
-        foo = new Foo()
-
-        println("created ${foo}")
-        
-        value = foo.getMetaClass()
-        
-        println("metaClass ${value}")
-        
-        println(foo.inspect())
-        
-        println("name ${foo.name}, blah ${foo.blah}")
-        
-        assert foo.name == "James"
-        assert foo.getName() == "James"
-        
-        assert foo.location == "London"
-        assert foo.getLocation() == "London"
-        
-        assert foo.blah == 9
-        assert foo.getBlah() == 9
-        
-        foo.name = "Bob"
-        foo.location = "Atlanta"
-        
-        assert foo.name == "Bob"
-        assert foo.getName() == "Bob"
-        
-        assert foo.location == "Atlanta"
-        assert foo.getLocation() == "Atlanta"
-    }
-    
-    void testOverloadedGetter() {
-        
-        foo = new Foo()
-
-        println("count ${foo.count}")
-        
-        assert foo.getCount() == 1
-        assert foo.count == 1
-        
-        foo.count = 7
-        
-        assert foo.count == 7
-        assert foo.getCount() == 7
-    }
-
-    void testNoSetterAvailableOnPrivateProperty() {
-        foo = new Foo()
-        
-        // methods should fail on non-existent method calls
-        shouldFail { foo.blah = 4 }
-        shouldFail { foo.setBlah(4) }
-    }
-    
-    void testCannotSeePrivateProperties() {
-	    foo = new Foo()
-	    
-	    // property access fails on non-existent property
-		shouldFail { x = foo.invisible }														
-	    
-	    // methods should fail on non-existent method calls
-	    shouldFail { foo.getQ() }
-	}
-
-    void testConstructorWithNamedProperties() {
-        foo = new Foo(name:'Gromit', location:'Moon')
-        
-        assert foo.name == 'Gromit'
-        assert foo.location == 'Moon'
-        
-        println("created bean ${foo.inspect()}")
-    }
-    
-    void testToString() {
-        foo = new Foo(name:'Gromit', location:'Moon')
-
-		println foo
-	}
-
-    void testArrayLengthProperty() {
-		// create two arrays, since all use the same MetaArrayLengthProperty object -
-		// make sure it can work for all types and sizes
-		i = new Integer[5]
-		s = new String[10]
-		
-		// put something in it to make sure we're returning the *allocated* length, and
-		// not the *used* length
-		s[0] = "hello"
-		
-		assert i.length == 5
-		assert s.length == 10
-		
-		// this property does not mean there is a getLength() method
-		shouldFail { i.getLength() }
-		
-		// verify we can't set this property, it's read-only
-		shouldFail { i.length = 6 }
-	}
-
-    void testGstringAssignment() {
-        foo = new Foo()
-        foo.body = "${foo.name}"
-        assert foo.body == "James"
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/PropertyTest2.groovy b/groovy/modules/classic/src/test/groovy/PropertyTest2.groovy
deleted file mode 100644
index c4f4ac5..0000000
--- a/groovy/modules/classic/src/test/groovy/PropertyTest2.groovy
+++ /dev/null
@@ -1,87 +0,0 @@
-/** 
- * Tests the use of new property methods in Groovy: eachProperty(), eachPropertyName(), and
- * allProperties()
- * 
- * @author john stump
- * @version $Revision$
- */
-class PropertyTest2 extends GroovyTestCase {
-
-    void testEachPropertyName() {
-        foo = new Foo()
-		
-		// these are the properties that should be there
-		props = ['name', 'count', 'location', 'blah']
-		foo.eachPropertyName { |prop|
-			//println "looking for ${prop} in ${props}"
-			
-			// we should not see private or protected properties
-			assert prop != "invisible"
-			assert prop != "prot"
-			
-			// remove this one from the list
-			props = props - [prop]
-		}
-		
-		// make sure there are none left over
-		//println "count left in props list is ${props.count()}"
-		assert props.count() == 0
-    }
-	
-	void testEachProperty() {
-        foo = new Foo()
-		
-		// these are the properties and their values that should be there
-		props = ['name':'James', 'count':1, 'location':'London', 'blah':9]
-		foo.eachProperty { |prop|
-			//println "looking for ${prop.name} in ${props}"
-			
-			// we should not see private or protected properties
-			assert prop.name != "invisible"
-			assert prop.name != "prot"
-			
-			value = props[prop.name]
-			if(value != null)
-				assert prop.value == value
-			
-			// remove this one from the map
-			props.remove(prop.name)
-		}
-		
-		// make sure there are none left over
-		//println "count left in props map is ${props.size()}"
-		assert props.size() == 0
-	}
-	
-	void testAllProperties() {
-        foo = new Foo()
-		
-		// these are the properties that should be there
-		props = ['name', 'count', 'location', 'blah']
-		
-		foo.allProperties().each { props -= [it.name] }
-		
-		// there should be none left
-		//println props
-		assert props.size() == 0
-	}
-	
-	// make sure allProperties() works with expando objects too
-    void testAllPropertiesExpando() {
-        foo = new Expando()
-		
-		foo.name = 'John'
-		foo.location = 'Colorado'
-		foo.count = 23
-		foo.blah = true
-		
-		// these are the properties that should be there
-		props = ['name', 'count', 'location', 'blah']
-		foo.allProperties().each { props -= [it.name] }
-		
-		// there should be none left
-		//println props
-		assert props.size() == 0
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/PropertyWithoutDotTest.groovy b/groovy/modules/classic/src/test/groovy/PropertyWithoutDotTest.groovy
deleted file mode 100644
index 7761103..0000000
--- a/groovy/modules/classic/src/test/groovy/PropertyWithoutDotTest.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-class PropertyWithoutDotTest extends GroovyTestCase {
-    getFoo() {
-        return "cheese"
-    }
-    
-    void testProperty() {
-        value = foo
-        
-        assert value == "cheese"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/RangeTest.groovy b/groovy/modules/classic/src/test/groovy/RangeTest.groovy
deleted file mode 100644
index 10fad1d..0000000
--- a/groovy/modules/classic/src/test/groovy/RangeTest.groovy
+++ /dev/null
@@ -1,218 +0,0 @@
-class RangeTest extends GroovyTestCase {
-	
-	void testRange() {
-	    x = 0
-
-	    for ( i in 0..9 ) {
-	        x = x + i
-	    }
-
-	    assert x == 45
-	    
-	    x = 0
-
-	    for ( i in 0...10 ) {
-	        x = x + i
-	    }
-
-	    assert x == 45
-	    
-	    x = 0
-
-	    for ( i in 0..'\u0009' ) {
-	        x = x + i
-	    }
-
-	    assert x == 45
-	}
-	
-	void testRangeEach() {
-	    x = 0
-
-	    (0..9).each {
-	        x = x + it
-	    }
-
-	    assert x == 45
-	    
-	    x = 0
-
-	    (0...10).each {
-	        x = x + it
-	    }
-
-	    assert x == 45
-	}
-
-	void testIntStep() {
-	    assertStep(0..9, 3, [0, 3, 6, 9])
-	    assertStep(0...10, 3, [0, 3, 6, 9])
-	    
-	    assertStep(9..0, 3, [9, 6, 3, 0])
-	    assertStep(9...0, 3, [9, 6, 3])
-	}
-	
-	void testObjectStep() {
-	    assertStep('a'..'f', 2, ['a', 'c', 'e'])
-	    assertStep('a'...'e', 2, ['a', 'c'])
-	    
-	    assertStep('z'..'v', 2, ['z', 'x', 'v'])
-	    assertStep('z'...'v', 2, ['z', 'x'])
-	}
-	
-	void testIterateIntRange() {
-	    assertIterate(0..9, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
-	    assertIterate(1...8, [1, 2, 3, 4, 5, 6, 7])
-	    assertIterate(7..1, [7, 6, 5, 4, 3, 2, 1])
-	    assertIterate(6...1, [6, 5, 4, 3, 2])
-	}
-	
-	void testIterateObjectRange() {
-	    assertIterate('a'..'d', ['a', 'b', 'c', 'd'])
-	    assertIterate('a'...'d', ['a', 'b', 'c'])
-	    assertIterate('z'..'x', ['z', 'y', 'x'])
-	    assertIterate('z'...'x', ['z', 'y'])
-	}
-	
-	void testRangeContains() {
-	    range = 0..10
-	    assert range.contains(0)
-	    assert range.contains(10)
-	    
-	    range = 0...5
-	    assert range.contains(0)
-	    assert ! range.contains(5)
-	}
-	
-	void testBackwardsRangeContains() {
-	    range = 10..0
-	    assert range.contains(0)
-	    assert range.contains(10)
-	    
-	    range = 5...1
-	    assert range.contains(5)
-	    assert ! range.contains(1)
-	}
-	
-	void testObjectRangeContains() {
-	    range = 'a'..'x'
-	    assert range.contains('a')
-	    assert range.contains('x')
-	    assert range.contains('z') == false
-	    
-	    range = 'b'...'f'
-	    assert range.contains('b')
-	    assert ! range.contains('g')
-	    assert ! range.contains('f')
-	    assert ! range.contains('a')
-	}
-	
-	void testBackwardsObjectRangeContains() {
-	    range = 'x'..'a'
-	    assert range.contains('a')
-	    assert range.contains('x')
-	    assert range.contains('z') == false
-	    
-	    range = 'f'...'b'
-	    assert ! range.contains('g')
-	    assert range.contains('f')
-	    assert range.contains('c')
-	    assert ! range.contains('b')
-	}
-	
-	void testIntRangeToString() {
-	    assertToString(0..10, "0..10")
-	    assertToString([1, 4..10, 9], "[1, 4..10, 9]")
-	    
-	    assertToString(0...11, "0..10")
-	    assertToString([1, 4...11, 9], "[1, 4..10, 9]")
-	    
-	    
-	    assertToString(10..0, "10..0")
-	    assertToString([1, 10..4, 9], "[1, 10..4, 9]")
-	    
-	    assertToString(11...0, "11..1")
-	    assertToString([1, 11...4, 9], "[1, 11..5, 9]")
-	}
-	
-	void testObjectRangeToString() {
-	    assertToString('a'..'d', 'a..d', '"a".."d"')
-	    assertToString('a'...'d', 'a..c', '"a".."c"')
-	    assertToString('z'..'x', 'z..x', '"z".."x"')
-	    assertToString('z'...'x', 'z..y', '"z".."y"')
-	}
-	
-	void testRangeSize() {
-	    assertSize(1..10, 10)
-	    assertSize(11...21, 10)
-	    assertSize(30..21, 10)
-	    assertSize(40...30, 10)
-	}
-	
-	void testStringRange() {
-	    range = 'a'..'d'
-	    
-	    list = []
-	    range.each { list << it }
-	    assert list == ['a', 'b', 'c', 'd']
-	    
-	    s = range.size()
-	    assert s == 4
-	}
-	
-	void testBackwardsStringRange() {
-	    range = 'd'..'a'
-	    
-	    list = []
-	    range.each { list << it }
-	    assert list == ['d', 'c', 'b', 'a']
-	    
-	    s = range.size()
-	    assert s == 4
-	}
-	
-	protected void assertIterate(range, expected) {
-	    list = []
-	    for (it in range) {
-	        list << it
-	    }
-	    assert list == expected : "for loop on ${range}"
-	    
-		list = []
-	    range.each { list << it}
-	    assert list == expected : "each() on ${range}"
-	}
-	
-	protected void assertSize(range, expected) {
-	    size = range.size()
-	    assert size == expected : range
-	}
-	
-	protected void assertToString(range, expected) {
-	    text = range.toString()
-	    assert text == expected : "toString() for ${range}"
-	    text = range.inspect()
-	    assert text == expected : "inspect() for ${range}"
-	}
-	
-	protected void assertToString(range, expectedString, expectedInspect) {
-	    text = range.toString()
-	    assert text == expectedString : "toString() for ${range}"
-	    text = range.inspect()
-	    assert text == expectedInspect : "inspect() for ${range}"
-	}
-	
-	protected void assertStep(range, stepValue, expected) {
-	    list = []
-	    range.step(stepValue) {
-	        list << it
-	    }
-	    assert list == expected
-
-	    list = []
-	    for (it in range.step(stepValue)) {
-	        list << it
-	    }
-	    assert list == expected
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/ReadLineTest.groovy b/groovy/modules/classic/src/test/groovy/ReadLineTest.groovy
deleted file mode 100644
index 85323d4..0000000
--- a/groovy/modules/classic/src/test/groovy/ReadLineTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-import java.io.File
-
-/**
- * Test to ensure that readLine() method works on Reader/InputStream
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-class ReadLineTest extends GroovyTestCase {
-    property file
-    void setUp() {
-        file = new File("src/test/groovy/ReadLineTest.groovy")
-    }
-    void testReadOneLineFromReader() {
-        file.withReader() {line = it.readLine()}
-        assert line == "import java.io.File"
-    }
-    
-    void testReadOneLineFromInputStream() {
-        file.withInputStream() {line = it.readLine()}
-        assert line == "import java.io.File"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/RegularExpressionsTest.groovy b/groovy/modules/classic/src/test/groovy/RegularExpressionsTest.groovy
deleted file mode 100644
index f806bd2..0000000
--- a/groovy/modules/classic/src/test/groovy/RegularExpressionsTest.groovy
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- * Tests the regular expression syntax.
- *
- * @author Sam Pullara
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
- 
-import java.util.regex.Matcher
-import java.util.regex.Pattern
-
-class RegularExpressionsTest extends GroovyTestCase {
- 	
- 	void testFindRegex() {
-
- 		assert "cheese" =~ "cheese"
- 		
- 		regex = "cheese"
- 		string = "cheese"
- 		assert string =~ regex
- 		
- 		i = 0
- 		m = "cheesecheese" =~ "cheese"
- 		
- 		assert m instanceof Matcher
- 		
- 		while(m) { i = i + 1 }
- 		assert i == 2
- 		
- 		i = 0
- 		m = "cheesecheese" =~ "e+"
- 		while(m) { i = i + 1 }
- 		assert i == 4
- 		
- 		m.reset()
- 		m.find()
- 		m.find()
- 		m.find()
- 		assert m.group() == "ee"
- 	}
- 	
- 	void testMatchRegex() {
- 	
- 		assert "cheese" ==~ "cheese"
- 		
- 		assert !("cheesecheese" ==~ "cheese")
- 		
- 	}
- 	
- 	property i
- 	
- 	void testRegexEach() {
- 		i = 0
- 		("cheesecheese" =~ "cheese").each {value | println(value); i = i + 1}
- 		assert i == 2
-
- 		i = 0
- 		("cheesecheese" =~ "ee+").each { println(it); i = i + 1}
- 		assert i == 2
- 	}
- 	
- 	void testPatterns() {
- 		pattern = ~"foo"
- 		assert pattern instanceof Pattern
- 		assert pattern.matcher("foo").matches()
- 		assert !pattern.matcher("bar").matches()
- 		
- 		pattern = ~<<<EOS
-foo
-EOS
- 		assert pattern.matcher("foo").matches()
- 		assert !pattern.matcher("bar").matches()
- 		
- 		assert "foofoofoo" =~ ~"foo"
- 	}
- 	
- 	void testMatcher() {
- 	    matcher = "cheese-cheese" =~ "cheese"
- 	    answer = matcher.replaceAll("edam")
- 	    assert answer == 'edam-edam'
- 	    
- 	    cheese = ("cheese cheese!" =~ "cheese").replaceFirst("nice")
- 	    assert cheese == "nice cheese!"
- 	}
- 	
- 	void testSubscript() {
- 	    a = "cheesecheese"
- 	    b = a =~ "e+"
- 	    value = b[2]
- 	    assert value == "ee"
- 	    
- 	    value = b[0, 2]
- 	    
- 	    assert value == "eeee"
- 	    
- 	    value = b[0, 1..2]
- 	    
- 	    assert value == "eeeee"
- 	}
-
-    void testGetLastMatcher() {
-        assert "cheese" ==~ "cheese"
-        assert Matcher.getLastMatcher().matches()
-
-        switch("cheesefoo") {
-            case ~"cheesecheese":
-                assert false;
-            case ~"(cheese)(foo)":
-                m = Matcher.getLastMatcher();
-                assert m.group(0) == "cheesefoo"
-                assert m.group(1) == "cheese"
-                assert m.group(2) == "foo"
-                assert m.groupCount() == 2
-                break;
-            default:
-                assert false
-        }
-    }
-
- 	static void main(args) {
- 	    regextest = new RegularExpressionsTest();
- 	    regextest.testFindRegex();
- 	    regextest.testMatchRegex();
- 	    regextest.testRegexEach();
- 	    regextest.testPatterns();
- 	    regextest.testMatcher();
- 	    regextest.testSubscript();
- 	    regextest.testGetLastMatcher();
- 	}
- }
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/ReturnTest.groovy b/groovy/modules/classic/src/test/groovy/ReturnTest.groovy
deleted file mode 100644
index 0e9b871..0000000
--- a/groovy/modules/classic/src/test/groovy/ReturnTest.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-/** 
- * Tests the use of returns in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class ReturnTest extends GroovyTestCase {
-    void testIntegerReturnValues() {
-        value = foo(5)
-        assert value == 10
-    }
-
-    void testBooleanReturnValues() {
-        value = bar(6)
-        assert value
-    }
-
-	foo(x) {
-	    return ( x * 2 )
-	}
-	
-    bar(x) {
-        return x > 5
-    }
-    
-    void testVoidReturn() {
-    	explicitVoidReturn()
-    	implicitVoidReturn()
-		explicitVoidReturnWithoutFinalReturn()
-		implicitVoidReturnWithoutFinalReturn()
-	}
-	 
-	void explicitVoidReturn() {
-		return
-	}
-
-	implicitVoidReturn() {
-		return
-	}
-	
-    void explicitVoidReturnWithoutFinalReturn() {
-    	return;
-    	x = 4;
-    	if (x == 3) {
-    		return;
-    	} else {
-    		try {
-    			x = 3;
-    			return;
-    		} finally {
-    			//do nothing
-    		}
-    	}
-    }
-
-    implicitVoidReturnWithoutFinalReturn() {
-    	x = 4;
-    	if (x == 3) {
-    		return;
-    	} else {
-    		try {
-    			x = 3;
-    			return;
-    		} finally {
-    			//do nothing
-    		}
-    	}
-    } 
-}
diff --git a/groovy/modules/classic/src/test/groovy/SafeNavigationTest.groovy b/groovy/modules/classic/src/test/groovy/SafeNavigationTest.groovy
deleted file mode 100644
index d8e3cc2..0000000
--- a/groovy/modules/classic/src/test/groovy/SafeNavigationTest.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-class SafeNavigationTest extends GroovyTestCase {
-
-    void testNormalPropertyNavigation() {
-        x = ['foo':['bar':123, 'x':456], 'z':99]
-        
-        y = x->foo->bar
-        
-        println("found y ${x->foo->bar}")
-        
-        assert y == 123
-    }
-
-    void testNullPropertyNavigation() {
-        x = null
-        
-		y = x->foo->bar
-        
-        assert y == null
-
-
-       java.awt.Color color = null
-        a = color->alpha
-        assert a == null
-
-    }
-    
-    void testNormalMethodCall() {
-        x = 1234
-        
-        y = x->toString()
-        
-        assert y == "1234"
-    }
-
-    void testNullMethodCall() {
-        x = null
-        
-        y = x->toString()
-        
-        assert y == null
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/SampleMain.groovy b/groovy/modules/classic/src/test/groovy/SampleMain.groovy
deleted file mode 100644
index 2daeb2e..0000000
--- a/groovy/modules/classic/src/test/groovy/SampleMain.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-class SampleMain {
-    static void main(args) {
-        for (arg in args) {
-            println("Argument: " + arg)
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/SerializeTest.groovy b/groovy/modules/classic/src/test/groovy/SerializeTest.groovy
deleted file mode 100644
index 35402ac..0000000
--- a/groovy/modules/classic/src/test/groovy/SerializeTest.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-import java.io.ByteArrayInputStream
-import java.io.ByteArrayOutputStream
-import java.io.ObjectInputStream
-import java.io.ObjectOutputStream
-
-class SerializeTest extends GroovyTestCase {
-
-    void testFoo() {
-        foo = new Foo()
-        
-        println("Created ${foo}")
-        
-        foo.name = "Gromit"
-        foo.location = "Moon"
-        
-        buffer = write(foo)
-        object = read(buffer)
-        
-        println("Found ${object}")
-        println("Found ${object} with name ${object.name} and location ${object.location}")
-        assert object != null
-        assert object.getMetaClass() != null : "Should have a metaclass!"
-        
-        assert object.name == "Gromit"
-        
-        assert object.class.name == "Foo" 
-        assert object instanceof Foo
-        assert object.location == "Moon"
-    }
-    
-    
-    write(object) {
-        buffer = new ByteArrayOutputStream()
-        out = new ObjectOutputStream(buffer)
-        out.writeObject(object)
-        out.close()
-        return buffer.toByteArray()
-    }
-    
-    read(buffer) {
-        input = new ObjectInputStream(new ByteArrayInputStream(buffer))
-        object = input.readObject()
-        input.close()
-        return object
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/ShellTest.groovy b/groovy/modules/classic/src/test/groovy/ShellTest.groovy
deleted file mode 100644
index 8f0f4a5..0000000
--- a/groovy/modules/classic/src/test/groovy/ShellTest.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-class ShellTest extends GroovyTestCase {
-
-    void testReadAndWriteVariable() {
-        shell = new GroovyShell()
-        
-        shell.foo = 1
-        
-        value = shell.evaluate(<<<EOF
-println('foo is currently ' + foo)
-foo = 2 
-println('foo is now ' + foo)                
-return foo
-EOF, "Dummy1.groovy")
-
-        
-        assert value == 2
-        assert shell.foo == 2 : "Value is now ${shell.foo}"
-	}
-    
-    void testDefineNewVariable() {
-        shell = new GroovyShell()
-        
-        value = shell.evaluate( <<<EOF2
-bar = 3 
-println('bar is now ' + bar)                
-return bar
-EOF2, "Dummy2.groovy")
-
-        
-        assert value == 3
-        assert shell.bar == 3 : "Value is now ${shell.bar}"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/SocketTest.groovy b/groovy/modules/classic/src/test/groovy/SocketTest.groovy
deleted file mode 100644
index 399939f..0000000
--- a/groovy/modules/classic/src/test/groovy/SocketTest.groovy
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * check that groovy Socket methods do their job.
- *
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-import java.io.*
-import java.net.*
-
-class SocketTest extends GroovyTestCase {
-    property mySocket
-    
-    void setUp() {
-        mySocket = new MockSocket()
-    }
-    
-    void testSocketAppendBytes() {
-        myBytes = "mooky".getBytes()
-                  
-        mySocket << myBytes
-                  
-        result = mySocket.outputStream.toByteArray()          
-        assert result != null
-        assert Arrays.equals(myBytes,result)
-    }
-    void testSocketAppendTwoByteArrays() {
-        myBytes1 = "foo".getBytes()
-        myBytes2 = "bar".getBytes()
-                  
-        mySocket << myBytes1 << myBytes2
-                  
-        result = mySocket.outputStream.toByteArray()
-        assert result != null
-        assert result.size() == myBytes1.size() + myBytes2.size()          
-    }
-    
-    void testSocketAppend() {
-        mySocket << "mooky"
-        assert "mooky" == mySocket.outputStream.toString()
-    }
-    
-    void testSocketWithStreamsClosure() {
-        mySocket.withStreams {i,o|
-            assert i instanceof InputStream
-            assert i != null
-                      
-            assert o instanceof OutputStream          
-            assert o != null          
-        }
-    }
-    
-    void tearDown() {
-        mySocket.close()
-    }
-}
-
-/**
- * simple, unconnected Socket, used purely for test cases
- */
-class MockSocket extends Socket {
-    private i
-    private o
-    public MockSocket() {
-        i = new MockInputStream()
-        o = new ByteArrayOutputStream()
-    }
-    public InputStream getInputStream() { return i }
-    public OutputStream getOutputStream() { return o }
-}
-
-/**
- * only needed for workaround in groovy, 
- *     new ByteArrayInputStream(myByteArray) doesn't work at mo... (28-Sep-2004)
- */
-class MockInputStream extends InputStream {
-    int read() { return -1 }
-}
diff --git a/groovy/modules/classic/src/test/groovy/SortTest.groovy b/groovy/modules/classic/src/test/groovy/SortTest.groovy
deleted file mode 100644
index 3619557..0000000
--- a/groovy/modules/classic/src/test/groovy/SortTest.groovy
+++ /dev/null
@@ -1,39 +0,0 @@
-/** 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class SortTest extends GroovyTestCase {
-
-    void testSortWithOrderBy() {
-        list = getPeople()
-        order = new OrderBy( { it.cheese } )
-        list.sort(order)
-        
-        assert list[0].name == 'Joe'
-        assert list[-1].name == 'Chris'
-        assert list.name == ['Joe', 'Bob', 'James', 'Chris']
-
-        println "Sorted by cheeee"
-        list.each { println it.dump() }
-    }
-    
-    void testSortWithClosure() {
-        list = getPeople()
-        list.sort { it.cheese }
-        
-        assert list.name == ['Joe', 'Bob', 'James', 'Chris']
-
-        println "Sorted by cheeee"
-        list.each { println it.dump() }
-    }
-    
-    getPeople() {
-        answer = []
-        answer << new Expando(name:'James', cheese:'Edam', location:'London')
-        answer << new Expando(name:'Bob', cheese:'Cheddar', location:'Atlanta')
-        answer << new Expando(name:'Chris', cheese:'Red Leicester', location:'London')
-        answer << new Expando(name:'Joe', cheese:'Brie', location:'London')
-        return answer
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/StaticThisTest.groovy b/groovy/modules/classic/src/test/groovy/StaticThisTest.groovy
deleted file mode 100644
index e939853..0000000
--- a/groovy/modules/classic/src/test/groovy/StaticThisTest.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-class StaticThisTest extends GroovyTestCase {
-
-	void testThisFail() {
-		staticMethod()
-	}
-	
-	static staticMethod() {
-	    foo = this
-	    
-	    assert foo != null
-	    assert foo.name.endsWith("StaticThisTest")
-	    
-	    println("this: " + this)
-	    
-	    s = super
-	    
-	    assert s != null
-	    assert s.name.endsWith("GroovyTestCase")
-
-        println("super: " + super)
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/StringOperationTest.groovy b/groovy/modules/classic/src/test/groovy/StringOperationTest.groovy
deleted file mode 100644
index 7e2ae1e..0000000
--- a/groovy/modules/classic/src/test/groovy/StringOperationTest.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-class StringOperationTest extends GroovyTestCase {
-
-    property x
-    property y
-    
-    void testPlus() {
-        x = "hello " + "there"
-        assert x == "hello there"
-        
-        x = "hello " + 2
-        assert x == "hello 2"
-        
-        x = "hello " + 1.2
-        assert x == "hello 1.2"
-        
-        y = x + 1
-        assert y == "hello 1.21"        
-    }
-
-	void testLongPlus() {
-	    x = "hello" + " " + "there" + " nice" + " day"
-	    
-	    assert x == "hello there nice day"
-	}
-	
-    void testMinus() {
-		x = "the quick brown fox" - "quick "
-		
-		assert x == "the brown fox"
-		
-		y = x - "brown "
-		
-		assert y == "the fox"
-    }
-    
-    void testOperationsOnConstantString() {
-        assert "hello".size() == 5
-
-        assert "the quick brown".substring(4).substring(0,5) == "quick"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/StringTest.groovy b/groovy/modules/classic/src/test/groovy/StringTest.groovy
deleted file mode 100644
index 31530b5..0000000
--- a/groovy/modules/classic/src/test/groovy/StringTest.groovy
+++ /dev/null
@@ -1,60 +0,0 @@
-class StringTest extends GroovyTestCase {
-
-    void testString() {
-        s = "abcd"
-        assert s.length() == 4
-        assert 4 == s.length()
-        
-        // test polymorphic size() method like collections
-        assert s.size() == 4
-        
-        s = s + "efg" + "hijk"
-        
-        assert s.size() == 11
-        assert "abcdef".size() == 6
-    }
-
-    void testStringPlusNull() {
-        y = null
-        
-        x = "hello " + y
-        
-        assert x == "hello null"
-    }
-    
-    void testNextPrevious() {
-    	x = 'a'
-    	y = x.next() 
-    	assert y == 'b'
-    
-    	z = 'z'.previous()
-    	assert z == 'y'
-    	
-    	z = 'z'
-    	b = z.next()
-    	assert b != 'z'
-    	
-    	println(z.charAt(0))
-    	println(b.charAt(0))
-    	
-    	assert b > z
-    	
-    	println "Incremented z: " + b
-    }
-    
-    void testApppendToString() {
-        name = "Gromit"
-        result = "hello " << name << "!" 
-        
-        assert result.toString() == "hello Gromit!"
-    }
-    
-    void testApppendToStringBuffer() {
-        buffer = new StringBuffer()
-        
-        name = "Gromit"
-        buffer << "hello " << name << "!" 
-        
-        assert buffer.toString() == "hello Gromit!"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/SubscriptTest.groovy b/groovy/modules/classic/src/test/groovy/SubscriptTest.groovy
deleted file mode 100644
index 12bd948..0000000
--- a/groovy/modules/classic/src/test/groovy/SubscriptTest.groovy
+++ /dev/null
@@ -1,203 +0,0 @@
-class SubscriptTest extends GroovyTestCase {
-
-    void testListRange() {
-        list = ['a', 'b', 'c', 'd', 'e']
-		
-        sub = list[2..4]
-        assert sub == ['c', 'd', 'e']
-        
-        sub = list[2...5]
-        assert sub == ['c', 'd', 'e']
-        
-        value = list[-1]
-        assert value == 'e'
-        
-        sub = list[-4..-2]
-        assert sub == ['b', 'c', 'd']
-        
-        // backwards ranges
-        sub = list[-1..-3]
-        assert sub == ['e', 'd', 'c']
-        
-        sub = list[-3..-1]
-        assert sub == ['c', 'd', 'e']
-        
-        sub = list[3..1]
-        assert sub == ['d', 'c', 'b']
-        
-        sub = list[1..-3]
-        assert sub == ['b', 'c']
-    }
-    
-    void testObjectRangeRange() {
-        list = 'a'..'e'
-        
-        sub = list[2..4]
-        assert sub == ['c', 'd', 'e']
-        
-        value = list[-1]
-        assert value == 'e'
-        
-        sub = list[-4..-2]
-        assert sub == ['b', 'c', 'd']
-        
-        // backwards ranges
-        sub = list[-1..-3]
-        assert sub == ['e', 'd', 'c']
-        
-        sub = list[3..1]
-        assert sub == ['d', 'c', 'b']
-    }
-    
-    void testStringArrayRange() {
-        list = new String[] {'a', 'b', 'c', 'd', 'e'}
-        
-        sub = list[2..4]
-        assert sub == ['c', 'd', 'e']
-        
-        value = list[-1]
-        assert value == 'e'
-        
-        sub = list[-4..-2]
-        assert sub == ['b', 'c', 'd']
-        
-        // backwards ranges
-        sub = list[-1..-3]
-        assert sub == ['e', 'd', 'c']
-        
-        sub = list[3..1]
-        assert sub == ['d', 'c', 'b']
-    }
-    
-    void testIntRangeRange() {
-        list = 10..15
-        
-        sub = list[2..4]
-        assert sub == [12, 13, 14]
-        
-        value = list[-1]
-        assert value == 15
-        
-        sub = list[-4..-2]
-        assert sub == [12, 13, 14]
-        
-        // backwards ranges
-        sub = list[-1..-3]
-        assert sub == [15, 14, 13]
-        
-        sub = list[3..1]
-        assert sub == [13, 12, 11]
-    }
-    
-    void testIntArrayRange() {
-        list = new Integer[] { 10, 11, 12, 13, 14, 15 }
-        
-        sub = list[2..4]
-        assert sub == [12, 13, 14]
-        
-        value = list[-1]
-        assert value == 15
-        
-        sub = list[-4..-2]
-        assert sub == [12, 13, 14]
-        
-        // backwards ranges
-        sub = list[-1..-3]
-        assert sub == [15, 14, 13]
-        
-        sub = list[3..1]
-        assert sub == [13, 12, 11]
-    }
-    
-    void testStringSubscript() {
-        text = "nice cheese gromit!"
-        
-        x = text[2]
-        
-        assert x == "c"
-        assert x.class == String
-        
-        sub = text[5..10]
-        assert sub == 'cheese'
-        
-        sub = text[10..5]
-        assert sub == 'eseehc'
-        
-        sub = text[-2..-7]
-        assert sub == 'timorg'
-        
-        sub = text[1..-3]
-        assert sub == "ice cheese gromi"
-        
-    }
-    
-    void testListSubscriptWithList() {
-        list = ['a', 'b', 'c', 'd', 'e']
-        
-        indices = [0, 2, 4]
-        sub = list[indices]
-        assert sub == ['a', 'c', 'e']
-        
-        // verbose but valid
-        sub = list[[1, 3]]
-        assert sub == ['b', 'd']
-     
-        // syntax sugar
-        sub = list[2, 4]
-        assert sub == ['c', 'e']
-    }
-    
-    
-	void testListSubscriptWithListAndRange() {
-	    list = 100..200
-	    
-	    sub = list[1, 3, 20..25, 33]
-	    assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133]
-	    
-	    // now lets try it on an array
-	    array = list.toArray()
-	    
-	    sub = array[1, 3, 20..25, 33]
-	    assert sub == [101, 103, 120, 121, 122, 123, 124, 125, 133]
-	}
-	
-    void testStringWithSubscriptList() {
-        text = "nice cheese gromit!"
-        
-        sub = text[1, 2, 3, 5..10]
-        
-        assert sub == "icecheese"
-    }
-    
-    void testSubMap() {
-        map = ['a':123, 'b':456, 'c':789]
-        
-        keys = ['b', 'a']
-        sub = map.subMap(keys)
-        
-        assert sub.size() == 2
-        assert sub['a'] == 123
-        assert sub['b'] == 456
-        assert ! sub.containsKey('c')
-    }
-    
-    void testListWithinAListSyntax() {
-        list = [1, 2, 3, 4..10, 5, 6]
-        
-        assert list.size() == 6
-        sublist = list[3]
-        assert sublist == 4..10
-        assert sublist == [4, 5, 6, 7, 8, 9, 10]
-    }
-    
-    void testBeanProperties() {
-    	foo = new Foo()
-    	
-    	foo['name'] = 'Gromit'
-    	
-    	assert foo.name == 'Gromit'
-    	
-    	value = foo['name']
-    	assert value == 'Gromit'
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/SwitchTest.groovy b/groovy/modules/classic/src/test/groovy/SwitchTest.groovy
deleted file mode 100644
index 52b6cf8..0000000
--- a/groovy/modules/classic/src/test/groovy/SwitchTest.groovy
+++ /dev/null
@@ -1,75 +0,0 @@
-class SwitchTest extends GroovyTestCase {
-
-    void testSwitch() {
-        callSwitch("foo", "foo")
-        callSwitch("bar", "barfoo")
-        callSwitch("xyz", "xyzDefault")
-        callSwitch("zzz", "Default")
-        callSwitch(4, "List")
-        callSwitch(5, "List")
-        callSwitch(6, "List")
-        callSwitch("inList", "List")
-        callSwitch(1, "Integer")
-        callSwitch(1.2, "Number")
-    }
-    
-    callSwitch(x, expected) {
-		println("Calling switch with ${x}")
-		
-		result = ""
-		
-        switch (x) {
-            case "bar":
-	            result = result + "bar"
-                
-            case "foo":
-    	        result = result + "foo"
-                break
-
-            case [4, 5, 6, 'inList']:
-                result = "List"
-                break
-                
-            case Integer:
-                result = "Integer"
-                break
-                
-            case Number:
-                result = "Number"
-                break
-                
-            case "xyz":
-        	    result = result + "xyz"
-                
-            default:
-                result = result + "Default"
-                
-                // unnecessary just testing compiler
-                break;
-        }
-        println("Found result ${result}")
-        
-        assert result == expected : "when calling switch with ${x}"
-    }
-
-    // test the continue in switch, which should jump to the the while start
-    void testSwitchScope() {
-        i = 0
-        j = 0
-        while (true) {
-            i++;
-            switch(i) {
-                case 4:
-                    continue
-                case 5:
-                    break;
-                default:
-                    j += i;
-                    break;
-            }
-            if (i == 5) break;
-        }
-        assert j == 6
-    }
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/SwitchWithDifferentTypesTest.groovy b/groovy/modules/classic/src/test/groovy/SwitchWithDifferentTypesTest.groovy
deleted file mode 100644
index c2afd77..0000000
--- a/groovy/modules/classic/src/test/groovy/SwitchWithDifferentTypesTest.groovy
+++ /dev/null
@@ -1,111 +0,0 @@
-
-import java.util.Date
-
-/** 
- * A test case for switch statement with different types
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-class SwitchWithDifferentTypesTest extends GroovyTestCase {
-
-    void testSwitchWithIntValues() {
-        assertSwitch(1, 2, 3, 4)
-    }
-
-    void testSwitchWithDoubleValues() {
-        assertSwitch(1.5, 2.4, 3.2, 4.1)
-    }
-    
-    void testSwitchWithStringValues() {
-        assertSwitch("abc", "def", "xyz", "unknown")
-    }
-
-    void testSwitchWithMixedTypeValues() {
-        assertSwitch("abc", new Date(), 5.32, 23)
-    }
-
-
-    assertSwitch(a, b, c, d) {
-        assertSwitchMatch1(a, a, b, c)
-        assertSwitchMatch2(b, a, b, c)
-        assertSwitchMatch3(c, a, b, c)
-        assertSwitchMatchDefault(d, a, b, c)
-    }
-    
-    assertSwitchMatch1(value, case1Value, case2Value, case3Value) {
-        switch (value) {
-            case case1Value: 
-                // worked
-                break
-            case case2Value: 
-                failNotEquals(value, case2Value)
-                break
-            case case3Value: 
-                failNotEquals(value, case3Value)
-                break
-            default:
-                failNotDefault(value)
-                break
-        }
-    }
-
-    assertSwitchMatch2(value, case1Value, case2Value, case3Value) {
-        switch (value) {
-            case case1Value: 
-                failNotEquals(value, case1Value)
-                break
-            case case2Value: 
-	            // worked
-                break
-            case case3Value: 
-                failNotEquals(value, case3Value)
-                break
-            default:
-                failNotDefault(value)
-                break
-        }
-    }
-    
-    assertSwitchMatch3(value, case1Value, case2Value, case3Value) {
-        switch (value) {
-            case case1Value: 
-                failNotEquals(value, case1Value)
-                break
-            case case2Value: 
-                failNotEquals(value, case2Value)
-                break
-            case case3Value: 
-	            // worked
-                break
-            default:
-                failNotDefault(value)
-                break
-        }
-    }
-    
-    assertSwitchMatchDefault(value, case1Value, case2Value, case3Value) {
-        switch (value) {
-            case case1Value: 
-                failNotEquals(value, case1Value)
-                break
-            case case2Value: 
-                failNotEquals(value, case2Value)
-                break
-            case case3Value: 
-                failNotEquals(value, case3Value)
-                break
-            default:
-	            // worked
-                break
-        }
-    }
-
-	failNotEquals(value, expectedCaseValue) {
-	    fail("value: " + value + " is not equal to case value: " + expectedCaseValue)
-	}
-	
-	failNotDefault(value) {
-	    fail("value: " + value + " should not match the default switch clause" )
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/TernaryOperatorTest.groovy b/groovy/modules/classic/src/test/groovy/TernaryOperatorTest.groovy
deleted file mode 100644
index 94ad0c1..0000000
--- a/groovy/modules/classic/src/test/groovy/TernaryOperatorTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-class TernaryOperatorTest extends GroovyTestCase {
-
-	void testSimpleUse() {
-	    y = 5
-	    
-	    x = (y > 1) ? "worked" : "failed"
-		assert x == "worked"			
-					
-					
-		x = (y < 4) ? "failed" : "worked"
-		assert x == "worked"			
-	}
-	
-	void testUseInParameterCalling() {
-	    z = 123
-	    assertCalledWithFoo(z > 100 ? "foo" : "bar")
-	    assertCalledWithFoo(z < 100 ? "bar" : "foo")
-	   }
-	
-	assertCalledWithFoo(param) {
-	    println "called with param ${param}"
-	    assert param == "foo"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/TextPropertyTest.groovy b/groovy/modules/classic/src/test/groovy/TextPropertyTest.groovy
deleted file mode 100644
index 0ee2571..0000000
--- a/groovy/modules/classic/src/test/groovy/TextPropertyTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * check that text property is available on... 
- *
- * myFile.text,  myFile.text(charset),  
- * myURL.text,  myURL.text(charset),
- * myInputStream.text,  myInputStream.text(charset),
- * myReader.text,
- * myBufferedReader.text,
- * myProcess.text
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-import java.io.*
-
-class TextPropertyTest extends GroovyTestCase {
-    property myReader
-    property myInputStream
-    property myBigEndianEncodedInputStream    
-    
-    void setUp() {
-        myReader = new StringReader("digestive")
-        myInputStream = new ByteArrayInputStream("chocolate chip".bytes)
-        myBigEndianEncodedInputStream = new ByteArrayInputStream("shortbread".getBytes("UTF-16BE"))
-    }
-    
-    void testBigEndianEncodedInputStreamText() {
-        assert "shortbread" == myBigEndianEncodedInputStream.getText("UTF-16BE")
-    }
-    
-    void testInputStreamText() {
-        assert "chocolate chip" == myInputStream.text
-    }
-    
-    void testReaderText() {
-        assert "digestive" == myReader.text
-    }
-    
-    void tearDown() {
-        myInputStream = null
-        myReader = null
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ThrowTest.groovy b/groovy/modules/classic/src/test/groovy/ThrowTest.groovy
deleted file mode 100644
index 76718e8..0000000
--- a/groovy/modules/classic/src/test/groovy/ThrowTest.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-import java.util.Arrays
-
-class ThrowTest extends GroovyTestCase {
-    
-    void testThrow() {
-        
-        try {
-	        throw new Exception("abcd")
-	        
-	        fail("Should have thrown an exception by now")
-        }
-        catch (Exception e) {
-            assert e.message == "abcd"
-            
-            println("Caught exception ${e}")
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/ToArrayBug.groovy b/groovy/modules/classic/src/test/groovy/ToArrayBug.groovy
deleted file mode 100644
index 2662456..0000000
--- a/groovy/modules/classic/src/test/groovy/ToArrayBug.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-import java.util.Arrays
-
-class ToArrayBug extends GroovyTestCase {
-    
-    void testToArrayBug() {
-        
-        array = getArray()
-
-        callArrayMethod(array)
-    }
-    
-    protected getArray() {
-        list = [1, 2, 3, 4]
-        array = list.toArray()
-        
-        assert array != null
-        
-        return array
-    }
-    
-    protected callArrayMethod(array) {
-        System.out.println("Called method with ${array}")
-        
-        list = Arrays.asList(array)
-        
-        assert list.size() == 4
-        assert list == [1, 2, 3, 4]
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/TripleQuotedStringTest.groovy b/groovy/modules/classic/src/test/groovy/TripleQuotedStringTest.groovy
deleted file mode 100644
index 6e908ae..0000000
--- a/groovy/modules/classic/src/test/groovy/TripleQuotedStringTest.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-class TripleQuotedStringTest extends GroovyTestCase {
-
-    void testTripleQuotedString() {
-        s = """
-        Lots of 'text' with a variety of ""quoting "" and
-   a few lines
-    and some escaped \""" quoting and
-    an ending""".trim()
-
-        println(s)
-        assert s != null
-        idx = s.indexOf("quoting and")
-        assert idx > 0
-    }
-
-    static void main( String[] args ) { 
-        o = new TripleQuotedStringTest();
-        o.testTripleQuotedString();
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/TryCatchTest.groovy b/groovy/modules/classic/src/test/groovy/TryCatchTest.groovy
deleted file mode 100644
index cff2e80..0000000
--- a/groovy/modules/classic/src/test/groovy/TryCatchTest.groovy
+++ /dev/null
@@ -1,83 +0,0 @@
-class TryCatchTest extends GroovyTestCase {
-
-    property exceptionCalled
-    property finallyCalled
-	
-    void testTryCatch() {
-        try {
-            failingMethod()
-        }
-        catch (AssertionError e) {
-            onException(e)
-        }
-        finally {
-            onFinally()
-        }
-        afterTryCatch()
-        assert exceptionCalled : "should have invoked the catch clause"        
-        assert finallyCalled : "should have invoked the finally clause"
-        println("After try/catch")
-     }
-
-
-     void testTryFinally() {
-         Boolean touched = false;
-         
-         try {
-         }
-         finally {
-             touched = true;
-         }
-
-         assert touched : "finally not called with empty try"
-     }
-
-
-
-     void testWorkingMethod() {
-         /** @todo causes inconsistent stack height
-          assert exceptionCalled == false : "should not invoked the catch clause"        
-          */
-         
-         try {
-	    	 workingMethod()
-	     }
-	     catch (AssertionError e) {
-		     onException(e)
-	     }
-	     finally {
-		     onFinally()
-	     }
-	     assert exceptionCalled == false : "should not invoked the catch clause"        
-	     assert finallyCalled : "should have invoked the finally clause"
-	     println("After try/catch")
-    }
-    
-    void failingMethod() {
-        assert false : "Failing on purpose"
-	}
-	
-    void workingMethod() {
-        assert true : "Should never fail"
-    }
-    
-    void onException(e) {
-	    assert e != null
-	    exceptionCalled = true
-	}
-	
-    void onFinally() {
-        finallyCalled = true
-	}
-
-    void afterTryCatch() {
-        assert exceptionCalled : "should have invoked the catch clause"        
-        assert finallyCalled : "should have invoked the finally clause"
-        println("After try/catch")
-    }
-    
-    protected void setUp() {
-        exceptionCalled = false
-        finallyCalled = false
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/TypesafeMethodTest.groovy b/groovy/modules/classic/src/test/groovy/TypesafeMethodTest.groovy
deleted file mode 100644
index 05bd0a8..0000000
--- a/groovy/modules/classic/src/test/groovy/TypesafeMethodTest.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-class TypesafeMethodTest extends GroovyTestCase {
-
-    void testTypesafeMethod() {
-        y = someMethod(1)
-
-        assert y == 2
-    }
-
-    Integer someMethod(Integer i) {
-        return i + 1
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/UnaryMinusTest.groovy b/groovy/modules/classic/src/test/groovy/UnaryMinusTest.groovy
deleted file mode 100644
index 82a29b4..0000000
--- a/groovy/modules/classic/src/test/groovy/UnaryMinusTest.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-import org.codehaus.groovy.classgen.TestSupport
-
-class UnaryMinusTest extends TestSupport {
-
-    void testUnaryMinus() {
-        value = -1
-        
-        assert value == -1
-        
-        x = value + 2
-        assert x == 1
-        
-        y = -value
-        assert y == 1
-	}   
-    
-    void testBug() {
-        a = 1
-        b = -a
-        
-        assert b == -1
-    }
-    
-    void testShellBug() {
-        assertScript("
-a = 1
-b = -a
-assert b == -1            
-")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/UnitTestAsScript.groovy b/groovy/modules/classic/src/test/groovy/UnitTestAsScript.groovy
deleted file mode 100644
index bf0f93a..0000000
--- a/groovy/modules/classic/src/test/groovy/UnitTestAsScript.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-a = 123
-a *= 2
-println "Running unit test with a = ${a}"
-assert a == 246
diff --git a/groovy/modules/classic/src/test/groovy/UnsafeNavigationTest.groovy b/groovy/modules/classic/src/test/groovy/UnsafeNavigationTest.groovy
deleted file mode 100644
index b6201f8..0000000
--- a/groovy/modules/classic/src/test/groovy/UnsafeNavigationTest.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-class UnsafeNavigationTest extends GroovyTestCase {
-
-    void testUnsafePropertyNavigations() {
-        x = null
-        
-        try {
-	        y = x.foo
-	        fail("should fail")
-        }
-        catch (NullPointerException e) {
-            assert e != null
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/VerbatimGStringTest.groovy b/groovy/modules/classic/src/test/groovy/VerbatimGStringTest.groovy
deleted file mode 100644
index 361dd20..0000000
--- a/groovy/modules/classic/src/test/groovy/VerbatimGStringTest.groovy
+++ /dev/null
@@ -1,78 +0,0 @@
-class VerbatimGStringTest extends GroovyTestCase {
-
-    void testWithOneVariable() {
-        
-        name = <<<EOF
-Bob
-EOF
-        
-        template = <<<EOF
-hello ${name} how are you?
-EOF
-				
-		assert template instanceof GString
-											 
-	 	count = template.getValueCount()
-		assert count == 1
-		assert template.getValue(0) == "Bob"
-											 
-		string = template.toString()
-		assert string == "hello Bob how are you?"
-	}
-    
-    void testWithVariableAtEnd() {
-        name = <<<EOS
-Bob
-EOS
-        template = <<<EOS
-hello ${name}
-EOS
-
-        string = template.toString()
-        
-        assert string == "hello Bob"
-    }
-    
-    void testWithVariableAtBeginning() {
-        name = <<<EOS
-Bob
-EOS
-
-        template = <<<EOS
-${name} hey,
-hello
-EOS
-        string = template.toString()
-        
-        assert fixEOLs(string) == "Bob hey,\nhello"
-    }
-
-    void testWithJustVariable() {
-        name = <<<EOS
-Bob
-EOS
-
-        template = <<<EOS
-${name}
-EOS
-        string = template.toString()
-        
-        assert string == "Bob"
-    }
-
-	void testInterestingCases() {
-		name = <<<EOSEOSEOS
-Bob
-EOS
-EOSEOSEO
-EOSEOSEOS
-
-		assert fixEOLs(name) == "Bob\nEOS\nEOSEOSEO"
-		
-		perl = <<<__END__
-Sam
-__END__
-
-		assert perl == "Sam"
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/WhileLoopTest.groovy b/groovy/modules/classic/src/test/groovy/WhileLoopTest.groovy
deleted file mode 100644
index 3768e22..0000000
--- a/groovy/modules/classic/src/test/groovy/WhileLoopTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-class WhileLoopTest extends GroovyTestCase {
-
-	void testVerySimpleWhile() {
-	    val = doWhileMethod(0, 5)
-        println(val)
-	}
-	
-	void testMoreComplexWhile() {
-	    x = 0
-	    y = 5
-
-	    while ( y > 0 ) {
-	        x = x + 1
-	        y = y - 1
-	    }
-
-	    assert x == 5
-	}
-
-	void testDoWhileWhile() {
-	    x = 0
-	    y = 5
-
-	    do {
-	        x = x + 1
-	        y = y - 1
-	    } 
-	    while ( y > 0 )
-
-	    assert x == 5
-	}
-
-	doWhileMethod(x, m) {
-        while ( x < m ) {
-            x = increment(x)
-        }
-
-		return x
-    }
-	
-	increment(x) {
-	    x + 1
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/benchmarks/createLoop.groovy b/groovy/modules/classic/src/test/groovy/benchmarks/createLoop.groovy
deleted file mode 100644
index eea5726..0000000
--- a/groovy/modules/classic/src/test/groovy/benchmarks/createLoop.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-{ n | 
-  for (i in 1..n){
-    x = new Object()
-  }
-}.call(30000)
-
diff --git a/groovy/modules/classic/src/test/groovy/benchmarks/loop.groovy b/groovy/modules/classic/src/test/groovy/benchmarks/loop.groovy
deleted file mode 100644
index d8bd86b..0000000
--- a/groovy/modules/classic/src/test/groovy/benchmarks/loop.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-import java.util.ArrayList
-
-class Loop {
-  property array = new ArrayList()
-  property pos = 0
-
-  void push(obj){
-     array[pos] = obj
-     pos = pos + 1
-  }
-  Object pop(){
-     pos = pos - 1
-     return array[pos]
-  }
-
-  static void main(args){
-     s = new Loop()
-     for (i in 1..1000000){
-       s.push(i)
-     }
-     for (i in 1..1000000){
-       s.pop()
-     }
-  }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/benchmarks/loop2.groovy b/groovy/modules/classic/src/test/groovy/benchmarks/loop2.groovy
deleted file mode 100644
index 711ffed..0000000
--- a/groovy/modules/classic/src/test/groovy/benchmarks/loop2.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-import java.util.ArrayList
-
-class Loop2 {
-  private array = new ArrayList()
-  private pos = 0
-
-  void push(obj){
-     array[pos] = obj
-     pos = pos + 1
-  }
-  Object pop(){
-     pos = pos - 1
-     return array[pos]
-  }
-
-  static void main(args){
-      println "Starting the Loop2 test"
-      
-     s = new Loop2()
-     for (i in 1..1000000){
-       s.push(i)
-     }
-     for (i in 1..1000000){
-       s.pop()
-     }
-  }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ArrayMethodCallBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ArrayMethodCallBug.groovy
deleted file mode 100644
index e52061f..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ArrayMethodCallBug.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-package groovy.bugs
-
-class ArrayMethodCallBug extends TestSupport {
-
-    void testMethodCallingWithArrayBug() {
-        array = getMockArguments()
-        
-        dummyMethod(array)
-    }
-    
-    protected dummyMethod(array) {
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
deleted file mode 100644
index 10e26f2..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * @version $Revision$
- */
-class AssignmentInsideExpressionBug extends GroovyTestCase {
-    
-    void testBug() {
-        if ((x = someMethod()) != null) {
-            println x
-        }
-        if ((y = getFoo()) > 5) {
-            println "y is greater than 5"
-        }
-        
-        /** @todo uncomment when the parser allows this
-        a = b = 123
-        assert a == 123
-        assert b == 123
-        */
-    }
-
-    someMethod() {
-        return "worked!"
-    }
-    
-    getFoo() {
-        return 7
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
deleted file mode 100644
index 9f02e28..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-class AutoboxingOfComparisonsBug extends GroovyTestCase {
-    
-    void testBug() {
-        y = true
-        x = y == true
-        
-        assert x
-        
-        println(y == true)
-        println(y != false)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/BadScriptNameBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/BadScriptNameBug.groovy
deleted file mode 100644
index c66567d..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/BadScriptNameBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @author Sergey Udovenko 
- * @version $Revision$
- */
-class BadScriptNameBug extends GroovyTestCase {
-    
-    void testBug() {
-		GroovyClassLoader cl = new GroovyClassLoader(); 
-		cl.parseClass("println 'oops!'", "/script.groovy");
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/BenchmarkBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/BenchmarkBug.groovy
deleted file mode 100644
index 47d4088..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/BenchmarkBug.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * A little performance test
- * @version $Revision$
- */
-class BenchmarkBug extends GroovyTestCase {
-    
-    void testPerformance() {
-		start = System.currentTimeMillis()
-		
-		total = 0
-		size = 10000
-		for (i in 0..size) {
-		    total = total + callSomeMethod("hello", total)
-		} 
-		
-		end = System.currentTimeMillis()
-		
-		time = end - start
-		
-		println "Performed ${size} iterations in ${time / 1000} seconds which is ${time / size} ms per iteration"
-		
-		assert total == size * 10 + 10
-    }
-    
-    callSomeMethod(text, total) {
-        return 10
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/BlockAsClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/BlockAsClosureBug.groovy
deleted file mode 100644
index e1b7e1a..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/BlockAsClosureBug.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * @version $Revision$
- */
-class BlockAsClosureBug extends GroovyTestCase {
-    
-   void testBug() {
-        c = 0 
-        
-        block: { 
-            c = 9 
-        } 
-
-        println(c) 
-        
-        assert c == 9
-    }
-    
-    void testStaticBug() {
-        main(null)		
-    }
-    
-    void testNonVoidMethod() {
-        foo()		
-    }
-    
-    static void main(args) {
-        c = 0 
-        
-        block: {
-            c = 9 
-        }
-
-        println(c) 
-        
-        assert c == 9
-    }
-    
-    foo() {
-        c = 0 
-        
-        block: { 
-            c = 9 
-        } 
-        println(c) 
-        
-        assert c == 9
-        return 5
-    }
-   }
diff --git a/groovy/modules/classic/src/test/groovy/bugs/BooleanBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/BooleanBug.groovy
deleted file mode 100644
index 8b1f7f1..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/BooleanBug.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * @version $Revision$
- */
-class BooleanBug extends GroovyTestCase {
-    
-    void testBug() {
-        x = new BooleanBean(name:'James', foo:true)
-        y = new BooleanBean(name:'Bob', foo:false)
-
-        assert x.foo
-        assert ! y.foo
-        y.foo = true
-        assert y.foo
-    }
-    
-    void testBug2() {
-        BooleanBean bean = new BooleanBean(name:'Gromit', foo:false)
-        value = isApplicableTo(bean)
-        assert value
-    }
-    
-    public boolean isApplicableTo(BooleanBean field) {
-        return !field.isFoo();
-    }
-
-}
-
-class BooleanBean {
-    String name
-    boolean foo
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ByteIndexBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ByteIndexBug.groovy
deleted file mode 100644
index 9505d64..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ByteIndexBug.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * @author Robert Fuller 
- * @version $Revision$
- */
-class ByteIndexBug extends GroovyTestCase {
-     
-    void testBug() {
-		sb = new StringBuffer("<<<FOO\n")
-		for (j in 0..127){ // 126 is okay.
-			sb.append('$').append("{x}")
-		}
-		sb.append("\nFOO\n")
-		
-		b = new Binding(x:null)
-		
-		new GroovyShell(b).evaluate(sb.toString(),"foo")
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode2Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode2Bug.groovy
deleted file mode 100644
index 93990eb..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode2Bug.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode2Bug extends GroovyTestCase {
-
-    Integer count = 0
-    
-    void testBytecodeBug() {
-		getCollection().each { count += it }       
-    }
-    
-    void testTedsBytecodeBug() {
-        //doTest(getCollection())
-        a = [1, 2, 3, 4]
-        doTest(a)
-
-    }
-    
-    void doTest(args) {
-        m = [:]
-        i = 1
-        args.each { m.put(it, i++) }     
-        
-        assert m[1] == 1
-        assert m[2] == 2
-        assert m[3] == 3
-        assert m[4] == 4
-        
-        println("created: ${m}")
-        
-        assert i == 5
-    }
-    
-    
-    void testTedsBytecode2Bug() {
-        m = [:]
-        i = 1
-        getCollection().each { m.put(it, i++) }     
-        
-        assert m[1] == 1
-        assert m[2] == 2
-        assert m[3] == 3
-        assert m[4] == 4
-        
-        println("created: ${m}")
-        
-        assert i == 5
-    }
-    
-    getCollection() {
-        [1, 2, 3, 4]
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode3Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode3Bug.groovy
deleted file mode 100644
index 1246ff6..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode3Bug.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode3Bug extends GroovyTestCase {
-    
-    count
-         
-    void testIncrementPropertyInclosure() {
-        args = [1, 2, 3]
-        m = [:]
-        count = 0
-        doLoop(args, m)
-   		assert count == 3
-    }
-    
-    void doLoop(args, m) {
-        args.each { 
-            m.put(it, count++)
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode4Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode4Bug.groovy
deleted file mode 100644
index 0cc179a..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode4Bug.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode4Bug extends GroovyTestCase {
-
-    count = 0
-     
-    void testInject() {
-        x = [1, 2, 3].inject(0) { c, s | c += s }
-        assert x == 6
-    }
-     
-    void testUsingProperty() {
-        count = 0
-        getCollection().each { count += it }       
-        assert count == 10
-    }
-    
-    void testUsingIncrementingProperty() {
-        count = 0
-        getCollection().each { count++ }       
-        assert count == 4
-    }
-    
-    getCollection() {
-        [1, 2, 3, 4]
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode5Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode5Bug.groovy
deleted file mode 100644
index 702f331..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode5Bug.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode5Bug extends GroovyTestCase {
-
-    void testUsingLocalVar() {
-        c = 0
-        getCollection().each { c += it }       
-        assert c == 10
-    }
-    
-    getCollection() {
-        [1, 2, 3, 4]
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode6Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode6Bug.groovy
deleted file mode 100644
index b461b2e..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode6Bug.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode6Bug extends GroovyTestCase {
-
-    void testPostFixReturn() {
-        i = 1
-        closure = { i++ }
-        value = closure()
-        
-        assert value == 1
-        assert i == 2
-    }
-    
-    void testPreFixReturn() {
-        i = 1
-        closure = { return ++i }
-        value = closure()
-        
-        assert value == 2
-        assert i == 2
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Bytecode7Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Bytecode7Bug.groovy
deleted file mode 100644
index 529b9e3..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Bytecode7Bug.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @version $Revision$
- */
-class Bytecode7Bug extends GroovyTestCase {
-
-    void testDuplicateVariables() {
-		if (true) {
-			a = 123
-		}
-		if (true) {
-			a = 456
-		}
-    }
-
-    void testDuplicateVariablesInClosures() {
-    		coll = [1]
-    		
-		coll.each {
-			a = 123
-		}
-		coll.each {
-			a = 456
-		}
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/BytecodeBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/BytecodeBug.groovy
deleted file mode 100644
index 25d0935..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/BytecodeBug.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * @version $Revision$
- */
-class BytecodeBug extends GroovyTestCase {
-     
-    void testTedsBytecodeBug() {
-        //a = ['tom','dick','harry']
-        a = [1, 2, 3, 4]
-        doTest(a)
-    }
-    
-    void doTest(args) {
-        m = [:]
-        i = 1
-        args.each { 
-            talk(it)
-            m.put(it, i++)
-        }
-        assert i == 5
-        m.each {
-            println(it)
-        }
-    }
-    
-    talk(a) {
-        println("hello "+a)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
deleted file mode 100644
index f9817d6..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @version $Revision$
- */
-class CallingClosuresWithClosuresBug extends GroovyTestCase {
-
-    void testBug() {
-        a = {1}
-        // old workaround
-        //b = {a.call()}
-        b = {a()}
-        
-        value = b()
-        
-        assert value == 1
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
deleted file mode 100644
index 7f8d48d..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * @version $Revision$
- */
-class CastWhenUsingClosuresBug extends GroovyTestCase {
-
-    void testBug() {
-        a = 1
-        [1].each { a = it }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ChristofsPropertyBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ChristofsPropertyBug.groovy
deleted file mode 100644
index a639607..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ChristofsPropertyBug.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @version $Revision$
- */
-class ChristofsPropertyBug extends GroovyTestCase {
-     
-    void testChristofsPropertyBug() {
-    	this.mixedCaseProperty = "test"
-    	shouldFail({this.mixedcaseproperty = "test"})
-    }
-    
-    mixedCaseProperty
-	
-    getMixedCaseProperty()    { mixedCaseProperty }
-    setMixedCaseProperty(val) { this.mixedCaseProperty = val }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
deleted file mode 100644
index f14bc03..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
+++ /dev/null
@@ -1,77 +0,0 @@
-package groovy.bugs
-
-
-class ClassGeneratorFixesTest extends GroovyTestCase {
-    pf(int p) {
-        int i = p
-        boolean b = true
-    }
-
-	void testPrimitvesInFunc() { // groovy-373, 453, 385, 451, 199
-		pf(10)
-	}
-
-    count = 0;
-
-    void testPlusEqual() { // 372
-        count += 1
-        assert count == 1
-
-        foo =
-            {i|
-                {j|
-                    i += j
-                    i
-                }
-            }
-        x = foo(1)
-        x(5)
-        foo(3)
-        println x(2.3)
-    }
-
-    void testIfAndSwitchInClosure (){ // 321, 324, 412
-
-        a = 1
-        1.times {
-            if (a ==1) {
-                a = 2
-            }
-        }
-
-        noneYet=true;
-        ["a","b","c","d"].each { c |
-          if (noneYet) {
-            noneYet=false;
-          } else {
-            print(" > ");
-          }
-          print( c );
-        }
-
-        a = 1
-        switch (a) {
-        case 1:
-            a = 2;
-        case 2:
-            break;
-        default:
-            break;
-        }
-    }
-
-    void returnVoid() {
-        return
-    }
-    void testReturnVoid() { // groovy-405, 387
-        returnVoid()
-    }
-    
-    void testBooleanValue() { // groovy-385
-    		/** @todo
-    		boolean value
-    		*/
-    	}
-
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClassInNamedParamsBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
deleted file mode 100644
index 6e9f6f0..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-import java.util.Map
-
-class ClassInNamedParamsBug extends GroovyTestCase {
-    
-    void testBug() {
-        foo = method(class:'cheese', name:'cheddar')
-        
-        assert foo.name == "cheddar"
-        assert foo.class == "cheese"
-        
-        foo = method(name:'cheddar', class:'cheese')
-        
-        assert foo.name == "cheddar"
-        assert foo.class == "cheese"
-    }
-    
-    method(Map data) {
-        data
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClassInScriptBug.java b/groovy/modules/classic/src/test/groovy/bugs/ClassInScriptBug.java
deleted file mode 100644
index 8527640..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClassInScriptBug.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ClassInScriptBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        assertScript( "class X {}\nx = new X()\nprintln(x)" );
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosureInClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClosureInClosureBug.groovy
deleted file mode 100644
index 56fac94..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosureInClosureBug.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Bug illustrating the nested closures variable scope visibility issue.
- * l.each is ClosureInClosureBug$1 and it.each is ClosureInClosureBug$2
- * The variable text is not visible from ClosureInClosureBug$2.
- * Indeed, a closure can only see the variable defined outside this closure (one level up)
- * but cannot see what's in the second level.
- *
- * In order to make the test work, do not forget to uncomment the line "println(text)"
- *
- * @authour Guillaume Laforge
- */
-class ClosureInClosureBug extends GroovyTestCase
-{
-	void testInvisibleVariable()
-	{
-		text = "test "
-
-		l = [1..11, 2..12, 3..13, 4..14]
-
-		l.each{
-			//println(text)
-			it.each{
-				println(text)
-			}
-		}
-	}
-
-	static void main(args)
-	{
-		bug = new ClosureInClosureBug()
-		bug.testInvisibleVariable()
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosureParameterPassingBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClosureParameterPassingBug.groovy
deleted file mode 100644
index 11afeb2..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosureParameterPassingBug.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-import org.codehaus.groovy.classgen.TestSupport
-
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class ClosureParameterPassingBug extends TestSupport {
-    
-    void testBugInMethod() {
-		c = { x | 
-			y = 123
-			c1 = { 
-				println y
-				println x
-				println x[0] 
-			} 
-			
-			c1() 
-		} 
-
-		c([1]) 
-    }
-    
-    void testBug() {
-    	assertScript <<<EOF
-c = { x | 
-	y = 123
-	c1 = { 
-		assert x != null : "Could not find a value for x"
-		assert y == 123 : "Could not find a value for y"
-		println x[0] 
-	} 
-	
-	c1() 
-} 
-
-c([1]) 
-EOF    	
-	}
-   
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosureTypedVariableBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
deleted file mode 100644
index 0219c69..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * @version $Revision$
- */
-class ClosureTypedVariableBug extends GroovyTestCase {
-    
-    void testBug2() {
-   		count = makeClosure(0)
-        assert count == 1
-        
-   		count = makeClosure2(0)
-        assert count == 1
-    }
-
-
-    makeClosure(Number count) {
-    	closure = { count = it }
-    	closure(1)
-    	return count
-    }
-
-    makeClosure2(Number c) {
-    	count = c
-    	closure = { count = it }
-    	closure(1)
-    	return count
-    }
-
-    void testBug() {
-        Integer count = 0
-        closure = { count = it }
-        closure(1)
-        assert count == 1
-    }
-    
-    void testBug3() {
-    	closure = getElementClosure("p")
-    	answer = closure("b")
-    	value = answer("c")
-    	println "returned : ${value}"
-    }
-    
-    Closure getElementClosure(tag) {
-		return { body |
-			if (true) {
-				return {"${body}"}
-			} 
-			else {
-				body = null
-			}
-		}
-	} 
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosureVariableBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClosureVariableBug.groovy
deleted file mode 100644
index bf18730..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosureVariableBug.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * @version $Revision$
- */
-class ClosureVariableBug extends GroovyTestCase {
-    
-    void testClosurePassingBug() {
-        count = 0
-        closure = { assert count == it }
-        closure(0)
-        
-        count = 1
-        closure(1)
-    }
-    
-    void testPassingClosureAsNamedParameter() {
-        x = 123
-        
-        foo = new Expando(a:{x}, b:456)
-    
-    	assert foo.a != null
-        
-        println "Foo has a = ${foo.a}"
-        
-    	value = foo.a()
-    	assert value == 123
-    }
-    
-    void testBug() {
-    	value = callClosure([1, 2])
-    	assert value == 2
-    }
-    
-    protected Integer callClosure(collection) {
-    	/** @todo
-    	Integer x
-    	*/
-    	Integer x = 0
-    	collection.each { x = it }
-    	return x
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosureWithStaticVariablesBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ClosureWithStaticVariablesBug.groovy
deleted file mode 100644
index f153880..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosureWithStaticVariablesBug.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-package groovy.bugs
-
-import org.codehaus.groovy.classgen.TestSupport
-
-/**
- * @version $Revision$
- */
-class ClosureWithStaticVariablesBug extends TestSupport {
-    
-    static y = [:]
-    
-    void testBug() {
-		c = { x |
-			return {
-			    foo = Cheese.z
-			    println foo
-			    assert foo.size() == 0
-			    
-    		    println y
-    		    assert y.size() == 0
-    		    
-    		    return 6
-			}
-		}
-		c2 = c(5)
-		answer = c2()
-		assert answer == 6
-    }
-}
-
-class Cheese {
-    static z = [:]
-	
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ClosuresInScriptBug.java b/groovy/modules/classic/src/test/groovy/bugs/ClosuresInScriptBug.java
deleted file mode 100644
index 16ec1a2..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ClosuresInScriptBug.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ClosuresInScriptBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        assertScript( "a = 1\n [2].each { a = it }\n assert a == 2" );
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ConstructorBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ConstructorBug.groovy
deleted file mode 100644
index 881e651..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ConstructorBug.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-import org.codehaus.groovy.runtime.InvokerHelper
-import java.io.File
-
-/**
- * @author Jason Thomas
- * @version $Revision$
- */
-class ConstructorBug extends GroovyTestCase {
-    
-    void testBug() {
-        type = new GroovyClassLoader().parseClass(new File("src/test/groovy/bugs/TestBase.groovy"))
-        assert type != null
-
-        println "created type: ${type}"
-        
-        type = new GroovyClassLoader().parseClass(new File("src/test/groovy/bugs/TestDerived.groovy"))
-        assert type != null
-
-        println "created type: ${type} of type: ${type.class}"
-
-        mytest = InvokerHelper.invokeConstructorOf(type, new Object[] { "Hello" })
-        assert mytest.foo == "Hello"
-        /** @todo fix bug
-        */
-        
-        /*
-        test = type.newInstance()
-        asert test.foo == null
-        */
-        
-//foo = new type('hello')
-        /*
-        */
-        mytest = new TestDerived("Hello")
-        assert mytest.foo == "Hello"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ConstructorParameterBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ConstructorParameterBug.groovy
deleted file mode 100644
index 2ce57f6..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ConstructorParameterBug.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.bugs
-
-class ConstructorParameterBug extends GroovyTestCase {
-
-    void testMethodWithNativeArray() {
-        value = new int[2*2]
-        println "${value} of type ${value.class}"
-        /** @todo fixme!
-    	blah2(value)
-    	*/
-    }
-
-    blah2(int[] wobble) {
-       println(wobble)
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/DefVariableBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/DefVariableBug.groovy
deleted file mode 100644
index 9948a41..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/DefVariableBug.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * @version $Revision$
- */
-class DefVariableBug extends GroovyTestCase {
-    
-    void testBug() {
-
-     /* cpoirier - "def" can be refered to as a variable name,
-        but cannot be declared as one (due to ambiguities)
-
-        def = 123
-        
-        assert def == 123
-     */
-        
-        foo = new Expando(a:123, def:456)
-        assert foo.def == 456
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/DoubleSizeParametersBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/DoubleSizeParametersBug.groovy
deleted file mode 100644
index 79bee0d..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/DoubleSizeParametersBug.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-
-/**
- * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
- * @version $Revision$
- */
-class DoubleSizeParametersBug extends TestSupport {
-
-    void testBug() {
-        assertScript( """
-def foo(double x, y) {
-   y
-}
-
-foo(10.0d, 0)
-""" );
-    }
-}
-
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ForAndSqlBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ForAndSqlBug.groovy
deleted file mode 100644
index 73aa49e..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ForAndSqlBug.groovy
+++ /dev/null
@@ -1,38 +0,0 @@
-import groovy.sql.TestHelper
-
-/**
- * @author Jonathan Carlson
- * @version $Revision$
- */
-class ForAndSqlBug extends GroovyTestCase {
-    
-    void testBugInNormalMethod() {
-        sql = TestHelper.makeSql()
-        
-        li = ["a", "b"]
-        for (x in li) {
-            sql.eachRow("SELECT count(*) FROM FOOD") { e |
-            	println " ${x}"
-            
-	            assert x != null
-            }
-        }
-    }
-    
-    void testBugInsideScript() {
-        assertScript( <<<EOF
-import groovy.sql.TestHelper
-sql = TestHelper.makeSql()
-
-li = ["a", "b"]
-for (x in li) {
-    sql.eachRow("SELECT count(*) FROM FOOD") { e |
-    	println " \${x}"
-    	
-    	assert x != null
-    }
-}
-EOF)        
-	}
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ForLoopBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ForLoopBug.groovy
deleted file mode 100644
index e1543b2..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ForLoopBug.groovy
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class ForLoopBug extends GroovyTestCase {
-    
-    void testBug() {
-        assertScript( <<<EOF
-list = []
-a = 1
-b = 5
-for (c in a..b) {
-    list << c
-}
-assert list == [1, 2, 3, 4, 5]
-EOF)        
-    }
-    
-    void testSeansBug() {
-        assertScript( <<<EOF
-for (i in 1..10) {
-    println i
-}
-EOF)        
-    }
-
-    void testNormalMethod() {
-        list = []
-        a = 1
-        b = 5
-        for (c in a..b) {
-            list << c
-        }
-        assert list == [1, 2, 3, 4, 5]
-    }
-    
-     void testBytecodeGenBug() {
-        a = 1
-        b = 5
-
-        for (i in a..b) {
-            println i
-        }
-        a = i
-        
-		assert a == 5
-    }
-
-
-    void testVisibility() {
-        assertScript( <<<EOF
-
-array = [ true, true, true ];
-for( boolean i in array ) {
-   1.times {
-       assert i == true;
-   }
-}
-EOF)        
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/FullyQualifiedClassBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
deleted file mode 100644
index 6afd214..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * @version $Revision$
- */
-class FullyQualifiedClassBug extends GroovyTestCase {
-
-    void testBug() {
-        java.lang.System.err.println("Hello world")
-    }
-    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/GetterBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/GetterBug.groovy
deleted file mode 100644
index 67a8ef4..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/GetterBug.groovy
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * @version $Revision$
- */
-class GetterBug extends GroovyTestCase {
-     
-    String foo
-    
-    String getFoo() {
-    	if (foo == null) { 
-    		foo = "James"
-    	}
-    	return foo
-    }
-    
-    void setFoo(String foo) {
-    	this.foo = foo
-   	}
-    
-    void testTypedGetterAndSetter() {
-    	println "Running test"
-    	
-    	value = getFoo()
-    	
-    	println "Value is ${value}"
-    	
-    	assert value == "James"
-    	
-    	setFoo("Bob")
-    	
-    	value = getFoo()
-    	
-    	assert value == "Bob"
-    }
-    
-    bar
-    
-    getBar() {
-    	if (this.bar == null) {
-    		this.bar = "James"
-    	}
-    	bar
-    }
-    
-    void setBar(bar) {
-    	this.bar = bar
-    }
-    
-    
-    void testUntypedGetterAndSetter() {
-    	println "Running test"
-    	
-    	value = getBar()
-    	
-    	println "Value is ${value}"
-    	
-    	assert value == "James"
-    	
-    	setBar("Bob")
-    	
-    	value = getBar()
-    	
-    	assert value == "Bob"
-    }
-    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy239_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy239_Bug.groovy
deleted file mode 100644
index d4f4672..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy239_Bug.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class Groovy239_Bug extends GroovyTestCase {
-    
-    void testBug() {
-		a = makeClosure()
-		b = makeClosure()
-		c = makeClosure()
-		
-		a() {
-			println("A")
-			b() {
-				println("B")
-				c() {
-					println("C")
-				}
-			}
-		}
-	}
-
-	makeClosure() {
-		return { it() }
-	}
-		
-    void testBug2() {
-		a = { it() }
-		b = { it() }
-		c = { it() }
-		
-		a() {
-			b() {
-				c() {
-				}
-			}
-		}
-	}
-   
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy249_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy249_Bug.groovy
deleted file mode 100644
index 695eaa9..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy249_Bug.groovy
+++ /dev/null
@@ -1,63 +0,0 @@
-import groovy.xml.MarkupBuilder
-
-/**
- * @author Merrick Schincariol 
- * @version $Revision$
- */
-class Groovy249_Bug extends GroovyTestCase {
-
-    void testBug() {
-		t = new Bean249()
-		t.b = "hello"
-		println t.b
-		println "test: ${t.b}"
-		
-		xml = new MarkupBuilder()
-		root = xml.foo {
-			bar {
-				// works
-				baz("test")
-				// fails
-				baz(t.b)
-				// fails
-				baz("${t.b}")
-			}
-		} 
-	}
-	
-/** @todo don't know why this fails
-
-    void testBugInScript() {
-    	assertScript <<<EOF
-			import groovy.xml.MarkupBuilder;
-			
-			class Bean {
-				String b
-			};
-			
-			t = new Bean()
-			t.b = "hello"
-			println t.b
-			println "test: ${t.b}"
-			
-			xml = new MarkupBuilder()
-			root = xml.foo {
-				bar {
-					// works
-					baz("test")
-					// fails
-					baz(t.b)
-					// fails
-					baz("${t.b}")
-				}
-			} 
-
-EOF    	
-	}
-*/
-   
-}
-
-class Bean249 {
-	String b
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy252_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy252_Bug.groovy
deleted file mode 100644
index 6317801..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy252_Bug.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * @version $Revision$
- */
-class Groovy252_Bug extends GroovyTestCase {
-    
-    count = 0
-    
-    void testBug() {
-        value = f()
-        assert value == null
-        
-        value = g()
-        assert value == null
-        
-        value = h()
-        assert value == null
-    }
-    
-    
-    f() {
-         if (count++ == 5)
-            return null
-         else
-            return null
-    } 
-    
-    g() {
-         count++
-	     return null
-    } 
-    
-    h() {
-         ++count
-	     return null
-    } 
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy278_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy278_Bug.groovy
deleted file mode 100644
index 847e3cd..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy278_Bug.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-package groovy.bugs
-
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class Groovy278_Bug extends GroovyTestCase {
-    
-    void testBug() {
-        value = new MyRange()
-        println value
-        assert value != null
-    }
-}
-
-
-class MyRange extends IntRange {
-    MyRange() {
-        super(1, 2)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy303_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy303_Bug.groovy
deleted file mode 100644
index 2efa48c..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy303_Bug.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-package groovy.bugs
-
-import java.awt.*
-import java.awt.event.*
-import javax.swing.*
-
-
-/**
- * @author Bing Ran
- * @author Andy Dwelly
- * @version $Revision$
- */
-class Groovy303_Bug extends GroovyTestCase {
-    
-    void testBug() {
-        try {
-			scholastic = new Scholastic()
-       		scholastic.createUI()
-       	}
-       	catch (HeadlessException e) {
-       		// called from a non-UI environment
-       	}
-    }
-}
-
-
-class Scholastic implements ActionListener {
-
-    void createUI() {
-       println('createUI called')
-       frame = new JFrame("Hello World")
-       contents = frame.getContentPane()
-       pane = new JPanel()
-       pane.setLayout(new BorderLayout())
-       button = new JButton("A button")
-       button.addActionListener(this)
-       pane.add(button, BorderLayout.CENTER)
-       contents.add(pane)
-       frame.setSize(100, 100)
-       //frame.setVisible(true)
-       button.doClick()
-    }
-
-    public void actionPerformed(ActionEvent event) {
-       println "hello"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy308_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy308_Bug.groovy
deleted file mode 100644
index e58d741..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy308_Bug.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-package groovy.bugs
-
-import java.io.*
-
-/**
- * @version $Revision$
- */
-class Groovy308_Bug extends GroovyTestCase {
-    
-    void testBug() {
-    	out = new StringWriter()
-    	out << "hello " << "world!"
-    	
-    	value = out.toString()
-    	assert value == "hello world!"
-    	
-    	out = new ByteArrayOutputStream()
-    	out << "hello " << "world!"
-
-		value = new String(out.toByteArray())
-		assert value == "hello world!"
-    	    	
-    	System.out << "hello" << " world!"
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy389_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy389_Bug.groovy
deleted file mode 100644
index 319562b..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy389_Bug.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- *  Verifies that closures work inside case blocks.
- *
- */
-
-class Groovy389_Bug extends GroovyTestCase {
- 
-    void testBug() {
-       a = [10, 11, 12]
-       b = 0
-       
-       switch( "list" ) {
-          case "list":
-             a.each { b = b + 1 }
-             break
-       }
-
-       assert b == 3
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy513_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy513_Bug.groovy
deleted file mode 100644
index 4368135..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy513_Bug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- *  Verifies that comparisons to Integer.MIN_VALUE work
- */
-
-class Groovy513_Bug extends GroovyTestCase {
- 
-    void testMinMaxValueComparison() {
-    	assertTrue(8 < Integer.MAX_VALUE);
-    	assertTrue(8 > Integer.MIN_VALUE);
-    	assertTrue(8L < Long.MAX_VALUE);
-    	assertTrue(8L > Long.MIN_VALUE);
-    	assertTrue(8.0 < Double.MAX_VALUE);
-    	assertTrue(8.0 > Double.MIN_VALUE);
-    }
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy558_616_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy558_616_Bug.groovy
deleted file mode 100644
index 4444292..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy558_616_Bug.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-package groovy.bugs
-
-import groovy.util.Dummy
-
-/**
-  * Fixes GROOVY-558 and GROOVY-616.
-  * A fully qualified class name ending with .class or not were not recognized properly.
-  *
-  * @author Jochen Theodorou
-  * @author Guillaume Laforge
-  */
-class Groovy558_616_Bug extends GroovyTestCase {
-
-    void testListClass() {
-        assert java.util.ArrayList.class == ArrayList.class
-        assert java.util.ArrayList.class == ArrayList
-        assert ArrayList != Class
-        list = new ArrayList()
-        assert list.class == ArrayList
-    }
-
-    void testStringClass() {
-        assert java.lang.String.class == String.class
-        assert java.lang.String.class == String
-        assert String != Class
-        st = ""
-        assert st.class == String
-    }
-
-    void testDummyClass() {
-        assert groovy.util.Dummy.class == Dummy.class
-        assert groovy.util.Dummy.class == Dummy
-        assert Dummy != Class
-        dum = new Dummy()
-        assert dum.class == Dummy
-    }
-
-    void testFooClass() {
-        assert groovy.bugs.Groovy558_616_Bug.class == Groovy558_616_Bug
-        assert Groovy558_616_Bug != Class
-        f = new Groovy558_616_Bug()
-        assert f.class == Groovy558_616_Bug
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy593_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy593_Bug.groovy
deleted file mode 100644
index 07766f0..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy593_Bug.groovy
+++ /dev/null
@@ -1,61 +0,0 @@
-package groovy.bugs
-
-import java.io.StringWriter
-import groovy.xml.MarkupBuilder
-
-/** 
- * Tests that special XML chars are entitized by MarkupBuilder.
- *
- * @author <a href="mailto:scottstirling@rcn.com">Scott Stirling</a>
- *
- * @version $Revision$
- *
- *   Fix the cr lf handling of multiline stringon both of linux and Windows XP.
- *   This test should success on Windows XP.
- *
- *   @author Pilho Kim
- */
-class Groovy593_Bug extends GroovyTestCase {
-    
-    StringWriter writer = new StringWriter()
-    MarkupBuilder chars = new MarkupBuilder(writer)
-    XmlParser parser = new XmlParser()
-    String expectedXML = <<<EOF
-<chars>
-  <ampersand a='&amp;'>&amp;</ampersand>
-  <quote>&quot;</quote>
-  <lessthan attr='value'>chars: &amp; &lt; &gt; &quot;</lessthan>
-  <element attr='value 1 &amp; 2'>chars: &amp; &lt; &gt; &quot; in middle</element>
-  <greaterthan>&gt;</greaterthan>
-</chars>
-EOF
-
-    void testBug() {
-        // XML characters to test with
-        chars.chars {
-            ampersand(a: "&", "&")
-            quote("\'")
-            lessthan(attr: "value", "chars: & < > \'") 
-            element(attr: "value 1 & 2", "chars: & < > \' in middle")
-            greaterthan(">")
-        }
-        //DEBUG
-        //println writer
-
-        // Test MarkupBuilder state with expectedXML
-	// Handling the cr lf characters, depending on operating system. 
-        outputValue = writer.toString()
-        if (expectedXML.indexOf("\r\n") >= 0 && outputValue.indexOf("\r\n") < 0) {
-                assert expectedXML.replaceAll("\r\n", "\n").length() == outputValue.length()
-                assertEquals(expectedXML.replaceAll("\r\n", "\n"), outputValue)
-        }
-        else if (expectedXML.indexOf("\r\n") < 0 && outputValue.indexOf("\r\n") >= 0) {
-                assert expectedXML.length() == outputValue.replaceAll("\r\n", "\n").length()
-                assertEquals(expectedXML, outputValue.replaceAll("\r\n", "\n"))
-        }
-
-        // parser will throw a SAXParseException if XML is not valid
-        parser.parseText(writer.toString())
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy666_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy666_Bug.groovy
deleted file mode 100644
index 6980841..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy666_Bug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-package groovy.bugs
-
-/**
- *  @author Russel Winder
- *  @version $Revision$
- */ 
-class Groovy666_Bug extends GroovyTestCase {
-  void testRunScript() {
-    (new GroovyShell ()).evaluate("x = 1")
-  }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy675_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy675_Bug.groovy
deleted file mode 100644
index 13bf212..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy675_Bug.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-package groovy.bugs
-
-/**
- *  @author Pilho Kim
- *  @version $Revision$
- */ 
-class Groovy675_Bug extends GroovyTestCase {
-    void testStringAndGString() {
-	assert "\\"!="\\\\" 
-	assert "\\$"=="\\"+"$" 
-	assert "\\"+"\\\\" == "\\"+"\\"+"\\" && "\\\\"+"\\" == "\\"+"\\"+"\\"
-	assert ("\\\\"+"\\").length() == 3
-	assert "\\3 $1$2" == "\\" + "3" + " " + "$" + "1" + "$" + "2"
-	assert "\\\\3 \\$1$2" == "\\" + "\\" + "3" + " " + "\\"+ "$" + "1" + "$" + "2"
-	assert "\\\\\\3 \\\\$1$2" == "\\" + "\\\\" + "3" + " " + "\\\\"+ "$" + "1" + "$" + "2"
-	assert "\\\\\\\\3 \\\\\\$1$2" == "\\\\" + "\\\\" + "3" + " " + "\\\\\\"+ "$" + "1" + "$" + "2"
-
-	assert "\\\\" == "\\" + "\\"
-	assert "\\\\".length() == 2
-
-	z = 100 + 200
-	assert "\\\\ \\ ${z}" == "\\\\ \\ 300"
-	assert "\\\\ \\ ${z}" == "\\" + "\\" + " " + "\\" + " " + "300"
-	assert "Hello\\, \\World\\".charAt(4) == "o".charAt(0)
-	assert "Hello\\, \\World\\".charAt(5) == "\\".charAt(0)
-	assert "Hello\\, \\World\\".charAt(6) == ",".charAt(0)
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/Groovy770_Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/Groovy770_Bug.groovy
deleted file mode 100644
index 1df21e6..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/Groovy770_Bug.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * @version $Revision$
- */
-
-package groovy.bugs
-
-class Groovy770_Bug extends GroovyTestCase {
-     
-    void testBug() {
-        a = new Pair(sym:"x")
-        b = new Pair(sym:"y")
-        c = new Pair(sym:"y")
-
-        l1 = [a, b]
-        l2 = [c]
-        println (l1)
-        println (l2)
-        println (l1 - l2)
-        assert l1 - l2 == l1
-
-
-        a = new CPair(sym:"x")
-        b = new CPair(sym:"y")
-        c = new CPair(sym:"y")
-        l1 = [a, b]
-        l2 = [c]
-        println (l1)
-        println (l2)
-        println (l1 - l2)
-        assert l1 - l2 == [a]
-    }
-}
-
-import java.util.*
-
-class Pair {
-  String sym
-}
-
-class CPair implements Comparable {
-  public String sym
-  int compareTo(Object o) {
-      return sym.compareTo(((CPair) o).sym);
-  }
-}
-
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/GuillaumesBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/GuillaumesBug.groovy
deleted file mode 100644
index dd635ee..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/GuillaumesBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @author Guillaume Laforge 
- * @version $Revision$
- */
-class GuillaumesBug extends GroovyTestCase {
-    
-    void testBug() {
-        if (true) 
-            println("true")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/GuillaumesMapBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/GuillaumesMapBug.groovy
deleted file mode 100644
index 2dda2e9..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/GuillaumesMapBug.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * @author Guillaume Laforge
- * @version $Revision$
- */
-class GuillaumesMapBug extends GroovyTestCase {
-    
-    void testBug2() {
-        list = [1, 2, 3]
-        map = [:]
-        
-        doLoop(list, map)
-    
-        assert map[0] == 1 
-        assert map[1] == 2 
-        assert map[2] == 3 
-    }
-    
-    void doLoop(list, map) {
-        i = 0
-        for (it in list) {
-            map[i++] = it
-        }
-    }
-    
-    
-    void testBug() {
-        list = [1, 2, 3]
-        map = [:]
-        doClosureLoop(list, map)
-        
-        assert map[0] == 1 
-        assert map[1] == 2 
-        assert map[2] == 3 
-    }
-    
-    void doClosureLoop(list, map) {
-        i = 0
-        list.each { map[i++] = it }
-    }    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/IanMaceysBug.java b/groovy/modules/classic/src/test/groovy/bugs/IanMaceysBug.java
deleted file mode 100644
index 084fc47..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/IanMaceysBug.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class IanMaceysBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        try {
-            assertScript("dummy = 0; for ( i in 0..9 ) {  dummy += i }\n println 'done'", "dummy.groovy");
-            fail("Should throw a syntax exception");
-        }
-        catch (CompilationFailedException e) {
-            System.out.println("Worked. Caught: " + e);
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/InconsistentStackHeightBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/InconsistentStackHeightBug.groovy
deleted file mode 100644
index a3f9b30..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/InconsistentStackHeightBug.groovy
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * @version $Revision$
- */
-class InconsistentStackHeightBug extends GroovyTestCase {
-
-    void testBug() {
-        server = 0
-        server + 1
-        try {
-        }
-        finally {
-        }
-    }
-
-    void testBug2() {
-        server = 0
-        server == 2
-        try {
-        }
-        finally {
-        }
-    }
-
-    void testBug3() {
-        server = 0
-        server
-        try {
-        }
-        finally {
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/InterfaceImplBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/InterfaceImplBug.groovy
deleted file mode 100644
index 9b3a075..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/InterfaceImplBug.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-package groovy.bugs
-
-import java.io.Reader
-import org.codehaus.groovy.dummy.FooHandler
-
-/**
- * @author Robert Fuller
- * @version $Revision$
- */
-class InterfaceImplBug extends GroovyTestCase implements FooHandler {
-
-    void testMethodCall() {
-		handle(null)        
-    }
-    
-    void handle(Reader reader){
-        println("in handle method")
-        called = true
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Bug657.groovy b/groovy/modules/classic/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Bug657.groovy
deleted file mode 100644
index 0b65296..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Bug657.groovy
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
-  * <p>
-  * Test that ensures that:
-  * <ul>
-  *   <li>it is possible to write a builder in Groovy</li>
-  *   <li>it is possible to call normal methods from the builder,
-  *       without the methods being trapped endlessly by createNode()</li>
-  * </ul>
-  * </p>
-  *
-  * @author Guillaume Laforge
-  */
-class InvokeNormalMethodFromBuilder_Bug657 extends GroovyTestCase {
-	void testInvokeNormalMethod() {
-		b = new Builder()
-		assert b.callNormalMethod() == "first"
-		
-		value = b.someNode() {}
-		assert value == "second"
-	}
-}
-
-class Builder extends BuilderSupport {
-
-	void setParent(Object parent, Object child) {}
-	
-	Object createNode(Object name)                 { return createNode(name, [:], null) }
-	Object createNode(Object name, Map attributes) { return createNode(name, attributes, null) }
-	Object createNode(Object name, Object value)   { return createNode(name, [:], value) }
-	
-	Object createNode(Object name, Map attributes, Object value) { 
-		println "create ${name}"
-		return callOtherStaticallyTypedMethod()
-	}
-	
-	String callNormalMethod()               { println "normalMethod"; return "first" }
-	String callOtherStaticallyTypedMethod() { println "otherMethod";  return "second" }
-	
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/IterateOverCustomTypeBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/IterateOverCustomTypeBug.groovy
deleted file mode 100644
index af13770..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/IterateOverCustomTypeBug.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-import groovy.bugs.TestSupport
-
-/**
- * @version $Revision$
- */
-class IterateOverCustomTypeBug extends TestSupport {
-    
-    void testBug() {
-        object = this
-        
-        answer = []
-        for (i in object) {
-            answer << i
-        }
-        assert answer == ['a', 'b', 'c']
-        
-        answer = []
-        object.each { answer << it }
-        assert answer == ['a', 'b', 'c']
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/MarkupAndMethodBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/MarkupAndMethodBug.groovy
deleted file mode 100644
index 2abbf52..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/MarkupAndMethodBug.groovy
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-/**
- * Mixes variables, closures and method calls in markup
- *
- * @version $Revision$
- */
-class MarkupAndMethodBug extends GroovyTestCase {
-    
-    void testBug() {
-        tree = createTree()
-
-		name = tree.person[0]['@name']
-        assert name == 'James'
-    }
-    
-    protected createTree() {       
-        builder = NodeBuilder.newInstance()
-        
-        root = builder.people() {
-            person(name:getName()) {
-            /*
-                location(name:'London')
-                projects {
-                    project(name:'geronimo')
-                }
-            }
-            person(name:'Bob') {
-                location(name:'Atlanta')
-                projects {
-                    project(name:'drools')
-                }
-            */
-            }
-        }
-        
-        assert root != null
-        
-        return root
-    }
-    
-    protected getName() {
-    	"James"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/MarkupInScriptBug.java b/groovy/modules/classic/src/test/groovy/bugs/MarkupInScriptBug.java
deleted file mode 100644
index d6552c4..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/MarkupInScriptBug.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-
-/**
- * @version $Revision$
- */
-public class MarkupInScriptBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        assertScriptFile( "src/test/groovy/script/AtomTestScript.groovy" );
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy
deleted file mode 100644
index ecf1ebd..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-class MethodCallWithoutParensInStaticMethodBug extends GroovyTestCase {
-
-    void testBug() {
-        staticMethod()
-    }
-    
-    static void staticMethod() {
-        println 'hello'[1]
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/MethodDispatchBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/MethodDispatchBug.groovy
deleted file mode 100644
index a3715c4..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/MethodDispatchBug.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * @author Chris Poirier
- * @version $Revision$
- */
-class MethodDispatchBug extends GroovyTestCase {
-    void doit(Object parameter1, Object parameter2) {
-        System.out.println("TestChild::doit( Object, Object )");
-    }
-
-    void doit(Boolean parameter1, Object parameter2) {
-        System.out.println("TestChild::doit( Boolean, Object )");
-    }
-
-    void doit(Object parameter1, Boolean parameter2) {
-        System.out.println("TestChild::doit( Object, Boolean )");
-    }
-
-    void doit(Boolean parameter1, Boolean parameter2) {
-        System.out.println("TestChild::doit( Boolean, Boolean )");
-    }
-
-    void testBug() {
-    /* @todo
-    	strange - this works fine inside eclipse but fails inside Maven
-    	
-        o = this;
-
-        System.out.println("Calling Test.doit( Boolean, Boolean ) -- expect Boolean, Boolean");
-        o.doit(true, true);
-
-        System.out.println("");
-        System.out.println("Calling Test.doit( Boolean, Integer ) -- expect Boolean, Object");
-        o.doit(true, 9);
-
-        System.out.println("");
-        System.out.println("Calling Test.doit( Integer, Boolean ) -- expect Object, Boolean");
-        o.doit(9, true);
-
-        System.out.println("");
-        System.out.println("Calling Test.doit( Integer, Integer ) -- expect Object, Object");
-        o.doit(9, 9);
-    */
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/MorgansBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/MorgansBug.groovy
deleted file mode 100644
index f4b7dc8..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/MorgansBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @author Morgan Hankins
- * @version $Revision$
- */
-class MorgansBug extends GroovyTestCase {
-
-    void testBug() {
-        result = 4 + "x"
-        assert result == "4x"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/NestedClosure2Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/NestedClosure2Bug.groovy
deleted file mode 100644
index dc61a79..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/NestedClosure2Bug.groovy
+++ /dev/null
@@ -1,68 +0,0 @@
-import org.codehaus.groovy.classgen.TestSupport
-
-/**
- * @version $Revision$
- */
-class NestedClosure2Bug extends TestSupport {
-     
-    f
-     
-    void testFieldBug() {
-    	closure = {
-    		return {
-	    		f = 123
-	    		return null
-	        }
-	    }
-        value = closure()
-        value = value()
-        assert f == 123
-    }
-     
-    void testBugOutsideOfScript() {
-    	a = 123
-    	b = 456
-    	closure = { 
-    		println b
-    		c = 999
-    		return {
-    			f = 2222111
-    			
-    			println f
-    			
-    			println c
-    			d = 678
-    			return { 
-    				println f
-    				assert f == 2222111
-    				println d
-    				return a
-    			}
-    		}
-    	}
-    	c2 = closure()
-    	c3 = c2()
-    	value = c3()
-
-		assert f == 2222111    	
-    	assert value == 123
-    }
-    
-    void testBug() {
-    	assertScript """
-	    	a = 123
-	    	closure = { 
-	    		return {
-	    			return { 
-	    				return a
-	    			}
-	    		}
-	    	}
-	    	c2 = closure()
-	    	c3 = c2()
-	    	value = c3()
-	    	
-	    	assert value == 123
-"""
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/NestedClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/NestedClosureBug.groovy
deleted file mode 100644
index cc0aa9f..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/NestedClosureBug.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * @version $Revision$
- */
-class NestedClosureBug extends GroovyTestCase {
-     
-    void testBug() {
-    	a = 123
-    	getValues().each { 
-    		println it
-    		it.each { 
-    			assert a == 123
-    		}
-    	}
-    }
-    
-    getValues() {
-    	[5, 6, 7]
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/NullCompareBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/NullCompareBug.groovy
deleted file mode 100644
index d032297..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/NullCompareBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @version $Revision$
- */
-class NullCompareBug extends GroovyTestCase {
-    
-    void testBug() {
-        assert "dog" > null
-        assert null < "dog"
-        assert null == null
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy
deleted file mode 100644
index bece380..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * @version $Revision$
- */
- 
-class OverloadInvokeMethodBug extends GroovyTestCase {
-     
-    void testBug() {
-    	a = new OverloadA()
-    	a.duh()
-    	
-    	b = new OverloadB()
-    	b.duh()
-    }
-
-}
-
-class OverloadA {
-        invokeMethod(String name, Object args) {
-                try {
-                        metaClass.invokeMethod(this, name, args)
-                } catch(MissingMethodException e) {
-                        println "Missing method: ${name}"
-                }
-        } 
-}
-
-class OverloadB extends OverloadA {
-
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/PrimitivePropertyBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/PrimitivePropertyBug.groovy
deleted file mode 100644
index a7bed79..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/PrimitivePropertyBug.groovy
+++ /dev/null
@@ -1,50 +0,0 @@
-package groovy.bugs
-
-/**
- * @version $Revision$
- *
- * Fix Bug GROOVY-683
- * @author Pilho Kim
- */
-class PrimitivePropertyBug extends GroovyTestCase {
-     
-    double x1
-    float x2
-    long x3
-    int x4
-    short x5
-    byte x6
-    char x7
-
-    void testBug() {
-        y = new PrimitivePropertyBug() 
-        y.x1 = 10.0
-        y.x2 = 10.0
-        y.x3 = 10.0
-        y.x4 = 10.0
-        y.x5 = 10.0
-        y.x6 = 10.0
-        y.x7 = 10.0
-        
-        assert y.x1 == 10.0
-        assert y.x2 == 10.0
-        assert y.x3 == 10.0
-        assert y.x4 == 10.0
-        assert y.x5 == 10.0
-        assert y.x6 == 10.0
-        assert y.x1.class == Double.class
-        assert y.x2.class == Float.class
-        assert y.x3.class == Long.class
-        assert y.x4.class == Integer.class
-        assert y.x5.class == Short.class
-        assert y.x6.class == Byte.class
-        assert y.x7.class == Character.class
-        assert y.x1 + y.x1 == y.x1 * 2
-        assert y.x2 - 1 == 9.0f
-        assert y.x3 * 2 == 20L
-        assert y.x4 == 10
-        assert y.x5 == 10
-        assert y.x6 + 3 == 13
-        assert "Hello" + y.x7 + "World!" == "Hello\nWorld!"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/PrintlnWithNewBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/PrintlnWithNewBug.groovy
deleted file mode 100644
index 0140962..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/PrintlnWithNewBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @author Mark Volkmann 
- * @version $Revision$
- */
-class PrintlnWithNewBug extends GroovyTestCase {
-    
-    void testBug() {
-        println(new Foo(name:'abc')) 
-        println new Foo(name:'def') 
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/PropertyBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/PropertyBug.groovy
deleted file mode 100644
index c207dd5..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/PropertyBug.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-import javax.swing.JButton
-import javax.swing.JPanel
-
-/**
- * @version $Revision$
- */
-class PropertyBug extends GroovyTestCase {
-     
-    void testBug() {
-        panel = new JPanel()
-        bean = new JButton()
-        
-        panel.add(bean)
-        
-        value = bean.parent
-        assert value != null
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/RodsBooleanBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/RodsBooleanBug.groovy
deleted file mode 100644
index a06a52c..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/RodsBooleanBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @version $Revision$
- */
-class RodsBooleanBug extends GroovyTestCase {
-
-    item = "hi"
-    
-    void testBug() {
-        assert isIt()
-    }
-    
-    isIt() {
-        return item != null && item == "hi"
-    }
-    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/RodsBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/RodsBug.groovy
deleted file mode 100644
index df3c546..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/RodsBug.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * @author Rod Cope
- * @version $Revision$
- */
-class RodsBug extends GroovyTestCase {
-    
-    void testBug() {
-        doTest(true)
-        /*
-         x = 1
-         if (x > 0) {
-         String name = "Rod"
-         println(name)
-         }
-         */
-    }
-    
-    void testBug2() {
-        x = 1
-        if (x > 0) {
-            //String name = "Rod"
-            name = "Rod"
-            println(name)
-        }
-    }
-    
-    void doTest(flag) {
-        if (flag) {
-            String name = "Rod"
-            //name = "Rod"
-            doAssert(name)
-        }
-    }
-    
-    void doTest() {
-        String name = "Rod"
-        doAssert(name)
-    }
-    
-    void doAssert(text) {
-        assert text != null
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ScriptBug.java b/groovy/modules/classic/src/test/groovy/bugs/ScriptBug.java
deleted file mode 100644
index 89852f4..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ScriptBug.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ScriptBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        assertScript( "println 'hello world'" );
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SeansBug.java b/groovy/modules/classic/src/test/groovy/bugs/SeansBug.java
deleted file mode 100644
index 88f0375..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SeansBug.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import groovy.lang.GroovyShell;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * @author Sean Timm 
- * @version $Revision$
- */
-public class SeansBug extends TestSupport {
-
-    public void testBug() throws Exception {
-        String code = "for (i in 1..10) \n{\n  println(i)\n}";
-        GroovyShell shell = new GroovyShell();
-        shell.evaluate(code);
-    }
-
-    public void testMarkupBug() throws Exception {
-        String[] lines =
-            {
-                "package groovy.xml",
-                "",
-                "b = new MarkupBuilder()",
-                "",
-                "b.root1(a:5, b:7) { ",
-                "    elem1('hello1') ",
-                "    elem2('hello2') ",
-                "    elem3(x:7) ",
-                "}" };
-        String code = asCode(lines);
-        GroovyShell shell = new GroovyShell();
-        shell.evaluate(code);
-    }
-
-    /**
-     * Converts the array of lines of text into one string with newlines
-     */
-    protected String asCode(String[] lines) {
-        StringBuffer buffer = new StringBuffer();
-        for (int i = 0; i < lines.length; i++) {
-            buffer.append(lines[i]);
-            buffer.append("\n");
-        }
-        return buffer.toString();
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SimpleModel.java b/groovy/modules/classic/src/test/groovy/bugs/SimpleModel.java
deleted file mode 100644
index 8bcd1d3..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SimpleModel.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-/**
- * @author 
- * @version $Revision$
- */
-public class SimpleModel {
-    public String s;
-
-    SimpleModel () {
-        s="Hi!";
-    }
-
-    public void show() {
-        System.out.println(s);
-    }
-
-    public static void main(String[] args) {
-        SimpleModel simp = new SimpleModel();
-        simp.show();
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/StaticClosurePropertyBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/StaticClosurePropertyBug.groovy
deleted file mode 100644
index f87ec5e..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/StaticClosurePropertyBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/** 
- * @author Robert Kuzelj
- * @version $Revision$
- */
-class StaticClosurePropertyBug extends GroovyTestCase {
-
-    static out = {System.out.println(it)}
-    
-    void testCallStaticClosure() {
-        callStaticClosure()
-    }
-    
-    static callStaticClosure() {
-        out("TEST")
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/StaticMarkupBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/StaticMarkupBug.groovy
deleted file mode 100644
index 6b4f0d8..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/StaticMarkupBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-import groovy.xml.MarkupBuilder
-
-class StaticMarkupBug extends GroovyTestCase {
-
-    void testBug() {
-        doMarkup(new MarkupBuilder())
-    }
-    
-    static void doMarkup(builder) {
-        builder.html {
-            head {
-                title("Groovy")
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/StaticMethodCallBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/StaticMethodCallBug.groovy
deleted file mode 100644
index 558a397..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/StaticMethodCallBug.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.bugs
-
-/** 
- * @version $Revision$
- */
-class StaticMethodCallBug extends GroovyTestCase {
-
-    void testBug() {
-        value = TestSupport.mockStaticMethod()
-        assert value == "cheese"
-    }
-    
-    void testStaticProperty() {
-        value = TestSupport.mockStaticProperty
-        assert value == "cheese"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy
deleted file mode 100644
index 769ca15..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy
+++ /dev/null
@@ -1,60 +0,0 @@
-class SubscriptAndExpressionBug extends GroovyTestCase {
-    
-    void testBug() {
-        foo = ["nice cheese grommit"]
-        
-        cheese = foo[0].startsWith("nice")
-        
-        assert cheese == true
-    }
-
-    void testSubscriptIncrement() {
-        foo = [5, 6, 7]
-        foo[0] += 5
-        
-        assert foo[0] == 10
-        
-        i = 0
-        foo[i++] = 1
-        assert foo[0] == 1
-        assert i == 1
-        
-        foo[i++] += 5
-        assert i == 2
-        assert foo[1] == 11
-    }
-
-    void testLargeSubscript() {
-        foo = [1]
-        
-        foo[10] = 123
-        
-        assert foo[10] == 123
-        
-        foo.putAt(12, 55)
-        assert foo[12] == 55
-        
-        i = 20
-        foo[i] = 1
-        foo[i++] += 5
-        
-        assert i == 21
-        assert foo[20] == 6
-    }
-    
-    void testDoubleSubscript() {
-        foo = ["nice cheese grommit"]
-        
-        cheese = foo[0][5..10]
-        
-        assert cheese == "cheese"
-    }
-    
-    void testSubscriptAndProperty() {
-        foo = [['gromit':'cheese']]
-        
-        cheese = foo[0].gromit
-        
-        assert cheese == "cheese"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnPrimitiveTypeArrayBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnPrimitiveTypeArrayBug.groovy
deleted file mode 100644
index 58f6d8b..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnPrimitiveTypeArrayBug.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-package groovy.bugs
-
-class SubscriptOnPrimitiveTypeArrayBug extends TestSupport {
-    int[] ia;  // type is not necessary
-    int i1;
-    void testBug() {
-        array = getIntArray() // this function returns [I, true primitive array
-        
-        value = array[2]
-        
-        assert value == 3
-        
-        array[2] = 8
-
-        value = array[2]
-        assert value == 8
-        
-        // lets test a range
-        range = array[1..2]
-        
-        assert range == [2, 8]
-    }
-
-    void testGroovyIntArray() {
-        ia = new int[]{1, 2} // this is really Integer[]
-        int[] ia1 = ia; // type is not necessary
-        i1 = ia1[0]
-        int i2 = i1
-        assert i2 == 1
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnStringArrayBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnStringArrayBug.groovy
deleted file mode 100644
index efef8b5..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SubscriptOnStringArrayBug.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-package groovy.bugs
-
-class SubscriptOnStringArrayBug extends TestSupport {
-
-    void testArraySubscript() {
-        array = getMockArguments()
- 
-        assert array[1] == "b"
-        
-        array[0] = "d"
-        
-        assert array[0] == "d"
-        
-        println("Contents of array are ${array.inspect()}")
-    }
-    
-    void testRobsTestCase() {
-        array = "one two three".split(" ")
-        
-        assert array[1] == "two"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SuperMethod2Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/SuperMethod2Bug.groovy
deleted file mode 100644
index 3aa8c6a..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SuperMethod2Bug.groovy
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * @version $Revision$
- */
- 
-class SuperMethod2Bug extends GroovyTestCase {
-     
-    void testBug() {
-    	base = new SuperBase()
-    	value = base.doSomething()
-    	assert value == "TestBase"
-    	
-    	
-    	base = new SuperDerived()
-    	value = base.doSomething()
-    	assert value == "TestDerivedTestBase"
-    }
-
-    void testBug2() {
-    	base = new SuperBase()
-    	value = base.foo(2)
-    	assert value == "TestBase2"
-    	
-    	
-    	base = new SuperDerived()
-    	value = base.foo(3)
-    	assert value == "TestDerived3TestBase3"
-    }
-
-    void testBug3() {
-    	base = new SuperBase()
-    	value = base.foo(2,3)
-    	assert value == "foo(x,y)Base2,3"
-    	
-    	
-    	base = new SuperDerived()
-    	value = base.foo(3,4)
-    	assert value == "foo(x,y)Derived3,4foo(x,y)Base3,4"
-    }
-
-    void testBug4() {
-    	base = new SuperBase("Cheese")
-    	value = base.name
-    	assert value == "Cheese"
-    	
-    	
-    	base = new SuperDerived("Cheese")
-    	value = base.name
-    	assert value == "CheeseDerived"
-    }
-}
-
-class SuperBase {
-    String name
-
-    SuperBase() {
-    }
-    
-    SuperBase(String name) {
-        this.name = name
-    }
-    
-    doSomething() {
-    	"TestBase"
-    }
-
-    foo(param) {
-    	"TestBase" + param
-    }
-    
-    foo(x, y) {
-    	"foo(x,y)Base" + x + "," + y
-    }
-}
-
-class SuperDerived extends SuperBase {
-    
-	calls = 0
-	
-	SuperDerived() {
-	}
-	
-	SuperDerived(String name) {
-	    super(name + "Derived")
-	}
-	
-    doSomething() {
-    	/** @todo ++calls causes bug */
-    	//calls++
-    	/*
-    	calls = calls + 1
-    	assert calls < 3
-    	*/
-    	
-    	"TestDerived" + super.doSomething()
-    }
-	
-    foo(param) {
-    	"TestDerived" + param + super.foo(param)
-    }
-	
-    foo(x, y) {
-    	"foo(x,y)Derived" + x + "," + y + super.foo(x, y)
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/bugs/SuperMethodBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/SuperMethodBug.groovy
deleted file mode 100644
index 574f0ea..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/SuperMethodBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @version $Revision$
- */
-class SuperMethodBug extends GroovyTestCase {
-     
-    void testBug() {
-    	base = new TestBase("yyy")
-    	value = base.doSomething()
-    	assert value == "TestBase"
-    	
-    	base = new TestDerived("abc")
-    	value = base.doSomething()
-    	assert value == "TestDerivedTestBase"
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TedsClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/TedsClosureBug.groovy
deleted file mode 100644
index c197bd4..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TedsClosureBug.groovy
+++ /dev/null
@@ -1,71 +0,0 @@
-import groovy.xml.MarkupBuilder
-
-/**
- * @author Ted Leung
- * @version $Revision$
- */
-class TedsClosureBug extends GroovyTestCase {
-    
-    void testBug() {
-		f = new Feed()
-		
-		f.author = new Person(name:'Ted Leung',url:'http://www.sauria.com/blog', email:'twl@sauria.com')
-		
-		f.entries = [ new Entry(title:'one',summary:'first post'), new Entry(title:'two',summary:'the second post'), new Entry(title:'three', summary:'post the third'), new Entry(title:'four',summary:'the ponderous fourth post') ]
-		
-		//f.entries.each { println it.title }
-		//println f.author.name
-		
-		xml = new MarkupBuilder()
-		
-		atom = xml.atom() {
-		  title("Ted Leung off the air")
-		  link("http://www.sauria.com/noblog")
-		  author() {
-		    person() {
-		      name(f.author.name)
-		      url(f.author.url)
-		      email(f.author.email)
-		    }
-		  }
-		  for (e in f.entries) {
-		    entry() {
-		    	/** @todo if use the non-existent title() method then a confusing exception is thrown */
-		    	
-		      title(e.title)
-		      summary(e.summary)
-		    }
-		  }
-		}
-	}   
-}
-
-
-class Feed {
-    String title
-    String link
-    Person author
-    String tagline
-    String generator
-    String copyright
-    String modified
-    List entries
-}
-
-class Entry {
-    String title
-    String link
-    String id
-    String summary
-    String content
-    Person author
-    String created
-    String issued
-    String modified
-}
-
-class Person {
-    String name
-    String url
-    String email
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TestBase.groovy b/groovy/modules/classic/src/test/groovy/bugs/TestBase.groovy
deleted file mode 100644
index 3c25cbb..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TestBase.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * A base class for testing constructors
- * 
- * @version $Revision$
- */
-
- class TestBase {
-
-     String foo
-     
-     TestBase() {
-     }
-     
-     TestBase(String aFoo) {
-         this.foo = aFoo
-     }
-     /** @todo fix bug
-     */
-     
-     doSomething() {
-     	"TestBase"
-     }
- }
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TestCaseBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/TestCaseBug.groovy
deleted file mode 100644
index f2f6763..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TestCaseBug.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-import junit.framework.TestCase
-
-/**
- * @version $Revision$
- */
-class TestCaseBug extends TestCase {
-    
-    TestCaseBug(String name) {
-    		super(name)
-    	}
-    	
-    	void testDummy() {
-    		println "worked!"
-    	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TestDerived.groovy b/groovy/modules/classic/src/test/groovy/bugs/TestDerived.groovy
deleted file mode 100644
index 9a4fd3f..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TestDerived.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * A base class for testing constructors
- * 
- * @version $Revision$
- */
-
- class TestDerived extends TestBase {
-
-     TestDerived(String aFoo) {
-         super(aFoo)
-     }
-     
-     doSomething() {
-     	"TestDerived" + super.doSomething()
-     }
- }
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TestSupport.java b/groovy/modules/classic/src/test/groovy/bugs/TestSupport.java
deleted file mode 100644
index 4580891..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TestSupport.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.bugs;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * Base class for test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class TestSupport extends GroovyTestCase {
-
-    public String[] getMockArguments() {
-        return new String[] { "a", "b", "c" };
-    }
-    
-    public static String mockStaticMethod() {
-        return "cheese";
-    }
-    
-    public static String getMockStaticProperty() {
-        return "cheese";
-    }
-    
-    public static int[] getIntArray() {
-        return new int[] { 1, 2, 3, 4, 5 };
-    }
-    
-    public Iterator iterator() {
-        System.out.println("Calling custom iterator() method for " + this);
-        
-        return Arrays.asList(getMockArguments()).iterator();
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ToStringBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ToStringBug.groovy
deleted file mode 100644
index fbf934f..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ToStringBug.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * @version $Revision$
- */
-class ToStringBug extends GroovyTestCase {
-     
-    void testBug() {
-    	println "Starting test"
-    	
-    	value = toString()
-    	assert value != null
-    	
-    	println value
-    	println "Found value ${value}"
-    }
-    
-    String toString() {
-    	return super.toString() + "[hey]"
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TryCatch2Bug.groovy b/groovy/modules/classic/src/test/groovy/bugs/TryCatch2Bug.groovy
deleted file mode 100644
index b6722ed..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TryCatch2Bug.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * @author Morgan Hankins 
- * @version $Revision$
- */
-class TryCatch2Bug extends GroovyTestCase {
-    
-    void testBug() {
-        try {
-        }
-        catch (Throwable t) { 
-        } 
-    }
-    
-    void testBug2() {
-    	try {
-    		x = 123
-    	}
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/TryCatchBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/TryCatchBug.groovy
deleted file mode 100644
index 4388abe..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/TryCatchBug.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class TryCatchBug extends GroovyTestCase {
-    
-    void testBug() {
-        try {
-            println("Hello")
-        }
-        finally {
-            println("Finally")
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/UnknownVariableBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/UnknownVariableBug.groovy
deleted file mode 100644
index ccfc9ce..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/UnknownVariableBug.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * @version $Revision$
- */
-class UnknownVariableBug extends GroovyTestCase {
-
-    void testBug() {
-        shouldFail {
-            println(foo)
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/UseClosureInClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/UseClosureInClosureBug.groovy
deleted file mode 100644
index a0a7314..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/UseClosureInClosureBug.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * @version $Revision$
- */
-class UseClosureInClosureBug extends GroovyTestCase {
-    
-    void testBug() {
-        closure = { println it }
-        
-        anotherClosure = { closure(it) }
-        anotherClosure("Hello")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/UseStaticInClosureBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/UseStaticInClosureBug.groovy
deleted file mode 100644
index 86c3430..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/UseStaticInClosureBug.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @version $Revision$
- */
-class UseStaticInClosureBug extends GroovyTestCase {
-
-    static stuff = [:]
-
-    void testBug() {
-        [1,2,3].each { stuff[it] = "dog" }
-
-        assert stuff.size() == 3
-        assert stuff[2] == "dog"
-    }
-
-    void testBug2() {
-        doStatic()
-    }
-
-    static doStatic() {
-        [1,2,3].each { stuff[it] = "dog" }
-
-        assert stuff.size() == 3
-        assert stuff[2] == "dog"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/VariablePrecedence.groovy b/groovy/modules/classic/src/test/groovy/bugs/VariablePrecedence.groovy
deleted file mode 100644
index c878fa2..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/VariablePrecedence.groovy
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * @author John Wilson
- * @version $Revision$
- */
-class VariblePrecedence extends GroovyTestCase {
-    
-    void testVariablePrecedence() {
- 
-        assertScript( <<<-EOF
-            class VariableFoo {
-                x = 100
-                y = 93
-                c = {|x| assert x == 1; assert y == 93; }
-                static void main(args) {
-                    vfoo = new VariableFoo()
-                    vfoo.c.call(1)
-
-                    z = 874;
-                    1.times { assert vfoo.x == 100; assert z == 874; z = 39; }
-                    assert z == 39;
-
-                    vfoo.local();
-                }
-
-                void local() {
-                    c.call(1);
-
-                    z = 874;
-                    1.times { assert x == 100; assert z == 874; z = 39; }
-                    assert z == 39;
-                } 
-            }
-
-        EOF );
-
-    }
-
-
-/*
- * CURRENTLY BROKEN.  Variable scoping needs an overhaul to
- * fix it.
- *
-    void testVariablePrecedenceInScript() {
-        assertScript( <<<-EOF
-            c = { |x| assert x == 1; assert y == 93; }
-            x = 100;
-            y = 93;
-
-            c.call(1);
-        EOF);
-    }
- */
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/bugs/VariableScopingBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/VariableScopingBug.groovy
deleted file mode 100644
index 62afb63..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/VariableScopingBug.groovy
+++ /dev/null
@@ -1,38 +0,0 @@
-import org.codehaus.groovy.classgen.TestSupport
-
-/**
- * @version $Revision$
- */
-class VariableScopingBug extends TestSupport {
-    
-    void testBug() {
-    	// undeclared variable x
-    	
-    	shouldFail {
-			for (z in 0..2) {
-	    		x = makeCollection()
-			}
-		   	
-		   	for (t in 0..3) {
-		    	for (y in x) {
-		    		println x
-		    	}
-		   	}
-	   	}
-	}
-
-    void testVariableReuse() {
-		for (z in 0..2) {
-    		x = makeCollection()
-		}
-	   	
-	   	for (t in 0..3) {
-    	    x = 123
-    		println x
-	   	}
-	}
-
-	protected makeCollection() {
-		return [1, 2, 3]
-	}   
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/bugs/ZoharsBug.groovy b/groovy/modules/classic/src/test/groovy/bugs/ZoharsBug.groovy
deleted file mode 100644
index 90ceb9c..0000000
--- a/groovy/modules/classic/src/test/groovy/bugs/ZoharsBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * @author Zohar Melamed
- * @version $Revision$
- */
-class ZoharsBug extends GroovyTestCase {
-    
-    void testBug() {
-        values = [1,2,3,4]
-        result = bloo(values, {it > 1})
-        result.each{println(it)}
-    }
-    
-    bloo(a,b){
-        return a.findAll{b.call(it)}
-    }    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/gpath/GPathTest.groovy b/groovy/modules/classic/src/test/groovy/gpath/GPathTest.groovy
deleted file mode 100644
index ea7050d..0000000
--- a/groovy/modules/classic/src/test/groovy/gpath/GPathTest.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-/**
- * Some GPath tests using maps and lists
- */
-class GPathTest extends GroovyTestCase {
-    
-    void testSimpleGPathExpressions() {
-        tree = createTree()
-        
-        assert tree.people.find { it.name == 'James' }.location == 'London'
-        
-        assert tree.people.name == ['James', 'Bob']
-
-        expected = ['James works on 2 project(s)', 'Bob works on 2 project(s)']
-        assert tree.people.findAll { it.projects.size() > 1 }.collect { it.name + ' works on ' + it.projects.size() + " project(s)" } == expected
-}
-    
-    protected createTree() {       
-        return [	
-            'people': [
-                ['name' : 'James', 'location':'London', 'projects':['geronimo', 'groovy'] ],
-                ['name' : 'Bob', 'location':'Atlanta', 'projects':['drools', 'groovy'] ]
-			] 
-		]
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/gpath/NodeGPathTest.groovy b/groovy/modules/classic/src/test/groovy/gpath/NodeGPathTest.groovy
deleted file mode 100644
index 267a1fa..0000000
--- a/groovy/modules/classic/src/test/groovy/gpath/NodeGPathTest.groovy
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-/**
- * Some GPath tests using trees
- */
-class NodeGPathTest extends GroovyTestCase {
-    
-    void testSimpleGPathExpressions() {
-        tree = createTree()
-
-        assert tree.person.find { it['@name'] == 'James' }.location[0]['@name'] == 'London'
-    }
-    
-    void testFindAll() {
-        tree = createTree()
-        
-        coll = tree.person.findAll { it['@name'] != 'Bob' }
-        assert coll.size() == 1
-    }
-    
-    void testCollect() {
-        tree = createTree()
-        
-        coll = tree.person.collect { it['@name'] }
-        assert coll == ['James', 'Bob']
-    }
-    
-    protected createTree() {       
-        builder = NodeBuilder.newInstance()
-        
-        root = builder.people() {
-            person(name:'James') {
-                location(name:'London')
-                projects {
-                    project(name:'geronimo')
-                }
-            }
-            person(name:'Bob') {
-                location(name:'Atlanta')
-                projects {
-                    project(name:'drools')
-                }
-            }
-        }
-        
-        assert root != null
-        
-        return root
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/gravy/Build.groovy b/groovy/modules/classic/src/test/groovy/gravy/Build.groovy
deleted file mode 100644
index 3db9aba..0000000
--- a/groovy/modules/classic/src/test/groovy/gravy/Build.groovy
+++ /dev/null
@@ -1,64 +0,0 @@
-package groovy.gravy
-
-
-/**
- * Represents a build process
- */
-class Build implements Runnable {
-	ant = new AntBuilder()
-	args
-	pom
-	defaultTargets = ['clean', 'compile']
-	
-	static void main(args) {
-		// autogenerate this
-		b = new Build(args)
-		//b.args = args
-		b.run()
-	}
-	
-	Build(someArgs) {
-		args = someArgs;
-		if (args instanceof String) {
-			args = [args]
-		}
-		/*
-		if (args == null || args.size() == 0) {
-			args = defaultTargets
-		}
-		*/
-	}
-	
-	void run() {
-		for (a in args) {
-			println "Target: ${a}"
-			invokeMethod(a.toString(), null)
-		}
-	}
-	
-	getPom() {
-		if (pom == null) {
-			pom = parsePOM()
-		}
-		return pom
-	}
-
-
-	// Default goals
-	clean() {
-		ant.rmdir(dir:'gravy')
-	}
-	
-	compile() {
-		ant.mkdir(dir:'gravy/classes')
-		ant.compile(srdir:'src/main/java', destdir:'gravy/classes') {
-			fileset {
-				includes(name:'**/*.java')
-			}
-		}
-	}
-		
-	protected parsePOM() {
-		return new XmlParser().parse("project.xml")
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/j2ee/CreateData.groovy b/groovy/modules/classic/src/test/groovy/j2ee/CreateData.groovy
deleted file mode 100644
index 2530c00..0000000
--- a/groovy/modules/classic/src/test/groovy/j2ee/CreateData.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-//import java.io.File
-
-//context = this.getProperty('context')
-
-//logDir = new File('logs')
-//logDir.mkdir()
-
-println("Called with context: " + context)
-
-db = context.lookup("/client/tools/DatabaseHome").create()
-
-println("About to do queries on: " + db) 
-
-queries = [  "CREATE TABLE account ( ssn CHAR(11) PRIMARY KEY, first_name CHAR(20), last_name CHAR(20), balance INT)",			 
-"CREATE TABLE entity ( id INT PRIMARY KEY AUTO INCREMENT, first_name CHAR(20), last_name CHAR(20) )"]
-
-for (sql in queries) {
-    println("evaluating: " + sql)
-	db.execute(sql)
-}
-
-println("creating entity bean")
-
-context.lookup("/client/tests/entity/bmp/BasicBmpHome").create("Groovy Dain")
-
-println("Done")
-
-"OK"
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/j2ee/J2eeConsole.java b/groovy/modules/classic/src/test/groovy/j2ee/J2eeConsole.java
deleted file mode 100644
index 1afb34e..0000000
--- a/groovy/modules/classic/src/test/groovy/j2ee/J2eeConsole.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.j2ee;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyShell;
-
-import java.util.Properties;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * A J2EE console
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class J2eeConsole {
-
-    public static void main(String[] args) {
-        if (args.length <= 0) {
-            System.out.println("Usage: home [configuaration] [localcopy]");
-            return;
-        }
-
-        String home = args[0];
-
-        Properties p = new Properties();
-        System.setProperty("openejb.home", home);
-        p.put(Context.INITIAL_CONTEXT_FACTORY, "org.openejb.client.LocalInitialContextFactory");
-        p.put("openejb.loader", "embed");
-        p.put("openejb.home", home);
-
-        if (args.length > 1) {
-            String conf = args[1];
-            System.setProperty("openejb.configuration", conf);
-            p.put("openejb.configuration", conf);
-        }
-        if (args.length > 2) {
-            String copy = args[2];
-            System.setProperty("openejb.localcopy", copy);
-            p.put("openejb.localcopy", copy);
-        }
-        try {
-            InitialContext ctx = new InitialContext(p);
-            
-            GroovyShell shell = new GroovyShell();
-            shell.setVariable("context", ctx);
-            //shell.evaluate("src/test/groovy/j2ee/CreateData.groovy");
-            
-            //shell.evaluate("src/main/groovy/ui/Console.groovy");
-            GroovyObject console = (GroovyObject) InvokerHelper.invokeConstructor("groovy.ui.Console", null);
-            console.setProperty("shell", shell);
-            console.invokeMethod("run", null);
-            /*
-            */
-        }
-        catch (Exception e) {
-            System.out.println("Caught: " + e);
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/DerivedScript.java b/groovy/modules/classic/src/test/groovy/lang/DerivedScript.java
deleted file mode 100644
index 66c3909..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/DerivedScript.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * $Id$version
- * Nov 23, 2003 9:02:55 PM $user Exp $
- * 
- * Copyright 2003 (C) Sam Pullara. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-package groovy.lang;
-
-/**
- * A derived Script which adds some 'global' methods available to the script
- */
-public abstract class DerivedScript extends Script {
-
-    public String getCheese() {
-        return "Cheddar";
-    }
-    
-    public String doSomething(String food) {
-        return "I like " + food;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/DummyGString.java b/groovy/modules/classic/src/test/groovy/lang/DummyGString.java
deleted file mode 100644
index 5305db1..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/DummyGString.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.lang;
-
-import groovy.lang.GString;
-import groovy.lang.MetaClass;
-
-
-/**
- * A hand crafted example GString
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DummyGString extends GString {
-
-    private String[] strings;
-    private MetaClass metaClass;
-    
-    public DummyGString(Object[] values) {
-        this(values, new String[] { "Hello ", "!" });
-    }
-    
-    public DummyGString(Object[] values, String[] strings) {
-        super(values);
-        this.strings = strings;
-    }
-    
-    public String[] getStrings() {
-        return strings;
-    }
-
-    public MetaClass getMetaClass() {
-        return metaClass;
-    }
-
-    public void setMetaClass(MetaClass metaClass) {
-        this.metaClass = metaClass;
-    }
-
-    public Object invokeMethod(String name, Object arguments) {
-        return metaClass.invokeMethod(this, name, arguments);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/GStringTest.java b/groovy/modules/classic/src/test/groovy/lang/GStringTest.java
deleted file mode 100644
index 0d2855f..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/GStringTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package groovy.lang;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * Tests the use of the structured Attribute type
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class GStringTest extends GroovyTestCase {
-
-    public void testIterateOverText() {
-        DummyGString compString = new DummyGString(new Object[] { "James" });
-
-        assertArrayEquals(new String[] { "Hello ", "!" }, compString.getStrings());
-        assertArrayEquals(new Object[] { "James" }, compString.getValues());
-
-        assertEquals("Hello James!", compString.toString());
-    }
-
-    public void testAppendString() {
-        DummyGString a = new DummyGString(new Object[] { "James" });
-
-        GString result = a.plus(" how are you?");
-
-        assertEquals("Hello James! how are you?", result.toString());
-    }
-
-    public void testAppendString2() {
-        DummyGString a = new DummyGString(new Object[] { "James" }, new String[] { "Hello " });
-
-        GString result = a.plus(" how are you?");
-
-        System.out.println("Found: " + result);
-        System.out.println("Strings: " + InvokerHelper.toString(result.getStrings()));
-        System.out.println("Values: " + InvokerHelper.toString(result.getValues()));
-
-        assertEquals("Hello James how are you?", result.toString());
-    }
-
-    public void testAppendGString() {
-        DummyGString a = new DummyGString(new Object[] { "James" });
-        DummyGString b = new DummyGString(new Object[] { "Bob" });
-
-        GString result = a.plus(b);
-
-        //        System.out.println("Found: " + result);
-        //        System.out.println("Strings: " +
-		// InvokerHelper.toString(result.getStrings()));
-        //        System.out.println("Values: " +
-		// InvokerHelper.toString(result.getValues()));
-
-        assertEquals("Hello James!Hello Bob!", result.toString());
-    }
-
-    public void testAppendGString2() {
-        DummyGString a = new DummyGString(new Object[] { "James" }, new String[] { "Hello " });
-        DummyGString b = new DummyGString(new Object[] { "Bob" }, new String[] { "Hello " });
-
-        GString result = a.plus(b);
-
-        //        System.out.println("Found: " + result);
-        //        System.out.println("Strings: " +
-		// InvokerHelper.toString(result.getStrings()));
-        //        System.out.println("Values: " +
-		// InvokerHelper.toString(result.getValues()));
-
-        assertEquals("Hello JamesHello Bob", result.toString());
-    }
-
-    public void testEqualsAndHashCode() {
-        DummyGString a = new DummyGString(new Object[] { new Integer(1)});
-        DummyGString b = new DummyGString(new Object[] { new Long(1)});
-        DummyGString c = new DummyGString(new Object[] { new Double(2.3)});
-
-        assertTrue("a == b", a.equals(b));
-        assertEquals("hashcode a == b", a.hashCode(), b.hashCode());
-
-        assertFalse("a != c", a.equals(c));
-        assertTrue("hashcode a != c", a.hashCode() != c.hashCode());
-
-        assertEquals("a <=> b", 0, a.compareTo(b));
-        assertEquals("a <=> b", -1, a.compareTo(c));
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/GroovyShellTest.java b/groovy/modules/classic/src/test/groovy/lang/GroovyShellTest.java
deleted file mode 100644
index daa2a9e..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/GroovyShellTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * $Id$version
- * Nov 23, 2003 9:02:55 PM $user Exp $
- * 
- * Copyright 2003 (C) Sam Pullara. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-package groovy.lang;
-
-import groovy.util.GroovyTestCase;
-
-import java.io.ByteArrayInputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.codehaus.groovy.control.CompilerConfiguration;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-/**
- * @author sam
- * 
- * To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Generation - Code and Comments
- */
-public class GroovyShellTest extends GroovyTestCase {
-
-    private String script1 = "test = 1";
-
-    public static void main(String[] args) {
-        TestRunner.run(suite());
-    }
-    
-    public static Test suite() {
-        return new TestSuite(GroovyShellTest.class);
-    }
-
-    public void testExecuteScript() {
-        GroovyShell shell = new GroovyShell();
-        try {
-            Object result = shell.evaluate(new ByteArrayInputStream(script1.getBytes()), "Test.groovy");
-            assertEquals(new Integer(1), result);
-        }
-        catch (Exception e) {
-            assertTrue(false);
-        }
-    }
-
-    private static class PropertyHolder {
-        private Map map = new HashMap();
-        public void set(String key, Object value) {
-            map.put(key, value);
-        }
-        public Object get(String key) {
-            return map.get(key);
-        }
-    }
-
-    private String script2 = "test.prop = 2\nreturn test.prop";
-
-    public void testExecuteScriptWithContext() {
-        Binding context = new Binding();
-        context.setVariable("test", new PropertyHolder());
-        GroovyShell shell = new GroovyShell(context);
-        try {
-            Object result = shell.evaluate(new ByteArrayInputStream(script2.getBytes()), "Test.groovy");
-            assertEquals(new Integer(2), result);
-        }
-        catch (Exception e) {
-            fail(e.toString());
-        }
-    }
-    
-    public void testScriptWithDerivedBaseClass() throws Exception {
-        Binding context = new Binding();
-        CompilerConfiguration config = new CompilerConfiguration();
-        config.setScriptBaseClass(DerivedScript.class.getName());
-        GroovyShell shell = new GroovyShell(context, config);
-        Object result = shell.evaluate("x = 'abc'; doSomething(cheese)");
-        assertEquals("I like Cheddar", result);
-        assertEquals("abc", context.getVariable("x"));
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/IntRangeTest.java b/groovy/modules/classic/src/test/groovy/lang/IntRangeTest.java
deleted file mode 100644
index 01d7474..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/IntRangeTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package groovy.lang;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class IntRangeTest extends TestCase {
-
-    public void testSize() {
-        IntRange r = createRange(0, 10);
-        assertEquals("Size of " + r, 11, r.size());
-        r = createRange(0, 1);
-        assertEquals("Size of " + r, 2, r.size());
-        r = createRange(0, 0);
-        assertEquals("Size of " + r, 1, r.size());
-    }
-
-    public void testProperties() {
-        IntRange r = createRange(0, 10);
-        assertEquals("from", 0, r.getFromInt());
-        assertEquals("to", 10, r.getToInt());
-    }
-
-    public void testGet() {
-        IntRange r = createRange(10, 20);
-        for (int i = 0; i <= 10; i++) {
-            Integer value = (Integer) r.get(i);
-            assertEquals("Item at index: " + i, i + 10, value.intValue());
-        }
-    }
-
-    public void testGetOutOfRange() {
-        IntRange r = createRange(10, 20);
-
-        try {
-            r.get(-1);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-        try {
-            r.get(11);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-
-    }
-
-    public void testContains() {
-        IntRange r = createRange(10, 20);
-
-        assertTrue("contains 11", r.contains(new Integer(11)));
-        assertTrue("contains 10", r.contains(new Integer(10)));
-        assertTrue("contains 19", r.contains(new Integer(19)));
-        assertTrue("contains 20", r.contains(new Integer(20)));
-        assertFalse("contains 9", r.contains(new Integer(9)));
-        assertFalse("contains 21", r.contains(new Integer(21)));
-        assertFalse("contains 100", r.contains(new Integer(100)));
-        assertFalse("contains -1", r.contains(new Integer(-1)));
-    }
-
-    public void testSubList() {
-        IntRange r = createRange(10, 20);
-
-        List s = r.subList(2, 4);
-
-        IntRange sr = (IntRange) s;
-
-        assertEquals("from", 12, sr.getFromInt());
-        assertEquals("to", 13, sr.getToInt());
-        assertEquals("size", 2, sr.size());
-    }
-
-    public void testHashCodeAndEquals() {
-        IntRange a = createRange(1, 11);
-        IntRange b = createRange(1, 11);
-        IntRange c = createRange(2, 11);
-
-        assertEquals("hashcode", a.hashCode(), b.hashCode());
-        assertTrue("hashcode", a.hashCode() != c.hashCode());
-
-        assertEquals("a and b", a, b);
-        assertFalse("a != c", a.equals(c));
-    }
-
-    public void testIterator() {
-    }
-
-    protected IntRange createRange(int from, int to) {
-        return new IntRange(from, to);
-    }
-    
-    protected void assertEquals(String msg, int expected, Object value) {
-        assertEquals(msg, new Integer(expected), value);
-    }
-
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/MetaClassTest.java b/groovy/modules/classic/src/test/groovy/lang/MetaClassTest.java
deleted file mode 100644
index d50bf7f..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/MetaClassTest.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package groovy.lang;
-
-import groovy.util.GroovyTestCase;
-
-import java.util.ArrayList;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MetaClassTest extends GroovyTestCase {
-
-    public void testMetaClass() {
-        Class foo = String[].class;
-        System.out.println(foo + " name: " + foo.getName());
-
-        MetaClass metaClass = InvokerHelper.getMetaClass(this);
-
-        assertTrue("got metaclass", metaClass != null);
-
-        metaClass.invokeMethod(this, "doSomething", new Object[0]);
-    }
-
-    public void testArray() {
-        String[] value = new String[] { "hello" };
-
-        MetaClass metaClass = InvokerHelper.getMetaClass(value);
-
-        assertTrue("got metaclass", metaClass != null);
-
-        metaClass.invokeMethod(value, "toString", new Object[0]);
-    }
-
-    public void testString() {
-        String value = "hello";
-
-        MetaClass metaClass = InvokerHelper.getMetaClass(value);
-
-        assertTrue("got metaclass", metaClass != null);
-
-        Object answer = metaClass.invokeMethod(value, "toString", new Object[0]);
-
-        assertEquals("hello", answer);
-    }
-
-    public void testObject() {
-        Object value = new Object();
-
-        MetaClass metaClass = InvokerHelper.getMetaClass(value);
-
-        assertTrue("got metaclass", metaClass != null);
-
-        metaClass.invokeMethod(value, "toString", new Object[0]);
-    }
-
-    public void testPublicField() {
-        DymmyClass dymmyClass = new DymmyClass();
-        
-        MetaClass metaClass = InvokerHelper.getMetaClass(dymmyClass);
-        
-        assertEquals(metaClass.getProperty(dymmyClass, "x"), new Integer(0));
-        assertEquals(metaClass.getProperty(dymmyClass, "y"), "none");
-        
-        metaClass.setProperty(dymmyClass, "x", new Integer(25));
-        assertEquals(dymmyClass.x, 25);
-
-        metaClass.setProperty(dymmyClass, "y", "newvalue");
-        assertEquals(dymmyClass.y, "newvalue");
-    }
-    
-    public void testSetPropertyWithInt() {
-        DymmyClass dymmyClass = new DymmyClass();
-        MetaClass metaClass = InvokerHelper.getMetaClass(dymmyClass);
-        metaClass.setProperty(dymmyClass, "anInt", new Integer(10));
-    }
-
-    public void testSetPropertyWithDoubleArray() {
-        DymmyClass dymmyClass = new DymmyClass();
-        MetaClass metaClass = InvokerHelper.getMetaClass(dymmyClass);
-        Double[][] matrix2 =
-        {
-                {
-                        new Double(35), new Double(50), new Double(120)
-                }, 
-                {
-                        new Double(75), new Double(80), new Double(150)
-                }
-        };
-        metaClass.setProperty(dymmyClass, "matrix", matrix2);
-        metaClass.setProperty(dymmyClass, "matrix2", matrix2);
-    }
-
-    public void testSetPropertyWithArray() {
-        DymmyClass dymmyClass = new DymmyClass();
-        MetaClass metaClass = InvokerHelper.getMetaClass(dymmyClass);
-
-        // test int[]
-        int[] ints = new int[]{
-                0, 1, 2, 3
-        };
-        metaClass.setProperty(dymmyClass, "ints", ints);
-        assertEquals(ints, metaClass.getProperty(dymmyClass, "ints"));
-
-        // test Integer[]
-        Integer[] integers = new Integer[]{
-                new Integer(0), new Integer(1), new Integer(2), new Integer(3)
-        };
-        metaClass.setProperty(dymmyClass, "integers", integers);
-        assertEquals(integers, metaClass.getProperty(dymmyClass, "integers"));
-    }
-
-    public void testSetPropertyWithList() {
-        DymmyClass dymmyClass = new DymmyClass();
-        MetaClass metaClass = InvokerHelper.getMetaClass(dymmyClass);
-
-        // test list
-        ArrayList list = new ArrayList();
-        list.add(new Integer(120));
-        list.add(new Integer(150));
-
-        // test int[]
-        metaClass.setProperty(dymmyClass, "ints", list);
-
-        // test Integer[]
-        metaClass.setProperty(dymmyClass, "integers", list);
-    }
-    
-    public void doSomething() {
-        System.out.println("Called doSomething()");
-    }
-}
-
-
-class DymmyClass {
-    public int x = 0;
-    public String y = "none";
-    
-    private int anInt;
-    private int[] ints;
-    private Integer[] integers;
-    double[][] matrix2;
-    Double[][] matrix;
-
-    public Integer[] getIntegers() {
-        return integers;
-    }
-
-    public void setIntegers(Integer[] integers) {
-        this.integers = integers;
-    }
-
-    public int[] getInts() {
-        return ints;
-    }
-
-    public void setInts(int[] ints) {
-        this.ints = ints;
-    }
-
-    public int getAnInt() {
-        return anInt;
-    }
-
-    public void setAnInt(int anInt) {
-        this.anInt = anInt;
-    }
-
-    public void setMatrix(Double[][] matrix) {
-        this.matrix = matrix;
-    }
-
-    public void setMatrix2(double[][] matrixReloaded) {
-        this.matrix2 = matrixReloaded;
-    }
-
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/lang/MockWriter.java b/groovy/modules/classic/src/test/groovy/lang/MockWriter.java
deleted file mode 100644
index 77c1561..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/MockWriter.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.lang;
-
-
-/**
- * A mock class for testing writer based code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MockWriter {
-
-    private String output;
-    
-    public String getOutput() {
-        String answer = output;
-        output = null;
-        return answer;
-    }
-
-    public void setOutput(String output) {
-        this.output = output;
-    }
-
-    public void println() {
-        setOutput("println()");
-    }
-    
-    public void println(Object object) {
-        setOutput("println(" + object + ")");
-    }
-
-    public void print(Object object) {
-        setOutput("print(" + object + ")");
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/RangeTest.java b/groovy/modules/classic/src/test/groovy/lang/RangeTest.java
deleted file mode 100644
index cc3db6f..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/RangeTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package groovy.lang;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class RangeTest extends TestCase {
-
-    public void testSize() {
-        Range r = createRange(0, 10);
-        assertEquals("Size of " + r, 11, r.size());
-        r = createRange(0, 1);
-        assertEquals("Size of " + r, 2, r.size());
-        r = createRange(0, 0);
-        assertEquals("Size of " + r, 1, r.size());
-    }
-
-    public void testProperties() {
-        Range r = createRange(0, 10);
-        assertEquals("from", 0, r.getFrom());
-        assertEquals("to", 10, r.getTo());
-    }
-
-    public void testGet() {
-        Range r = createRange(10, 20);
-        for (int i = 0; i < 10; i++) {
-            Integer value = (Integer) r.get(i);
-            assertEquals("Item at index: " + i, i + 10, value.intValue());
-        }
-    }
-
-    public void testGetOutOfRange() {
-        Range r = createRange(10, 20);
-
-        try {
-            r.get(-1);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-        try {
-            r.get(11);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-
-    }
-
-    public void testContains() {
-        Range r = createRange(10, 20);
-
-        assertTrue("contains 11", r.contains(new Integer(11)));
-        assertTrue("contains 10", r.contains(new Integer(10)));
-        assertTrue("contains 19", r.contains(new Integer(19)));
-        assertFalse("contains 9", r.contains(new Integer(9)));
-        assertFalse("contains 21", r.contains(new Integer(21)));
-        assertFalse("contains 100", r.contains(new Integer(100)));
-        assertFalse("contains -1", r.contains(new Integer(-1)));
-    }
-
-    public void testSubList() {
-        Range r = createRange(10, 20);
-
-        List s = r.subList(2, 4);
-
-        Range sr = (Range) s;
-
-        assertEquals("from", 12, sr.getFrom());
-        assertEquals("to", 13, sr.getTo());
-        assertEquals("size", 2, sr.size());
-    }
-
-    public void testHashCodeAndEquals() {
-        Range a = createRange(1, 11);
-        Range b = createRange(1, 11);
-        Range c = createRange(2, 11);
-
-        assertEquals("hashcode", a.hashCode(), b.hashCode());
-        assertTrue("hashcode", a.hashCode() != c.hashCode());
-
-        assertEquals("a and b", a, b);
-        assertFalse("a != c", a.equals(c));
-    }
-
-    public void testIterator() {
-    }
-
-    protected Range createRange(int from, int to) {
-        return new ObjectRange(new Integer(from), new Integer(to));
-    }
-    
-    protected void assertEquals(String msg, int expected, Object value) {
-        assertEquals(msg, new Integer(expected), value);
-    }
-
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/ScriptIntegerDivideTest.java b/groovy/modules/classic/src/test/groovy/lang/ScriptIntegerDivideTest.java
deleted file mode 100644
index 2889c48..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/ScriptIntegerDivideTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.lang;
-
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-
-/**
- * @author Steve Goetze
- */
-public class ScriptIntegerDivideTest extends TestSupport {
-
-	/**
-	 * If a script that invokes integer division is specified as a literal string, the
-	 * division token "\" needs to be escaped. 
-	 */
-	public void testIntegerDivide() throws Exception {
-   		assertScript( "assert 4\\3 == 1" );
-    }
-
-	/**
-	 * If a groovy script is spec'd in a literal string, any intended Integer
-	 * divisions need to be escaped.  In cases where the integer division token "\"
-	 * is surrounded by whitespace the literal cannot be constructed, which is OK.
-	 * In the case where the second operand immediately follows the token, the literal
-	 * can be specified, but will result in a compilation error as the token immediately
-	 * following the backslash will be taken as the escape sequence.
-	 */
-	public void testIntegerDivideWithBadEscape() throws Exception {
-    	try {
-    		assertScript( "assert 4\3 == 1" );
-    	} catch (CompilationFailedException e) {
-    		return;
-    	}
-    	fail("Should catch a CompilationFailedException");
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/ScriptPrintTest.java b/groovy/modules/classic/src/test/groovy/lang/ScriptPrintTest.java
deleted file mode 100644
index fc1106e..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/ScriptPrintTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.lang;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ScriptPrintTest extends TestSupport {
-
-    public void testScriptWithCustomPrintln() throws Exception {
-        assertScript(
-            "out = new MockWriter(); println(); assert out.output == 'println()' : 'value of output is: ' + out.output\n"
-                + "print('hey'); assert out.output == 'print(hey)' : 'value is: ' + out.output\n"
-                + "println('hey'); assert out.output == 'println(hey)' : 'value is: ' + out.output\n");
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/ScriptTest.java b/groovy/modules/classic/src/test/groovy/lang/ScriptTest.java
deleted file mode 100644
index e0e6380..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/ScriptTest.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) Guillaume Laforge. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.lang;
-
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.runtime.MethodClosure;
-
-import java.io.IOException;
-
-/**
- * Tests some particular script features.
- *
- * @author Guillaume Laforge
- */
-public class ScriptTest extends TestSupport
-{
-    /**
-     * When a method is not found in the current script, checks that it's possible to call a method closure from the binding.
-     *
-     * @throws IOException
-     * @throws CompilationFailedException
-     * @throws IllegalAccessException
-     * @throws InstantiationException
-     */
-    public void testInvokeMethodFallsThroughToMethodClosureInBinding() throws IOException, CompilationFailedException, IllegalAccessException, InstantiationException
-    {
-        String text = "if (method() == 3) { println 'succeeded' }";
-
-        GroovyCodeSource codeSource = new GroovyCodeSource(text, "groovy.script", "groovy.script");
-        GroovyClassLoader loader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-        Class clazz = loader.parseClass(codeSource);
-        Script script = ((Script) clazz.newInstance());
-
-        Binding binding = new Binding();
-        binding.setVariable("method", new MethodClosure(new Dummy(), "method"));
-        script.setBinding(binding);
-
-        script.run();
-    }
-
-    public static class Dummy {
-        public Integer method() {
-            return new Integer(3);
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/SequenceTest.java b/groovy/modules/classic/src/test/groovy/lang/SequenceTest.java
deleted file mode 100644
index 6faca2c..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/SequenceTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.lang;
-
-import java.util.List;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * Tests the use of the structured Attribute type
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class SequenceTest extends GroovyTestCase {
-
-    public void testConstruction() {
-        Sequence sequence = new Sequence(String.class);
-        sequence.add("James");
-        sequence.add("Bob");
-
-        assertEquals("Size", 2, sequence.size());
-        assertEquals("Element", "James", sequence.get(0));
-        assertEquals("Element", "Bob", sequence.get(1));
-
-        // now lets try some methods on each item in the list
-        List answer = (List) InvokerHelper.invokeMethod(sequence, "startsWith", new Object[] { "Ja" });
-        assertArrayEquals(new Object[] { Boolean.TRUE, Boolean.FALSE }, answer.toArray());
-
-        answer = (List) InvokerHelper.invokeMethod(sequence, "length", null);
-        assertArrayEquals(new Object[] { new Integer(5), new Integer(3)}, answer.toArray());
-    }
-
-    public void testAddingWrongTypeFails() {
-        try {
-            Sequence sequence = new Sequence(String.class);
-            sequence.add(new Integer(5));
-
-            fail("Should have thrown exception");
-        }
-        catch (IllegalArgumentException e) {
-            System.out.println("Caught: " + e);
-        }
-    }
-
-    public void testAddingNullFails() {
-        try {
-            Sequence sequence = new Sequence(String.class);
-            sequence.add(null);
-
-            fail("Should have thrown exception");
-        }
-        catch (NullPointerException e) {
-            System.out.println("Caught: " + e);
-        }
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/lang/TupleTest.java b/groovy/modules/classic/src/test/groovy/lang/TupleTest.java
deleted file mode 100644
index 3f70afb..0000000
--- a/groovy/modules/classic/src/test/groovy/lang/TupleTest.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package groovy.lang;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class TupleTest extends TestCase {
-
-    Object[] data = { "a", "b", "c" };
-    Tuple t = new Tuple(data);
-
-    public void testSize() {
-        assertEquals("Size of " + t, 3, t.size());
-
-        assertEquals("get(0)", "a", t.get(0));
-        assertEquals("get(1)", "b", t.get(1));
-    }
-
-    public void testGetOutOfTuple() {
-        try {
-            t.get(-1);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-        try {
-            t.get(10);
-            fail("Should have thrown IndexOut");
-        }
-        catch (IndexOutOfBoundsException e) {
-            // worked
-        }
-
-    }
-
-    public void testContains() {
-        assertTrue("contains a", t.contains("a"));
-        assertTrue("contains b", t.contains("b"));
-    }
-
-    public void testSubList() {
-        List s = t.subList(1, 2);
-
-        assertTrue("is a Tuple", s instanceof Tuple);
-
-        assertEquals("size", 1, s.size());
-    }
-
-    public void testHashCodeAndEquals() {
-        Tuple a = new Tuple(new Object[] { "a", "b", "c" });
-        Tuple b = new Tuple(new Object[] { "a", "b", "c" });
-        Tuple c = new Tuple(new Object[] { "d", "b", "c" });
-
-        assertEquals("hashcode", a.hashCode(), b.hashCode());
-        assertTrue("hashcode", a.hashCode() != c.hashCode());
-
-        assertEquals("a and b", a, b);
-        assertFalse("a != c", a.equals(c));
-    }
-
-    public void testIterator() {
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/mock/MockTest.groovy b/groovy/modules/classic/src/test/groovy/mock/MockTest.groovy
deleted file mode 100644
index e3fa464..0000000
--- a/groovy/modules/classic/src/test/groovy/mock/MockTest.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-package groovy.mock
-
-import groovy.mock.GroovyMock
-import junit.framework.AssertionFailedError
-
-class MockTest extends GroovyTestCase {
-
-    property mock
-
-    void setUp() {
-        mock = GroovyMock.newInstance()
-    }
-
-    void testASimpleExpectationCanBeSetAndMet() {
-        // expectation
-        mock.doSomething("hello")
-
-        // execute
-        mock.instance.doSomething("hello")
-
-        // verify
-        mock.verify()
-    }
-
-    void testASimpleExpectationCanBeSetAndFailed() {
-        // expectation
-        mock.doSomething("hello")
-
-        // execute
-        try {
-            mock.instance.doSomething("goodbye")
-            fail("expected exception")
-        }
-        catch (RuntimeException goodException) {
-        }
-
-    }
-
-    void testASimpleExpectationCanBeSetButNeverCalledSoVerifyFails() {
-        // expectation
-        mock.doSomething("hello")
-
-        // execute
-        // don't call it
-
-        // verify
-        try {
-            mock.verify()
-            fail("should not have verified")
-        }
-        catch (AssertionFailedError goodException) {
-        }
-    }
-
-    void testAnExpectationWithAClosureGivesErrorIFCalledAndClosureFails() {
-        mock.doSomething( {arg | assert arg=="poo" } )
-
-        // verify
-        try {
-            mock.instance.doSomething("hello")
-            fail("Expected verify to fail");
-        }
-        catch (RuntimeException ex)
-        {
-            //expected
-        }
-    }
-
-    /*
-     * was GROOVY-76
-     */
-    void testAnExpectationwithAClosurePassesIfClosurePasses() {
-        mock.doSomething {arg | assert arg=="hello" } 
-        
-        // execute
-        mock.instance.doSomething("hello")
-
-        //verify
-        mock.verify()
-    }
-
-    void testAnExpectationWithAClosureGivesErrorIFNotCalled() {
-        mock.doSomething( {arg | assert arg=="poo" } )
-        // verify
-        try {
-            mock.verify()
-            fail("Expected verify to fail");
-        }
-        catch (AssertionFailedError ex)
-        {
-            //expected
-        }
-    }
-
-}
-
-
diff --git a/groovy/modules/classic/src/test/groovy/mock/example/CheeseSlicer.groovy b/groovy/modules/classic/src/test/groovy/mock/example/CheeseSlicer.groovy
deleted file mode 100644
index d1f691d..0000000
--- a/groovy/modules/classic/src/test/groovy/mock/example/CheeseSlicer.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package groovy.mock.example
-
-class CheeseSlicer {
-
-    void sliceSomeCheese(name) {
-        System.err.println("slicing cheese")
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/mock/example/SandwichMaker.groovy b/groovy/modules/classic/src/test/groovy/mock/example/SandwichMaker.groovy
deleted file mode 100644
index 7ba9f68..0000000
--- a/groovy/modules/classic/src/test/groovy/mock/example/SandwichMaker.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package groovy.mock.example
-
-class SandwichMaker {
-
-    property cheeseSlicer
-
-    void makeFattySandwich() {
-        cheeseSlicer.sliceCheese("cheddar")
-    }
-
-    void makeLiteSandwich() {
-        cheeseSlicer.sliceCheese("dairylea")
-    }
-
-    void makeCrappySandwich() {
-        cheeseSlicer.sliceCheese("dairylea")
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/mock/example/SandwichMakerTest.groovy b/groovy/modules/classic/src/test/groovy/mock/example/SandwichMakerTest.groovy
deleted file mode 100644
index 310b417..0000000
--- a/groovy/modules/classic/src/test/groovy/mock/example/SandwichMakerTest.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-package groovy.mock.example
-
-import groovy.mock.GroovyMock
-
-class SandwichMakerTest extends GroovyTestCase {
-
-    void testStuff() {
-
-        /** @todo I'm not sure why this stuff fails
-         * 
-        mockCheeseSlicer = GroovyMock.newInstance()
-        sandwichMaker = new SandwichMaker()
-        sandwichMaker.cheeseSlicer = mockCheeseSlicer.instance
-
-        // expectation
-        mockCheeseSlicer.sliceCheese {arg | assert arg.startsWith("ch")}
-
-        // execute
-        sandwichMaker.makeFattySandwich()
-
-        // verify
-        mockCheeseSlicer.verify()
-        */
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/model/MvcDemo.groovy b/groovy/modules/classic/src/test/groovy/model/MvcDemo.groovy
deleted file mode 100644
index 2eed165..0000000
--- a/groovy/modules/classic/src/test/groovy/model/MvcDemo.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-package groovy.model
-
-import java.awt.BorderLayout
-import javax.swing.BorderFactory
-import groovy.swing.SwingBuilder
-/**
- * 
- */
-class MvcDemo {
-    
-    property frame
-    property swing
-    
-    void run() {
-        swing = new SwingBuilder()
-        
-        frame = swing.frame(title:'MVC Demo', location:[200,200], size:[300,200]) {
-            menuBar {
-		        menu(text:'Help') {
-		            menuItem() {
-		                action(name:'About', closure:{ showAbout() })
-		            }
-		        }
-		    }
-		    panel(layout:new BorderLayout()) {
-    	        scrollPane(constraints:BorderLayout.CENTER) {
-    	            table() {
-    	                tableModel(list:[ ['name':'James', 'location':'London'], ['name':'Bob', 'location':'Atlanta'] ]) {
-                            propertyColumn(header:'Name', propertyName:'name')
-                            propertyColumn(header:'Location', propertyName:'location')
-    	                }
-    	            }
-    	        }
-		    }
-		}        
-		frame.show()
-    }
- 
-    showAbout() {
- 		pane = swing.optionPane(message:'This demo shows how you can create UI models from simple MVC models')
- 		dialog = pane.createDialog(frame, 'About MVC Demo')
- 		dialog.show()
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/model/TableModelTest.groovy b/groovy/modules/classic/src/test/groovy/model/TableModelTest.groovy
deleted file mode 100644
index 99b7b37..0000000
--- a/groovy/modules/classic/src/test/groovy/model/TableModelTest.groovy
+++ /dev/null
@@ -1,38 +0,0 @@
-package groovy.model
-
-class TableModelTest extends GroovyTestCase {
-    
-    void testTableModel() {
-        list = [ ['name':'James', 'location':'London'], ['name':'Bob', 'location':'Atlanta']]
-        
-        listModel = new ValueHolder(list)
-        
-	    model = new DefaultTableModel(listModel)
-	    rowModel = model.getRowModel()
-        model.addColumn(new DefaultTableColumn("Name", new PropertyModel(rowModel, "name")))
-        model.addColumn(new DefaultTableColumn("Location", new PropertyModel(rowModel, "location")))
-        
-        assert model.getRowCount() == 2
-        assert model.getColumnCount() == 2
-        assertValueAt(model, 0, 0, 'James')
-        assertValueAt(model, 0, 1, 'London')
-        assertValueAt(model, 1, 0, 'Bob')
-        assertValueAt(model, 1, 1, 'Atlanta')
-        
-        assert model.getColumnName(0) == 'Name'
-        assert model.getColumnName(1) == 'Location'
-        
-        // lets set some values
-        model.setValueAt('Antigua', 0, 1)
-        assertValueAt(model, 0, 1, 'Antigua')
-        
-        // lets check the real model changed too
-        james = list.get(0)
-        assert james.location == 'Antigua'
-    }
-    
-    protected assertValueAt(model, row, col, expected) {
-        value = model.getValueAt(row, col)
-        assert value == expected : "for row " + row + " col " + col
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/notworking/ListFiles.groovy b/groovy/modules/classic/src/test/groovy/notworking/ListFiles.groovy
deleted file mode 100644
index afccdf6..0000000
--- a/groovy/modules/classic/src/test/groovy/notworking/ListFiles.groovy
+++ /dev/null
@@ -1,27 +0,0 @@
-import java.util.Arrays
-
-public class test { 
-
-    static void main(args) {
-        println("Called main with ${args}")
-        listFiles(Arrays.asList(args))
-    }
-    
-    static String getPath(file) {
-        return file.absolutePath
-    }
-
-    static void listFiles(dirs) {
-        println("called with ${dirs}")
-        
-        for(dir in dirs) {
-            println("dir: ${dir}")
-            
-	        f = new java.io.File(dir)
-
-    	    for (f in f.listFiles()) {
-        	    println(getPath(f))
-        	} 
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/script/AtomTestScript.groovy b/groovy/modules/classic/src/test/groovy/script/AtomTestScript.groovy
deleted file mode 100644
index 38af581..0000000
--- a/groovy/modules/classic/src/test/groovy/script/AtomTestScript.groovy
+++ /dev/null
@@ -1,71 +0,0 @@
-package groovy.script
-
-import groovy.xml.MarkupBuilder;
-
-/** note you could use Expando classes if you don't mind being dynamically typed 
-f = new Expando()
-
-f.author = new Expando(name:'Ted Leung',url:'http://www.sauria.com/blog', email:'twl@sauria.com')
-
-f.entries = [ new Expando(title:'one',summary:'first post'), new Expando(title:'two',summary:'the second post'), new Expando(title:'three', summary:'post the third'), new Expando(title:'four',summary:'the ponderous fourth post') ]
-*/
-
-f = new Feed()
-
-f.author = new Person(name:'Ted Leung',url:'http://www.sauria.com/blog', email:'twl@sauria.com')
-
-f.entries = [ new Entry(title:'one',summary:'first post'), new Entry(title:'two',summary:'the second post'), new Entry(title:'three', summary:'post the third'), new Entry(title:'four',summary:'the ponderous fourth post') ]
-
-f.entries.each { println it.title }
-println f.author.name
-
-xml = new MarkupBuilder()
-
-atom = xml.atom() {
-  title("Ted Leung off the air")
-  link("http://www.sauria.com/noblog")
-  author() {
-    person() {
-      name(f.author.name)
-      url(f.author.url)
-      email(f.author.email)
-    }
-  }
-
-  for (e in f.entries) {
-    entry() {
-      title(e.title)
-      summary(e.summary)
-    }
-  }
-}
-
-
-class Feed {
-    String title
-    String link
-    Person author
-    String tagline
-    String generator
-    String copyright
-    String modified
-    List entries
-}
-
-class Entry {
-    String title
-    String link
-    String id
-    String summary
-    String content
-    Person author
-    String created
-    String issued
-    String modified
-}
-
-class Person {
-    String name
-    String url
-    String email
-}
diff --git a/groovy/modules/classic/src/test/groovy/script/CallAnotherScript.groovy b/groovy/modules/classic/src/test/groovy/script/CallAnotherScript.groovy
deleted file mode 100644
index b7d9317..0000000
--- a/groovy/modules/classic/src/test/groovy/script/CallAnotherScript.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-import java.io.File
-
-println("About to call another script")
-
-script = new GroovyShell()
-script.run(new File("src/test/groovy/script/HelloWorld.groovy"), [])
-
-println("Done")
diff --git a/groovy/modules/classic/src/test/groovy/script/ClassWithScript.groovy b/groovy/modules/classic/src/test/groovy/script/ClassWithScript.groovy
deleted file mode 100644
index 60798ba..0000000
--- a/groovy/modules/classic/src/test/groovy/script/ClassWithScript.groovy
+++ /dev/null
@@ -1,3 +0,0 @@
-class X {}
-x = new X()
-println(x)
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/script/EvalInScript.groovy b/groovy/modules/classic/src/test/groovy/script/EvalInScript.groovy
deleted file mode 100644
index 4dd3940..0000000
--- a/groovy/modules/classic/src/test/groovy/script/EvalInScript.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-import java.io.File
-
-a = 1
-evaluate("a = 3")
-assert a == 3
-
-println("Done and now set a to ${a}")
-
-
-println("About to call another script")
-
-evaluate(new File("src/test/groovy/script/HelloWorld.groovy"))
-
-println("Done")
diff --git a/groovy/modules/classic/src/test/groovy/script/HelloWorld.groovy b/groovy/modules/classic/src/test/groovy/script/HelloWorld.groovy
deleted file mode 100644
index 4f813ab..0000000
--- a/groovy/modules/classic/src/test/groovy/script/HelloWorld.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-
-println "Hello world"
-
-
diff --git a/groovy/modules/classic/src/test/groovy/script/HelloWorld2.groovy b/groovy/modules/classic/src/test/groovy/script/HelloWorld2.groovy
deleted file mode 100644
index 9056ef0..0000000
--- a/groovy/modules/classic/src/test/groovy/script/HelloWorld2.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-
-x = ['James', 'Bob', 'Brian']
-x.each { println("hello " + it) }
-
diff --git a/groovy/modules/classic/src/test/groovy/script/MapFromList.groovy b/groovy/modules/classic/src/test/groovy/script/MapFromList.groovy
deleted file mode 100644
index 610efdf..0000000
--- a/groovy/modules/classic/src/test/groovy/script/MapFromList.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-class MapFromList {
-    talk(a) {
-        println("hello "+a)
-    }
-
-    doit(args) {
-        i = 1
-        l = [:]
-        args.each { 
-	    talk(it)
-	    l.put(it,i++)
-	    }
-        l.each {
-           println(it)
-        }
-    }
-
-    static void main(args) {
-        a = ['tom','dick','harry']
-        t = new MapFromList()
-        t.doit(a)
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/script/MarkupTestScript.groovy b/groovy/modules/classic/src/test/groovy/script/MarkupTestScript.groovy
deleted file mode 100644
index 8b45448..0000000
--- a/groovy/modules/classic/src/test/groovy/script/MarkupTestScript.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-import groovy.xml.MarkupBuilder;
-
-class Bean {
-	String b
-};
-
-t = new Bean()
-t.b = "hello"
-println t.b
-println "test: ${t.b}"
-
-xml = new MarkupBuilder()
-root = xml.foo {
-	bar {
-		// works
-		baz("test")
-		// fails
-		baz(t.b)
-		// fails
-		baz("${t.b}")
-	}
-} 
diff --git a/groovy/modules/classic/src/test/groovy/script/MethodTestScript.groovy b/groovy/modules/classic/src/test/groovy/script/MethodTestScript.groovy
deleted file mode 100644
index 2bdf017..0000000
--- a/groovy/modules/classic/src/test/groovy/script/MethodTestScript.groovy
+++ /dev/null
@@ -1 +0,0 @@
-GString.methods.each { println it.name }
diff --git a/groovy/modules/classic/src/test/groovy/script/PackageScript.groovy b/groovy/modules/classic/src/test/groovy/script/PackageScript.groovy
deleted file mode 100644
index 1e57436..0000000
--- a/groovy/modules/classic/src/test/groovy/script/PackageScript.groovy
+++ /dev/null
@@ -1,3 +0,0 @@
-package groovy.script
-
-println("Hello world")
diff --git a/groovy/modules/classic/src/test/groovy/script/ScriptTest.groovy b/groovy/modules/classic/src/test/groovy/script/ScriptTest.groovy
deleted file mode 100644
index 1a27fc7..0000000
--- a/groovy/modules/classic/src/test/groovy/script/ScriptTest.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-import java.io.File
-
-class ScriptTest extends GroovyTestCase {
-    void testScripts() {
-        file = new File("src/test/groovy/script")
-        file.eachFile {
-            name = it.name
-            if (name.endsWith('.groovy')) {
-                if (name.startsWith('ScriptTest')) {
-                    //
-                }
-				else {                        
-                	runScript(it) 
-				}
-            } 
-        }
-    }
-    
-    protected runScript(file) {
-        println("Running script: " + file)
-        
-        shell = new GroovyShell()
-        args = ['a', 'b', 'c']
-        
-        shell.run(file, args)
-
-        /** @todo this doesn't work when ran in an IDE?
-        try {
-	        shell.run(file, args)
-        } 
-        catch (Exception e) {
-            println("Caught: " + e)
-        }
-         */
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/script/ScriptWithFunctions.groovy b/groovy/modules/classic/src/test/groovy/script/ScriptWithFunctions.groovy
deleted file mode 100644
index bb04b78..0000000
--- a/groovy/modules/classic/src/test/groovy/script/ScriptWithFunctions.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-def foo(list, value) {
-    println "Calling function foo() with param ${value}"
-    list << value
-}
-
-x = []
-foo(x, 1)
-foo(x, 2)
-assert x == [1, 2]
-
-println "Creating list ${x}"
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/script/ShowArgs.groovy b/groovy/modules/classic/src/test/groovy/script/ShowArgs.groovy
deleted file mode 100644
index b3d0578..0000000
--- a/groovy/modules/classic/src/test/groovy/script/ShowArgs.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-
-for (a in args) {
-    println("Argument: " + a)
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/script/UseClosureInScript.groovy b/groovy/modules/classic/src/test/groovy/script/UseClosureInScript.groovy
deleted file mode 100644
index 9769195..0000000
--- a/groovy/modules/classic/src/test/groovy/script/UseClosureInScript.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-a = 1
-[1].each { 
-    a = it 
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/RunAllGroovyScriptsSuite.java b/groovy/modules/classic/src/test/groovy/security/RunAllGroovyScriptsSuite.java
deleted file mode 100644
index 849b9c5..0000000
--- a/groovy/modules/classic/src/test/groovy/security/RunAllGroovyScriptsSuite.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Created on Apr 7, 2004
- *
- * To change the template for this generated file go to
- * Window - Preferences - Java - Code Generation - Code and Comments
- */
-package groovy.security;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-/**
- * Run all the .groovy scripts found under the src/test tree with a security manager active.
- * Not currently part of the build because it adds about 4 minutes to the build process.
- * 
- * @author Steve Goetze
- */
-public class RunAllGroovyScriptsSuite extends SecurityTestSupport {
-
-    /**
-     * Find all Groovy script test cases in the source tree and execute them with a security policy in effect.
-     * The complete filename of the groovy source file is used as the codebase so that the proper grants can be
-     * made for each script.
-     */
-    protected void executeTests(File dir, TestResult result) throws Exception {
-        File[] files = dir.listFiles();
-        List traverseList = new ArrayList();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.isDirectory()) {
-                traverseList.add(file);
-            }
-            else {
-                String name = file.getName();
-                if (name.endsWith("Test.groovy") || name.endsWith("Bug.groovy")) {
-                //if (name.endsWith("IanMaceysBug.groovy")) {
-                	Class clazz = parseClass(file);
-            		if (TestCase.class.isAssignableFrom(clazz)) {
-            			TestSuite suite = new TestSuite(clazz);
-            			suite.run(result);
-            		}
-                }
-            }
-        }
-        for (Iterator iter = traverseList.iterator(); iter.hasNext();) {
-            executeTests((File) iter.next(), result);
-        }
-    }
-
-	public void testGroovyScripts() throws Exception {
-    	if (!isSecurityAvailable()) {
-    		return;
-    	}
-   		TestResult result = new TestResult();
-   		executeTests(new File("src/test"), result);
-   		if (!result.wasSuccessful()) {
-   			new SecurityTestResultPrinter(System.out).print(result);
-   			fail("At least one groovy testcase did not run under the secure groovy environment.  Results in the testcase output");
-   		}
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/RunOneGroovyScript.java b/groovy/modules/classic/src/test/groovy/security/RunOneGroovyScript.java
deleted file mode 100644
index 2de6290..0000000
--- a/groovy/modules/classic/src/test/groovy/security/RunOneGroovyScript.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package groovy.security;
-
-import java.io.File;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-/**
- * Test case for running a single groovy script parsed from a .groovy file.
- */
-public class RunOneGroovyScript extends SecurityTestSupport {
-
-	protected static String file;
-	
-    public static void main(String[] args) {
-        if (args.length > 0) {
-            file = args[0];
-        }
-        TestRunner.run( suite() );
-    }
-    
-    public static Test suite() {
-    	return new TestSuite(RunOneGroovyScript.class);
-    }
-
-	public void testScript() {
-        String fileName = System.getProperty("script", file);
-        if (fileName == null) {
-            throw new RuntimeException("No filename given in the 'script' system property so cannot run a Groovy script");
-        }
-		assertExecute(new File(fileName), null);
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/SecurityTest.java b/groovy/modules/classic/src/test/groovy/security/SecurityTest.java
deleted file mode 100644
index a7e8476..0000000
--- a/groovy/modules/classic/src/test/groovy/security/SecurityTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package groovy.security;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyCodeSource;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.security.Security;
-import java.util.PropertyPermission;
-
-import org.codehaus.groovy.control.CompilationFailedException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-/**
- * Test the effects of enabling security in Groovy.  Some tests below check for proper framework
- * behavior (e.g. ensuring that GroovyCodeSources may only be created for which proper permissions exist).
- * Other tests run .groovy scripts under a secure environment and ensure that the proper permissions
- * are required for success.
- * 
- * @author Steve Goetze
- */
-public class SecurityTest extends SecurityTestSupport {
-
-	public static void main(String[] args) {
-        TestRunner.run( suite() );
-    }
-   
-    public static Test suite() {
-    	return new TestSuite(SecurityTest.class);
-    }
-
-	public void testForbiddenProperty() {
-		String script = "System.getProperty(\"user.home\")";
-		assertExecute(script, null, new PropertyPermission("user.home", "read"));
-	}
-
-	public void testForbiddenPackage() {
-		String script = "import sun.net.*; s = new NetworkClient()";
-		assertExecute(script, "/groovy/security/testForbiddenPackage", new RuntimePermission("accessClassInPackage.sun.*"));
-	}
-
-	public void testForbiddenCodebase() {
-		assertExecute(new File("src/test/groovy/security/forbiddenCodeBase.gvy"), new GroovyCodeSourcePermission("/groovy/security/forbiddenCodeBase"));
-	}
-	
-	//Check that the Security package.access control works.
-	public void testPackageAccess() {
-		String script = "new javax.print.PrintException();";
-        Security.setProperty("package.access", "javax.print");
-        //This should throw an ACE because its codeBase does not allow access to javax.print
-		assertExecute(script, "/groovy/security/javax/print/deny", new RuntimePermission("accessClassInPackage.javax.print"));
-		//This should not throw an ACE because groovy.policy grants the codeBase access to javax.print
-		assertExecute(script, "/groovy/security/javax/print/allow", null);
-	}
-	
-	public void testBadScriptNameBug() {
-		assertExecute(new File("src/test/groovy/bugs/BadScriptNameBug.groovy"), null);
-	}
-
-	public void testClosureListenerTest() {
-		assertExecute(new File("src/test/groovy/ClosureListenerTest.groovy"), null);
-	}
-
-	public void testClosureMethodTest() {
-		assertExecute(new File("src/test/groovy/ClosureMethodTest.groovy"), null);
-	}
-
-	public void testGroovyMethodsTest() {
-		assertExecute(new File("src/test/groovy/GroovyMethodsTest.groovy"), null);
-	}
-
-	public void testClosureWithDefaultParamTest() {
-		assertExecute(new File("src/test/groovy/ClosureWithDefaultParamTest.groovy"), null);
-	}
-
-	public void testGroovy303_Bug() {
-		assertExecute(new File("src/test/groovy/bugs/Groovy303_Bug.groovy"), null);
-	}
-
-	public void testScriptTest() {
-		assertExecute(new File("src/test/groovy/script/ScriptTest.groovy"), null);
-	}
-	
-	//In addition to requiring several permissions, this test is an example of the case
-	//where the groovy class loader is required at script invocation time as well as
-	//during compilation.
-	public void testSqlCompleteWithoutDataSourceTest() {
-		assertExecute(new File("src/test/groovy/sql/SqlCompleteWithoutDataSourceTest.groovy"), null);
-	}
-	
-	//Test to prevent scripts from invoking the groovy compiler.  This is done by restricting access
-	//to the org.codehaus.groovy packages.
-	public void testMetaClassTest() {
-        Security.setProperty("package.access", "org.codehaus.groovy");
-		assertExecute(new File("src/test/org/codehaus/groovy/classgen/MetaClassTest.groovy"), new RuntimePermission("accessClassInPackage.org.codehaus.groovy"));
-	}
-	
-	//Mailing list post by Richard Hensley reporting a CodeSource bug.  A GroovyCodeSource created
-	//with a URL was causing an NPE.
-	public void testCodeSource() throws IOException, CompilationFailedException {
-		URL script = loader.getResource("groovy/ArrayTest.groovy");
-		GroovyCodeSource gcs = new GroovyCodeSource(script);
-		Class result = loader.parseClass(gcs);
-	}
-	
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/SecurityTestSupport.java b/groovy/modules/classic/src/test/groovy/security/SecurityTestSupport.java
deleted file mode 100644
index 1c4d03c..0000000
--- a/groovy/modules/classic/src/test/groovy/security/SecurityTestSupport.java
+++ /dev/null
@@ -1,285 +0,0 @@
-package groovy.security;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyCodeSource;
-import groovy.lang.Script;
-import groovy.util.GroovyTestCase;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.PrintStream;
-import java.security.AccessControlException;
-import java.security.AccessController;
-import java.security.Permission;
-import java.security.Policy;
-import java.security.PrivilegedAction;
-import java.util.Enumeration;
-
-import junit.framework.TestCase;
-import junit.framework.TestFailure;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-import junit.textui.ResultPrinter;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * @author Steve Goetze
- */
-public class SecurityTestSupport extends GroovyTestCase {
-
-	private static int counter = 0;
-	private static boolean securityDisabled; 
-	private static boolean securityAvailable;
-	private static boolean securityChecked = false;
-
-	static {
-		if (System.getProperty("groovy.security.disabled") != null) {
-			securityAvailable = false;
-			securityDisabled = true;
-		} else {
-			securityDisabled = false;
-			String groovyLibDir = System.getProperty("groovy.lib");
-			if (groovyLibDir == null) {
-				//Try to find maven repository in the default user.home location
-				groovyLibDir = System.getProperty("user.home") + "/" + ".maven/repository";
-			}
-			if (groovyLibDir == null) {
-				//Try at user.dir/lib
-				groovyLibDir = "lib";
-			}
-			if (new File(groovyLibDir).exists()) {
-				securityAvailable = true;
-				System.setProperty("groovy.lib", groovyLibDir);
-				System.setProperty("java.security.policy", "=security/groovy.policy");
-			} else {
-				securityAvailable = false;
-			}
-		}
-	}
-
-	public static boolean isSecurityAvailable() {
-		return securityAvailable;
-	}
-
-	public static boolean isSecurityDisabled() {
-		return securityDisabled;
-	}
-
-	public static void resetSecurityPolicy(String policyFileURL) {
-		System.setProperty("java.security.policy", policyFileURL);
-		Policy.getPolicy().refresh();
-	}
-	
-	protected class SecurityTestResultPrinter extends ResultPrinter {
-		
-		public SecurityTestResultPrinter(PrintStream stream) {
-			super(stream);
-		}
-		public void print(TestResult result) {
-			getWriter().println("Security testing on a groovy test failed:");
-		    printErrors(result);
-		    printFailures(result);
-		    printFooter(result);
-		}
-	};
-
-    protected GroovyClassLoader loader = (GroovyClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-		public Object run() {
-			return new GroovyClassLoader(SecurityTestSupport.class.getClassLoader()); 
-		}
-	});
-    
-	private SecurityManager securityManager;
-    private ClassLoader currentClassLoader;
-
-	public SecurityTestSupport() {
-	}
-	
-	/*
-	 * Check SecuritySupport to see if security is properly configured.  If not, fail the first
-	 * test that runs.  All remaining tests will run, but not do any security checking.
-	 */
-	private boolean checkSecurity() {
-		if (!securityChecked) {
-			securityChecked = true;
-			if (!isSecurityAvailable()) {
-				fail("Security is not available - skipping security tests.  Ensure that groovy.lib is set and points to the groovy dependency jars.");
-			}
-		}
-		return isSecurityAvailable();
-	}
-
-	//Prepare for each security test.  First, check to see if groovy.lib can be determined via
-	//a call to checkSecurity().  If not, fail() the first test.  Establish a security manager
-	//and make the GroovyClassLoader the initiating class loader (ala GroovyShell) to compile AND
-	//invoke the test scripts.  This handles cases where multiple .groovy scripts are involved in a
-	//test case: a.groovy depends on b.groovy; a.groovy is parsed (and in the process the gcl
-	//loads b.groovy via findClass).  Note that b.groovy is only available in the groovy class loader.
-	//See 
-	protected void setUp() {
-		if (checkSecurity()) {
-			securityManager = System.getSecurityManager();
-			if (securityManager == null) {
-	    		System.setSecurityManager(new SecurityManager());
-			}
-		}
-		currentClassLoader = Thread.currentThread().getContextClassLoader();
-		AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                Thread.currentThread().setContextClassLoader(loader);
-                return null;
-            }
-        });
-    }
-
-	protected void tearDown() {
-        AccessController.doPrivileged(new PrivilegedAction() {
-            public Object run() {
-                System.setSecurityManager(securityManager);
-                Thread.currentThread().setContextClassLoader(currentClassLoader);
-                return null;
-            }
-        });
-	}
-
-    protected synchronized String generateClassName() {
-        return "testSecurity" + (++counter);
-    }
-
-	/*
-	 * Execute the groovy script contained in file.  If missingPermission
-	 * is non-null, then this invocation expects an AccessControlException with missingPermission
-	 * as the reason.  If missingPermission is null, the script is expected to execute successfully.
-	 */
-	protected Class parseClass(File file) {
-		GroovyCodeSource gcs = null;
-		try {
-			gcs = new GroovyCodeSource(file);
-		} catch (FileNotFoundException fnfe) {
-			fail(fnfe.toString());
-		}
-		return parseClass(gcs);
-	}
-
-    /*
-	 * Parse the Groovy code contained in the GroovyCodeSource as a privileged operation (i.e. do not
-	 * require the code source to have specific compile time permissions) and return the resulting class.
-	 */
-	protected Class parseClass(final GroovyCodeSource gcs) {
-		Class clazz = null;
-		try {
-			clazz = loader.parseClass(gcs);
-		} catch (Exception e) {
-			fail(e.toString());
-		}
-		return clazz;
-	}
-    
-    /*
-	 * Parse the script contained in the GroovyCodeSource as a privileged operation (i.e. do not
-	 * require the code source to have specific compile time permissions).  If the class produced is a
-	 * TestCase, run the test in a suite and evaluate against the missingPermission.
-	 * Otherwise, run the class as a groovy script and evaluate against the missingPermission.
-	 */
-	private void parseAndExecute(final GroovyCodeSource gcs, Permission missingPermission) {
-		Class clazz = null;
-		try {
-			clazz = loader.parseClass(gcs);
-		} catch (Exception e) {
-			fail(e.toString());
-		}
-		if (TestCase.class.isAssignableFrom(clazz)) {
-			executeTest(clazz, missingPermission);
-		} else {
-			executeScript(clazz, missingPermission);
-		}
-	}
-
-	protected void executeTest(Class test, Permission missingPermission) {
-		TestSuite suite = new TestSuite();
-		suite.addTestSuite(test);
-        TestResult result = new TestResult();
-        suite.run(result);
-        if (result.wasSuccessful()) {
-        	if (missingPermission == null) {
-        		return;
-        	} else {
-        		fail("Security test expected an AccessControlException on " + missingPermission + ", but did not receive one");
-        	}
-        } else {
-        	if (missingPermission == null) {
-        		new SecurityTestResultPrinter(System.out).print(result);
-        		fail("Security test was expected to run successfully, but failed (results on System.out)");
-        	} else {
-        		//There may be more than 1 failure:  iterate to ensure that they all match the missingPermission.
-        		boolean otherFailure = false;
-        		for (Enumeration e = result.errors(); e.hasMoreElements(); ) {
-        			TestFailure failure = (TestFailure) e.nextElement();
-        			if (failure.thrownException() instanceof AccessControlException) {
-        				AccessControlException ace = (AccessControlException) failure.thrownException();
-        				if (missingPermission.implies(ace.getPermission())) {
-        					continue;
-        				}
-        			}
-        			otherFailure = true;        			
-        		}
-        		if (otherFailure) {
-        			new SecurityTestResultPrinter(System.out).print(result);
-        			fail("Security test expected an AccessControlException on " + missingPermission + ", but  failed for other reasons (results on System.out)");
-        		}
-        	}
-        }
-    }
-
-	protected void executeScript(Class scriptClass, Permission missingPermission) {
-		try {
-			Script script = InvokerHelper.createScript(scriptClass, new Binding());
-			script.run();
-			//InvokerHelper.runScript(scriptClass, null);
-		} catch (AccessControlException ace) {
-			if (missingPermission != null && missingPermission.implies(ace.getPermission())) {
-				return;
-			} else {
-				fail(ace.toString());
-			}
-		}
-		if (missingPermission != null) {
-			fail("Should catch an AccessControlException");
-		}
-	}
-	
-	/*
-	 * Execute the groovy script contained in file.  If missingPermission
-	 * is non-null, then this invocation expects an AccessControlException with missingPermission
-	 * as the reason.  If missingPermission is null, the script is expected to execute successfully.
-	 */
-	protected void assertExecute(File file, Permission missingPermission) {
-		if (!isSecurityAvailable()) {
-			return;
-		}
-		GroovyCodeSource gcs = null;
-		try {
-			gcs = new GroovyCodeSource(file);
-		} catch (FileNotFoundException fnfe) {
-			fail(fnfe.toString());
-		}
-		parseAndExecute(gcs, missingPermission);
-	}
-	
-	/*
-	 * Execute the script represented by scriptStr using the supplied codebase.  If missingPermission
-	 * is non-null, then this invocation expects an AccessControlException with missingPermission
-	 * as the reason.  If missingPermission is null, the script is expected to execute successfully.
-	 */
-	protected void assertExecute(String scriptStr, String codeBase, Permission missingPermission) {
-		if (!isSecurityAvailable()) {
-			return;
-		}
-		if (codeBase == null) {
-			codeBase = "/groovy/security/test";
-		}
-		parseAndExecute(new GroovyCodeSource(scriptStr, generateClassName(), codeBase), missingPermission);
-	}
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/SignedJarTest.java b/groovy/modules/classic/src/test/groovy/security/SignedJarTest.java
deleted file mode 100644
index dba8984..0000000
--- a/groovy/modules/classic/src/test/groovy/security/SignedJarTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package groovy.security;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-
-/**
- * Read a .groovy file from a signed jar and verify that a policy file grant with a signedBy field
- * works.  The following steps were used to create and manage the keys used to sign and read the jar:
- * <ol>
- * <li>keytool -genkey -alias groovy -keypass keypass -keystore groovystore -storepass storepass -validity 7000
- * <li>keytool -export -keystore groovystore -alias groovy -file GroovyDev.cer
- * <li>keytool -import -alias groovy -file GroovyDev.cer -keystore groovykeys
- * </ol>
- * Once the keys are constructed, creat the jar and sign:
- * <ol>
- * <li>jar -cvf Groovy.jar groovy
- * <li>jarsigner -keystore groovystore -signedjar GroovyJarTest.jar Groovy.jar groovy
- * </ol>
- * Add the keystore to the policy file and write the grant:
- * <ol>
- * <li>keystore "file:${user.dir}/src/test/groovy/security/groovykeys";
- * </ol>
- */
-public class SignedJarTest extends SecurityTestSupport {
-
-	public static void main(String[] args) {
-        TestRunner.run( suite() );
-    }
-   
-    public static Test suite() {
-    	return new TestSuite(SignedJarTest.class);
-    }
-
-    public void testReadSignedJar() throws Exception {
-    	if (!isSecurityAvailable()) {
-    		return;
-    	}
-    	Class c = loader.loadClass("groovy.security.JarTest");
-    	executeTest(c, null);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/security/forbiddenCodeBase.gvy b/groovy/modules/classic/src/test/groovy/security/forbiddenCodeBase.gvy
deleted file mode 100644
index d5e0141..0000000
--- a/groovy/modules/classic/src/test/groovy/security/forbiddenCodeBase.gvy
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- * Groovy script to be read as a file to test the file based codesource features of groovy security.
- * The file extension of .gvy is used to prevent this script from being treated as a groovy script by maven.
- */
- 
-new GroovyShell().evaluate("1+2", "forbiddenCodeBaseTest", "/groovy/security/forbiddenCodeBase");
diff --git a/groovy/modules/classic/src/test/groovy/sql/Person.groovy b/groovy/modules/classic/src/test/groovy/sql/Person.groovy
deleted file mode 100644
index 5ce6201..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/Person.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-package groovy.sql
-
-class Person {
-
-    property firstName
-    property lastName
-    property age
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/PersonTest.groovy b/groovy/modules/classic/src/test/groovy/sql/PersonTest.groovy
deleted file mode 100644
index 6fc2243..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/PersonTest.groovy
+++ /dev/null
@@ -1,63 +0,0 @@
-package groovy.sql
-
-import javax.sql.DataSource
-
-import org.axiondb.jdbc.AxionDataSource
-
-class PersonTest extends GroovyTestCase {
-
-    property type
-    
-    void testFoo() {
-        persons = createDataSet()
-		
-        blogs = persons.findAll { it.lastName == "Bloggs" }
-		
-        assertSql(blogs, "select * from person where lastName = ?", ['Bloggs'])
-    }
-
-    void testWhereWithAndClause() {
-        persons = createDataSet()
-		
-        blogs = persons.findAll { it.lastName == "Bloggs" }
-        
-        bigBlogs = blogs.findAll { it.size > 100 }
-		
-        assertSql(bigBlogs, "select * from person where lastName = ? and size > ?", ['Bloggs', 100])
-    }
-
-    void testWhereClosureWithAnd() {
-        persons = createDataSet()
-		
-        blogs = persons.findAll { it.size < 10 && it.lastName == "Bloggs" }
-		
-        assertSql(blogs, "select * from person where size < ? and lastName = ?", [10, 'Bloggs'])
-    }
- 
-    protected compareFn(value) {
-        value > 1 && value < 10
-    }
-    
-    protected assertSql(dataSet, expectedSql, expectedParams) {
-        sql = dataSet.sql
-        params = dataSet.parameters
-        assert sql == expectedSql
-        assert params == expectedParams
-    }
-    
-    protected createDataSet() {
-        type = Person
-	
-        assert type != null : "failed to load Person class"
-    
-        dataSource = createDataSource()
-        sql = new Sql(dataSource)
-        
-        return sql.dataSet(type)
-    }
-    
-    protected DataSource createDataSource() {
-        return new AxionDataSource("jdbc:axiondb:foo" + getMethodName())
-    }
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlCompleteTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlCompleteTest.groovy
deleted file mode 100644
index 3303142..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlCompleteTest.groovy
+++ /dev/null
@@ -1,120 +0,0 @@
-package groovy.sql
-
-class SqlCompleteTest extends TestHelper {
-
-    void testSqlQuery() {
-        sql = createSql()     
-        
-        results = [:]
-        sql.eachRow("select * from PERSON") { results.put(it.firstname, it.lastname) }
-        
-        expected = ["James":"Strachan", "Bob":"Mcwhirter", "Sam":"Pullara"]
-					
-        assert results == expected
-    }
-    
-    void testSqlQueryWithWhereClause() {
-        sql = createSql()     
-        
-        foo = "drink"
-        results = []
-        sql.eachRow("select * from FOOD where type=${foo}") { results.add(it.name) }
-        
-        expected = ["beer", "coffee"]
-        assert results == expected
-    }
-    
-    void testSqlQueryWithWhereClauseWith2Arguments() {
-        sql = createSql()     
-        
-        foo = "cheese"
-        bar = "edam"
-        results = []
-        sql.eachRow("select * from FOOD where type=${foo} and name != ${bar}") { results.add(it.name) }
-        
-        expected = ["brie", "cheddar"]
-        assert results == expected
-    }
-
-    void testSqlQueryWith2ParametersUsingQuestionMarkNotation() {
-        sql = createSql()     
-        
-        results = []
-        sql.eachRow("select * from FOOD where type=? and name != ?", ["cheese", "edam"]) { results.add(it.name) }
-        
-        expected = ["brie", "cheddar"]
-        assert results == expected
-    }
-
-    void testDataSet() {
-        sql = createSql()     
-        
-        results = []
-        people = sql.dataSet("PERSON")
-        people.each { results.add(it.firstname) }
-        
-        expected = ["James", "Bob", "Sam"]
-        assert results == expected
-    }
-    
-    void testDataSetWithClosurePredicate() {
-        sql = createSql()     
-        
-        results = []
-        food = sql.dataSet("FOOD")
-        food.findAll { it.type == "cheese" }.each { results.add(it.name) }
-        
-        expected = ["edam", "brie", "cheddar"]
-        assert results == expected
-    }
-    
-    void testUpdatingDataSet() {
-        sql = createSql()     
-        
-        results = []
-        features = sql.dataSet("FEATURE")
-        features.each { 
-            /** @todo Axion doesn't yet support ResultSet updating
-            if (it.id == 1) {
-                it.name = it.name + " Rocks!"
-                println("Changing name to ${it.name}")
-            }
-            */
-            results.add(it.name) 
-        }
-        
-        expected = ["GDO", "GPath", "GroovyMarkup"]
-        assert results == expected
-    }
-    
-    void testGStringToSqlConversion(){
-       foo = 'loincloth'
-       bar = 'wasteband'
-       sql = createSql()
-       expected = "A narrow ? supported by a ?!!"
-       gstring = "A narrow ${foo} supported by a ${bar}!!"
-       result = sql.asSql(gstring, gstring.values.toList())
-       assert result == expected
-    }
-    
-    void testExecuteUpdate(){
-        foo='food-drink'
-        food = 'food'
-        drink = 'drink'
-        bar='guinness'
-        sql = createSql();
-        expected = 0
-        result = sql.executeUpdate("update FOOD set type=? where name=?",[foo,bar]);
-        assert result == expected
-        expected  = 1
-        result = sql.executeUpdate("insert into FOOD (type,name) values (${food},${bar})");
-    	assert result == expected
-        result = sql.executeUpdate("insert into FOOD (type,name) values (${drink},${bar})");
-    	assert result == expected
-        result = sql.executeUpdate("insert into FOOD (type,name) values ('drink','guinness')");
-    	assert result == expected
-        expected = 3
-        result = sql.executeUpdate("update FOOD set type=? where name=?",[foo,bar]);
-        assert result == expected
-    }    
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlCompleteWithoutDataSourceTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlCompleteWithoutDataSourceTest.groovy
deleted file mode 100644
index c6447c3..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlCompleteWithoutDataSourceTest.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.sql
-
-import org.axiondb.jdbc.AxionDriver
-import java.sql.DriverManager
-
-/**
- * Tests the use of the Sql class using just a Connection 
- * rather than a DataSource
- */
-class SqlCompleteWithoutDataSourceTest extends SqlCompleteTest {
-    
-    protected newSql(String uri) {
-        driver = AxionDriver
-        println("Loading driver ${driver}")
-        return new Sql(DriverManager.getConnection(uri))
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlRowsTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlRowsTest.groovy
deleted file mode 100644
index 617224c..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlRowsTest.groovy
+++ /dev/null
@@ -1,79 +0,0 @@
-package groovy.sql
-
-import org.axiondb.jdbc.AxionDriver
-
-class SqlRowsTest extends TestHelper {
-
-    void testFirstRowWithPropertyName() {
-        sql = createSql()
-
-        results = sql.firstRow("select firstname, lastname from PERSON where id=1").firstname 
-        expected = "James"
-        assert results == expected
-    }
-
-    void testFirstRowWithPropertyNameAndParams() {
-        sql = createSql()
-
-        results = sql.firstRow("select firstname, lastname from PERSON where id=?", [1]).lastname 
-        expected = "Strachan"
-        assert results == expected
-    }
-
-    void testFirstRowWithPropertyNumber() {
-        sql = createSql()
-
-        results = sql.firstRow("select firstname, lastname from PERSON where id=1")[0] 
-        expected = "James"
-        assert results == expected
-    }
-    
-    void testFirstRowWithPropertyNumberAndParams() {
-        sql = createSql()
-
-        results = sql.firstRow("select firstname, lastname from PERSON where id=?", [1])[0] 
-        expected = "James"
-        assert results == expected
-    }
-    
-    void testAllRowsWithPropertyNumber() {
-        sql = createSql()
-
-        results = sql.rows("select firstname, lastname from PERSON where id=1 or id=2 order by id")
-        assert results[0][0] == "James"
-        assert results[0][1] == "Strachan"
-        assert results[1][0] == "Bob"
-        assert results[1][1] == "Mcwhirter"
-    }
-
-    void testAllRowsWithPropertyNumberAndParams() {
-        sql = createSql()
-
-        results = sql.rows("select firstname, lastname from PERSON where id=? or id=? order by id", [1,2])
-        assert results[0][0] == "James"
-        assert results[0][1] == "Strachan"
-        assert results[1][0] == "Bob"
-        assert results[1][1] == "Mcwhirter"
-    }
-
-    void testAllRowsWithPropertyName() {
-        sql = createSql()
-
-        results = sql.rows("select firstname, lastname from PERSON where id=1 or id=2 order by id")
-        assert results[0].firstname == "James"
-        assert results[0].lastname == "Strachan"
-        assert results[1].firstname == "Bob"
-        assert results[1].lastname == "Mcwhirter"
-    }
-
-    void testAllRowsWithPropertyNameAndParams() {
-        sql = createSql()
-
-        results = sql.rows("select firstname, lastname from PERSON where id=? or id=? order by id", [1,2])
-        assert results[0].firstname == "James"
-        assert results[0].lastname == "Strachan"
-        assert results[1].firstname == "Bob"
-        assert results[1].lastname == "Mcwhirter"
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlTest.groovy
deleted file mode 100644
index e0e16e7..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlTest.groovy
+++ /dev/null
@@ -1,115 +0,0 @@
-package groovy.sql
-
-import org.axiondb.jdbc.AxionDataSource
-
-/**
- * This is more of a sample program than a unit test and is here as an easy
- * to read demo of GDO. The actual full unit test case is in SqlCompleteTest
- */
-class SqlTest extends GroovyTestCase {
-
-    void testSqlQuery() {
-        sql = createSql()     
-        
-        sql.eachRow("select * from PERSON") { println("Hello ${it.firstname} ${it.lastname}") }
-    }
-    
-    void testQueryUsingColumnIndex() {
-	    	sql = createSql()
-	    	
-	    	answer = null
-	    	
-	    	sql.eachRow("select count(*) from PERSON") { answer = it[0] }
-	    	
-	    	println "Found the count of ${answer}"
-	    	
-	    	assert answer == 3
-	    }
-    
-    void testQueryUsingNegativeColumnIndex() {
-	    	sql = createSql()
-
-		first = null
-		last = null
-		    	
-	    	sql.eachRow("select firstname, lastname from PERSON where firstname='James'") { row |
-	    		first = row[-2]
-	    		last = row[-1]
-	    	}
-	    	
-	    	println "Found name ${first} ${last}"
-    	
-	    	assert first == "James"
-	    	assert last == "Strachan"
-    }
-    
-    void testSqlQueryWithWhereClause() {
-        sql = createSql()     
-        
-        foo = "drink"
-        sql.eachRow("select * from FOOD where type=${foo}") { println("Drink ${it.name}") }
-    }
-    
-    void testSqlQueryWithWhereClauseWith2Arguments() {
-        sql = createSql()     
-        
-        foo = "cheese"
-        bar = "edam"
-        sql.eachRow("select * from FOOD where type=${foo} and name != ${bar}") { println("Found cheese ${it.name}") }
-    }
-    
-    void testSqlQueryWithIncorrectlyQuotedDynamicExpressions() {
-        sql = createSql()     
-        
-        foo = "cheese"
-        bar = "edam"
-        sql.eachRow("select * from FOOD where type='${foo}' and name != '${bar}'") { println("Found cheese ${it.name}") }
-    }
-    
-    void testDataSet() {
-        sql = createSql()     
-        
-        people = sql.dataSet("PERSON")
-        people.each { println("Hey ${it.firstname}") }
-    }
-    
-    void testDataSetWithClosurePredicate() {
-        sql = createSql()     
-        
-        food = sql.dataSet("FOOD")
-        food.findAll { it.type == "cheese" }.each { println("Cheese ${it.name}") }
-    }
-    
-    void testExecuteUpdate(){
-        foo='food-drink'
-        bar='guinness'
-        sql = createSql();
-        nRows = sql.executeUpdate("update FOOD set type=? where name=?",[foo,bar]);
-        if(nRows == 0){
-            sql.executeUpdate("insert into FOOD (type,name) values (${foo},${bar})");
-    		}
-    }
-    
-    protected createSql() {
-        dataSource = new AxionDataSource("jdbc:axiondb:foo" + getMethodName())
-        sql = new Sql(dataSource)
-        
-        sql.execute("create table PERSON ( firstname varchar, lastname varchar )")     
-        sql.execute("create table FOOD ( type varchar, name varchar)")
-        
-        // now lets populate the datasets
-        people = sql.dataSet("PERSON")
-        people.add( firstname:"James", lastname:"Strachan" )
-        people.add( firstname:"Bob", lastname:"Mcwhirter" )
-        people.add( firstname:"Sam", lastname:"Pullara" )
-        
-        food = sql.dataSet("FOOD")
-        food.add( type:"cheese", name:"edam" )
-        food.add( type:"cheese", name:"brie" )
-        food.add( type:"cheese", name:"cheddar" )
-        food.add( type:"drink", name:"beer" )
-        food.add( type:"drink", name:"coffee" )
-        
-        return sql
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlWithBuilderTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlWithBuilderTest.groovy
deleted file mode 100644
index 3dabe28..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlWithBuilderTest.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-package groovy.sql
-
-import groovy.xml.MarkupBuilder 
-
-/**
- * @author Brian McCallister
- * @version $Revision$
- */
-class SqlWithBuilderTest extends TestHelper {
-
-    void testSqlQuery() {
-         sql = createSql()
-         println "Created ${sql}"
-        
-         doc = new MarkupBuilder()
-        
-         doc.people {
-             sql.eachRow("select * from PERSON") {
-                 doc.person(first: it.firstname, last: it.lastname, location: it.location_name)
-             }
-         }
-        
-         sql.close()
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/sql/SqlWithTypedResultsTest.groovy b/groovy/modules/classic/src/test/groovy/sql/SqlWithTypedResultsTest.groovy
deleted file mode 100644
index d7c9891..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/SqlWithTypedResultsTest.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-package groovy.sql
-
-import groovy.xml.MarkupBuilder 
-
-/**
- * @author Thomas Heller
- * @version $Revision$
- */
-class SqlWithTypedResultsTest extends TestHelper {
-
-    void testSqlQuery() {
-         sql = createEmptySql()
-         
-         sql.execute("create table groovytest ( anint integer, astring varchar )");
-
-         groovytest = sql.dataSet("groovytest")
-         groovytest.add( anint:1, astring:"Groovy" )
-         groovytest.add( anint:2, astring:"rocks" )
-
-         // this line messes up things:
-         /** @todo this fails
-         Integer id
-		 */
-         Integer id = 0
-		 
-         sql.eachRow("SELECT * FROM groovytest ORDER BY anint") { 
-         	println "found ${it.astring} for id ${it.anint}"
-         	
-         	id = it.anint 
-         }
-
-         assert id == 2
-        
-         sql.close()
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/sql/TestHelper.groovy b/groovy/modules/classic/src/test/groovy/sql/TestHelper.groovy
deleted file mode 100644
index acb8c65..0000000
--- a/groovy/modules/classic/src/test/groovy/sql/TestHelper.groovy
+++ /dev/null
@@ -1,58 +0,0 @@
-package groovy.sql
-
-import org.axiondb.jdbc.AxionDataSource
-
-class TestHelper extends GroovyTestCase {
-
-    static counter = 1
-    
-    static Sql makeSql() {
-        foo = new TestHelper()
-        return foo.createSql()
-    }
-    
-    
-    protected createEmptySql() {
-        return newSql(getURI())
-    }
-    
-    protected createSql() {
-        sql = newSql(getURI())
-        
-        sql.execute("create table PERSON ( firstname varchar, lastname varchar, id integer, location_id integer, location_name varchar )")     
-        sql.execute("create table FOOD ( type varchar, name varchar)")
-        sql.execute("create table FEATURE ( id integer, name varchar)")
-        
-        // now lets populate the datasets
-        people = sql.dataSet("PERSON")
-        people.add( firstname:"James", lastname:"Strachan", id:1, location_id:10, location_name:'London' )
-        people.add( firstname:"Bob", lastname:"Mcwhirter", id:2, location_id:20, location_name:'Atlanta' )
-        people.add( firstname:"Sam", lastname:"Pullara", id:3, location_id:30, location_name:'California' )
-        
-        food = sql.dataSet("FOOD")
-        food.add( type:"cheese", name:"edam" )
-        food.add( type:"cheese", name:"brie" )
-        food.add( type:"cheese", name:"cheddar" )
-        food.add( type:"drink", name:"beer" )
-        food.add( type:"drink", name:"coffee" )
-        
-        features = sql.dataSet("FEATURE")
-        features.add( id:1, name:'GDO' )
-        features.add( id:2, name:'GPath' )
-        features.add( id:3, name:'GroovyMarkup' )
-        return sql
-    }
-    
-    protected getURI() {
-		answer = "jdbc:axiondb:foo"
-		name = getMethodName()
-		if (name == null) { name = "" }
-		name += counter++
-		return answer + name
-    }
-    
-    protected newSql(String uri) {
-	    dataSource = new AxionDataSource(uri)
-	    return new Sql(dataSource)
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/swing/Demo.java b/groovy/modules/classic/src/test/groovy/swing/Demo.java
deleted file mode 100644
index c30c93d..0000000
--- a/groovy/modules/classic/src/test/groovy/swing/Demo.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.swing;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class Demo extends TestSupport {
-
-    public static void main(String[] args) throws Exception {
-        Demo demo = new Demo();
-        GroovyObject object = demo.compile("src/test/groovy/swing/SwingDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/swing/MyTableModel.java b/groovy/modules/classic/src/test/groovy/swing/MyTableModel.java
deleted file mode 100644
index c4ae050..0000000
--- a/groovy/modules/classic/src/test/groovy/swing/MyTableModel.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package groovy.swing;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.swing.table.AbstractTableModel;
-
-/** 
- * A sample table model
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MyTableModel extends AbstractTableModel {
-
-    private static final Logger log = Logger.getLogger(MyTableModel.class.getName());
-
-    public MyTableModel() {
-    }
-
-    final String[] columnNames = { "First Name", "Last Name", "Sport", "# of Years", "Vegetarian" };
-    final Object[][] data = { { "Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)}, {
-            "Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)
-            }, {
-            "Kathy", "Walrath", "Chasing toddlers", new Integer(2), new Boolean(false)
-            }, {
-            "Mark", "Andrews", "Speed reading", new Integer(20), new Boolean(true)
-            }, {
-            "Angela", "Lih", "Teaching high school", new Integer(4), new Boolean(false)
-            }
-    };
-
-    public int getColumnCount() {
-        return columnNames.length;
-    }
-
-    public int getRowCount() {
-        return data.length;
-    }
-
-    public String getColumnName(int col) {
-        return columnNames[col];
-    }
-
-    public Object getValueAt(int row, int col) {
-        return data[row][col];
-    }
-
-    /*
-     * JTable uses this method to determine the default renderer/
-     * editor for each cell.  If we didn't implement this method,
-     * then the last column would contain text ("true"/"false"),
-     * rather than a check box.
-     */
-    public Class getColumnClass(int c) {
-        return getValueAt(0, c).getClass();
-    }
-
-    /*
-     * Don't need to implement this method unless your table's
-     * editable.
-     */
-    public boolean isCellEditable(int row, int col) {
-        //Note that the data/cell address is constant,
-        //no matter where the cell appears onscreen.
-        if (col < 2) {
-            return false;
-        }
-        else {
-            return true;
-        }
-    }
-
-    /*
-     * Don't need to implement this method unless your table's
-     * data can change.
-     */
-    public void setValueAt(Object value, int row, int col) {
-        if (log.isLoggable(Level.FINE)) {
-            log.fine(
-                "Setting value at " + row + "," + col + " to " + value + " (an instance of " + value.getClass() + ")");
-        }
-
-        if (data[0][col] instanceof Integer && !(value instanceof Integer)) {
-            //With JFC/Swing 1.1 and JDK 1.2, we need to create    
-            //an Integer from the value; otherwise, the column     
-            //switches to contain Strings.  Starting with v 1.3,   
-            //the table automatically converts value to an Integer,
-            //so you only need the code in the 'else' part of this 
-            //'if' block.                                          
-            //XXX: See TableEditDemo.java for a better solution!!!
-            try {
-                data[row][col] = new Integer(value.toString());
-                fireTableCellUpdated(row, col);
-            }
-            catch (NumberFormatException e) {
-                log.log(Level.SEVERE, "The \"" + getColumnName(col) + "\" column accepts only integer values.");
-            }
-        }
-        else {
-            data[row][col] = value;
-            fireTableCellUpdated(row, col);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/swing/SwingDemo.groovy b/groovy/modules/classic/src/test/groovy/swing/SwingDemo.groovy
deleted file mode 100644
index 0c59998..0000000
--- a/groovy/modules/classic/src/test/groovy/swing/SwingDemo.groovy
+++ /dev/null
@@ -1,104 +0,0 @@
-package groovy.swing
-
-import java.awt.BorderLayout
-import javax.swing.BorderFactory
-import groovy.model.MvcDemo
-
-class SwingDemo {
-
-    swing = new SwingBuilder()
-
-	static void main(args) {
-		demo = new SwingDemo()
-		demo.run()
-	}
-	
-    void run() {
-        frame = swing.frame(
-            title:'This is a Frame',
-            location:[100,100],
-            size:[800,400],
-            defaultCloseOperation:javax.swing.WindowConstants.EXIT_ON_CLOSE) {
-
-            menuBar {
-		        menu(text:'File') {
-                    menuItem() {
-                        action(name:'New', closure:{ println("clicked on the new menu item!") })
-                    }
-                    menuItem() {
-                        action(name:'Open', closure:{ println("clicked on the open menu item!") })
-                    }
-                    separator()
-                    menuItem() {
-                        action(name:'Save', enabled:false, closure:{ println("clicked on the Save menu item!") })
-                    }
-		        }
-                menu(text:'Demos') {
-                    menuItem() {
-                        action(name:'Simple TableModel Demo', closure:{ showGroovyTableDemo() })
-                    }
-                    menuItem() {
-                        action(name:'MVC Demo', closure:{ showMVCDemo() })
-                    }
-                    menuItem() {
-                        action(name:'TableLayout Demo', closure:{ showTableLayoutDemo() })
-                    }
-                }
-                menu(text:'Help') {
-                    menuItem() {
-                        action(name:'About', closure:{ showAbout() })
-                    }
-                }
-		    }
-		    splitPane {
-                panel(layout:new BorderLayout(), border:BorderFactory.createTitledBorder(BorderFactory.createLoweredBevelBorder(), 'titled border')) {
-    				vbox(constraints:BorderLayout.NORTH) {
-                        panel(layout:new BorderLayout()) {
-                            label(text:'Name', constraints:BorderLayout.WEST, toolTipText:'This is the name field')
-                            textField(text:'James', constraints:BorderLayout.CENTER, toolTipText:'Enter the name into this field')
-                        }
-                        panel(layout:new BorderLayout()) {
-                            label(text:'Location', constraints:BorderLayout.WEST, toolTipText:'This is the location field')
-                            comboBox(items:['Atlanta', 'London', 'New York'], constraints:BorderLayout.CENTER, toolTipText:'Choose the location into this field')
-                        }
-                        button(text:'Click Me', actionPerformed:{event | println("closure fired with event: " + event) })
-                    }
-                    scrollPane(constraints:BorderLayout.CENTER, border:BorderFactory.createRaisedBevelBorder()) {
-                    	textArea(text:'Some text goes here', toolTipText:'This is a large text area to type in text')
-                    }
-                }
-		        scrollPane {
-		            table(model:new MyTableModel())
-		        }
-		    }
-		}        
-		frame.show()
-    }
-    
-    showAbout() {
-        // this version doesn't auto-size & position the dialog
-        /*
-        dialog = swing.dialog(owner:frame, title:'About GroovySwing') {
-            optionPane(message:'Welcome to the wonderful world of GroovySwing')
-        }
-		*/ 		
- 		pane = swing.optionPane(message:'Welcome to the wonderful world of GroovySwing')
- 		dialog = pane.createDialog(frame, 'About GroovySwing')
- 		dialog.show()
-    }
-    
-    showGroovyTableDemo() {
-        demo = new TableDemo()
-        demo.run()
-    }
-
-    showMVCDemo() {
-        demo = new MvcDemo()
-        demo.run()
-    }
-
-    showTableLayoutDemo() {
-        demo = new TableLayoutDemo()
-        demo.run()
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/swing/TableDemo.groovy b/groovy/modules/classic/src/test/groovy/swing/TableDemo.groovy
deleted file mode 100644
index 30cc208..0000000
--- a/groovy/modules/classic/src/test/groovy/swing/TableDemo.groovy
+++ /dev/null
@@ -1,51 +0,0 @@
-package groovy.swing
-
-import java.awt.BorderLayout
-import javax.swing.BorderFactory
-
-/**
- * Demonstrates the use of the Groovy TableModels for viewing tables of any List of objects
- */
-class TableDemo {
-    
-    // properties
-    frame; swing
-    
-    static void main(args) {
-        demo = new TableDemo()
-        demo.run()
-    }
-    
-    void run() {
-        swing = new SwingBuilder()
-        
-        frame = swing.frame(title:'Groovy TableModel Demo', location:[200,200], size:[300,200]) {
-            menuBar {
-		        menu(text:'Help') {
-		            menuItem() {
-		                action(name:'About', closure:{ showAbout() })
-		            }
-		        }
-		    }
-		    panel(layout:new BorderLayout()) {
-		        scrollPane(constraints:BorderLayout.CENTER) {
-    	            table() {
-    	                model = [['name':'James', 'location':'London'], ['name':'Bob', 'location':'Atlanta'], ['name':'Geir', 'location':'New York']]
-    	                
-    	                tableModel(list:model) {
-                            closureColumn(header:'Name', read:{row| return row.name})
-                            closureColumn(header:'Location', read:{row| return row.location})
-    	                }
-    	            }
-    	        }
-		    }
-		}        
-		frame.show()
-    }
-    
-    showAbout() {
- 		pane = swing.optionPane(message:'This demo shows how GroovySwing can use Groovy closures to create simple table models')
- 		dialog = pane.createDialog(frame, 'About GroovySwing')
- 		dialog.show()
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/swing/TableLayoutDemo.groovy b/groovy/modules/classic/src/test/groovy/swing/TableLayoutDemo.groovy
deleted file mode 100644
index 58f19b7..0000000
--- a/groovy/modules/classic/src/test/groovy/swing/TableLayoutDemo.groovy
+++ /dev/null
@@ -1,57 +0,0 @@
-package groovy.swing
-
-import java.awt.BorderLayout
-import javax.swing.BorderFactory
-
-/**
- * Demonstrates the use of the table layout
- */
-class TableLayoutDemo {
-    
-    property frame
-    property swing
-    
-    void run() {
-        swing = new SwingBuilder()
-        
-        frame = swing.frame(title:'TableLayout Demo', location:[200,200], size:[300,200]) {
-            menuBar {
-		        menu(text:'Help') {
-		            menuItem() {
-		                action(name:'About', closure:{ showAbout() })
-		            }
-		        }
-		    }
-			tableLayout {
-                tr {
-                    td {
-                        label(text:'name')
-                    }
-                    td(colfill:true) {
-                        textField(text:'James')
-                    }
-                }
-                tr {
-                    td {
-                        label(text:'location')
-                    }
-                    td(colfill:true) {
-                        textField(text:'London')
-                    }
-                }
-                tr {
-                    td(colspan:2, align:'center') {
-                        button(text:'OK')
-                    }
-                }
-            }
-		}        
-		frame.show()
-    }
-    
-    showAbout() {
- 		pane = swing.optionPane(message:'This demo shows how you can use HTML style table layouts with Swing components')
- 		dialog = pane.createDialog(frame, 'About TableLayout Demo')
- 		dialog.show()
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/text/TemplateTest.java b/groovy/modules/classic/src/test/groovy/text/TemplateTest.java
deleted file mode 100644
index db8c29b..0000000
--- a/groovy/modules/classic/src/test/groovy/text/TemplateTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * $Id$version Mar 8, 2004 1:36:31 AM $user Exp $
- * 
- * Copyright 2003 (C) Sam Pullara. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
- package groovy.text;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.codehaus.groovy.control.CompilationFailedException;
-
-
-
-/**
- * @author sam
- */
-public class TemplateTest extends TestCase {
-    
-    public void testMixedTemplateText() throws CompilationFailedException, ClassNotFoundException, IOException {
-        Template template1 = new SimpleTemplateEngine().createTemplate("<%= \"test\" %> of expr and <% test = 1 %>${test} script.");
-        assertEquals("test of expr and 1 script.", template1.make().toString());
-        
-        Template template2 = new GStringTemplateEngine().createTemplate("<%= \"test\" %> of expr and <% test = 1 %>${test} script.");
-        assertEquals("test of expr and 1 script.", template2.make().toString());
-        
-    }
-    
-    public void testBinding() throws CompilationFailedException, ClassNotFoundException, IOException {
-        Map binding = new HashMap();
-        binding.put("sam", "pullara");
-        
-        Template template1 = new SimpleTemplateEngine().createTemplate("<%= sam %><% print sam %>");
-        assertEquals("pullarapullara", template1.make(binding).toString());
-        
-        Template template2 = new GStringTemplateEngine().createTemplate("<%= sam %><% out << sam %>");
-        assertEquals("pullarapullara", template2.make(binding).toString());
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/tree/ClosureClassLoaderBug.groovy b/groovy/modules/classic/src/test/groovy/tree/ClosureClassLoaderBug.groovy
deleted file mode 100644
index 4eb700a..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/ClosureClassLoaderBug.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-class ClosureClassLoaderBug extends GroovyTestCase {
-    
-    property b
-
-    void testTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root1( {
-            b.elem1('hello1')
-        })
-        
-        print(root)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/tree/NavigationTest.groovy b/groovy/modules/classic/src/test/groovy/tree/NavigationTest.groovy
deleted file mode 100644
index 16b9d70..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/NavigationTest.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-/**
- * Simple test of tree walking
- */
-class NavigationTest extends GroovyTestCase {
-    
-    void testDepthFirst() {
-        tree = createTree()
-        
-        names = tree.depthFirst().collect { it.name() }
-        expected = ['a', 'b1', 'b2', 'c1', 'c2', 'b3', 'b4', 'c3', 'c4', 'b5']
-        
-        assert names == expected
-    }
-    
-    void testBredthFirst() {
-        tree = createTree()
-        
-        names = tree.breadthFirst().collect { it.name() }
-        expected = ['a', 'b1', 'b2', 'b3', 'b4', 'b5', 'c1', 'c2', 'c3', 'c4']
-        
-        assert names == expected
-    }
-    
-    protected createTree() {       
-        b = NodeBuilder.newInstance()
-        
-        root = b.a(a:5, b:7) {
-            b1()
-            b2 {
-                c1()
-                c2()
-            }
-            b3()
-            b4 {
-                c3()
-                c4()
-            }
-            b5()
-        }
-        
-        assert root != null
-        
-        println(root)
-        
-        return root
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/tree/NestedClosureBugTest.groovy b/groovy/modules/classic/src/test/groovy/tree/NestedClosureBugTest.groovy
deleted file mode 100644
index cec6e1d..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/NestedClosureBugTest.groovy
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-/**
- * Test case for a bug with nested closures
- */
-class NestedClosureBugTest extends GroovyTestCase {
-    
-    property b
-
-    void testNestedClosureBug() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root(['a':'xyz'], {
-            b.child({
-                b.grandChild()  
-            })
-        })
-
-		println(root)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/tree/NodePrinterTest.java b/groovy/modules/classic/src/test/groovy/tree/NodePrinterTest.java
deleted file mode 100644
index bff218e..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/NodePrinterTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.tree;
-
-import java.util.logging.Logger;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class NodePrinterTest extends TestSupport {
-
-    public void testTree() throws Exception {
-        GroovyObject object = compile("src/test/groovy/tree/TreeTest.groovy");
-        object.invokeMethod("testTree", null);
-    }
-
-    public void testVerboseTree() throws Exception {
-        GroovyObject object = compile("src/test/groovy/tree/VerboseTreeTest.groovy");
-        object.invokeMethod("testTree", null);
-    }
-
-    public void testSmallTree() throws Exception {
-        GroovyObject object = compile("src/test/groovy/tree/SmallTreeTest.groovy");
-        object.invokeMethod("testTree", null);
-    }
-
-    public void testLittleClosure() throws Exception {
-        GroovyObject object = compile("src/test/groovy/LittleClosureTest.groovy");
-        object.invokeMethod("testClosure", null);
-    }
-    
-    public void testNestedClosureBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/tree/NestedClosureBugTest.groovy");
-        object.invokeMethod("testNestedClosureBug", null);
-    }
-    
-    public void testClosureClassLoaderBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/tree/ClosureClassLoaderBug.groovy");
-        object.invokeMethod("testTree", null);
-    }
-    
-    public void testLogging() {
-        Logger log = Logger.getLogger(getClass().getName());
-        log.info("Logging using JDK 1.4 logging");
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/tree/SmallTreeTest.groovy b/groovy/modules/classic/src/test/groovy/tree/SmallTreeTest.groovy
deleted file mode 100644
index 55e7153..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/SmallTreeTest.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-class SmallTreeTest extends GroovyTestCase {
-    
-    property b
-
-    void testTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root1( {
-            elem1('hello1')
-        })
-        
-        assert root != null
-        
-        println(root)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/tree/TreeTest.groovy b/groovy/modules/classic/src/test/groovy/tree/TreeTest.groovy
deleted file mode 100644
index 51a9eea..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/TreeTest.groovy
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/**
- * This test uses the concise GroovyMarkup syntax to test the building of trees
- */
-class TreeTest extends GroovyTestCase {
-    
-    void testSmallTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root1(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(x:7)
-        }
-        
-        assert root != null
-        
-        print(root)
-    }
-    
-    void testTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root2(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(x:'abc', y:'def') {
-                child(z:'def')
-                child2()  
-            }
-            
-            nestedElem2(z:'zzz') {
-                child(z:'def')
-                child2("hello")  
-            }
-        }
-        
-        assert root != null
-        
-        print(root)
-
-		e1 = root.elem1.get(0)
-        assert e1.value() == 'hello1'
-        
-        e2 = root.elem2.get(0)
-        assert e2.value() == 'hello2'
-
-        assert root.elem1.get(0).value() == 'hello1'
-        assert root.elem2.get(0).value() == 'hello2'
-
-        assert root.nestedElem.get(0).attributes() == ['x':'abc', 'y':'def']        
-        assert root.nestedElem.child.get(0).attributes() == ['z':'def']
-        
-        assert root.nestedElem.child2.get(0).value() == []
-        assert root.nestedElem.child2.get(0).text() == ''
-
-        assert root.nestedElem2.get(0).attributes() == ['z':'zzz']      
-        assert root.nestedElem2.child.get(0).attributes() == ['z':'def']
-        assert root.nestedElem2.child2.get(0).value() == 'hello'
-        assert root.nestedElem2.child2.get(0).text() == 'hello'
-        
-        list = root.value()
-        assert list.size() == 4
-
-        assert root.attributes().a == 5
-        assert root.attributes().b == 7
-        
-        assert root.nestedElem.get(0).attributes().x == 'abc'
-        assert root.nestedElem.get(0).attributes().y == 'def'
-        assert root.nestedElem2.get(0).attributes().z == 'zzz'
-        assert root.nestedElem2.child.get(0).attributes().z == 'def'
-        
-        /** @todo parser add .@ as an operation
-                assert root.@a == 5
-                assert root.@b == 7
-        */        
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/tree/VerboseTreeTest.groovy b/groovy/modules/classic/src/test/groovy/tree/VerboseTreeTest.groovy
deleted file mode 100644
index 2099434..0000000
--- a/groovy/modules/classic/src/test/groovy/tree/VerboseTreeTest.groovy
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-/**
- * This test uses the verbose syntax to test the building of trees
- * using GroovyMarkup
- */
-class VerboseTreeTest extends GroovyTestCase {
-    
-    property b
-
-    void testSmallTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root1(['a':5, 'b':7], {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(['x':7])
-        })
-        
-        assert root != null
-        
-        print(root)
-    }
-    
-    void testTree() {
-        b = NodeBuilder.newInstance()
-        
-        root = b.root2(['a':5, 'b':7], {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(['x':'abc', 'y':'def'], {
-                child(['z':'def'])
-                child2()  
-            })
-            
-            nestedElem2(['z':'zzz'], {
-                child(['z':'def'])
-                child2("hello")  
-            })
-        })
-        
-        assert root != null
-        
-        print(root)
-
-        e1 = root.elem1.get(0)
-        assert e1.value() == 'hello1'
-        
-        e2 = root.elem2.get(0)
-        assert e2.value() == 'hello2'
-
-        assert root.elem1.get(0).value() == 'hello1'
-        assert root.elem2.get(0).value() == 'hello2'
-
-        assert root.nestedElem.get(0).attributes() == ['x':'abc', 'y':'def']        
-        assert root.nestedElem.child.get(0).attributes() == ['z':'def']
-        
-        assert root.nestedElem.child2.get(0).value() == []
-        assert root.nestedElem.child2.get(0).text() == ''
-
-        assert root.nestedElem2.get(0).attributes() == ['z':'zzz']      
-        assert root.nestedElem2.child.get(0).attributes() == ['z':'def']
-        assert root.nestedElem2.child2.get(0).value() == 'hello'
-        assert root.nestedElem2.child2.get(0).text() == 'hello'
-        
-        list = root.value()
-        assert list.size() == 4
-
-        assert root.attributes().a == 5
-        assert root.attributes().b == 7
-        
-        assert root.nestedElem.get(0).attributes().x == 'abc'
-        assert root.nestedElem.get(0).attributes().y == 'def'
-        assert root.nestedElem2.get(0).attributes().z == 'zzz'
-        assert root.nestedElem2.child.get(0).attributes().z == 'def'
-        
-        /** @todo parser add .@ as an operation
-                assert root.@a == 5
-                assert root.@b == 7
-        */        
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/txn/TransactionBean.java b/groovy/modules/classic/src/test/groovy/txn/TransactionBean.java
deleted file mode 100644
index c06fc79..0000000
--- a/groovy/modules/classic/src/test/groovy/txn/TransactionBean.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package groovy.txn;
-
-import groovy.lang.Closure;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class TransactionBean {
-    private Closure run;
-    private Closure onError;
-    private Closure onSuccess;
-    
-    public Closure run() {
-        return run;
-    }
-    
-    public Closure onError() {
-        return onError;
-    }
-    
-    public Closure onSuccess() {
-        return onSuccess;
-    }
-    
-    public void run(Closure run) {
-        this.run = run;
-    }
-    
-    public void onError(Closure onError) {
-        this.onError = onError;
-    }
-    
-    public void onSuccess(Closure onSuccess) {
-        this.onSuccess = onSuccess;
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/txn/TransactionBuilder.java b/groovy/modules/classic/src/test/groovy/txn/TransactionBuilder.java
deleted file mode 100644
index c85406c..0000000
--- a/groovy/modules/classic/src/test/groovy/txn/TransactionBuilder.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package groovy.txn;
-
-import groovy.lang.Closure;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class TransactionBuilder {
-    public void transaction(Closure closure) {
-        TransactionBean bean = new TransactionBean();
-        closure.setDelegate(bean);
-        closure.call(this);
-        
-        // lets call the closures now
-        System.out.println("Performing normal transaction");
-        bean.run().call(this);
-        bean.onSuccess().call(this);
-        
-        System.out.println("Performing error transaction");
-        bean.run().call(this);
-        bean.onError().call(this);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/txn/TransactionTest.groovy b/groovy/modules/classic/src/test/groovy/txn/TransactionTest.groovy
deleted file mode 100644
index af2a5af..0000000
--- a/groovy/modules/classic/src/test/groovy/txn/TransactionTest.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-package groovy.txn
-
-class TransactionTest extends GroovyTestCase {
-
-    void testTxn() {
-		builder = new TransactionBuilder()
-		builder.transaction {
-		    run {
-		        println("run code!")
-		    }
-		    onError {
-                println("on error!")
-		    }
-		    onSuccess {
-                println("on success!")
-		    }
-		}
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/AntTest.groovy b/groovy/modules/classic/src/test/groovy/util/AntTest.groovy
deleted file mode 100644
index 55f4f50..0000000
--- a/groovy/modules/classic/src/test/groovy/util/AntTest.groovy
+++ /dev/null
@@ -1,112 +0,0 @@
-package groovy.util
-
-import java.io.File
-
-class AntTest extends GroovyTestCase {
-    
-    void testAnt() {
-        ant = new AntBuilder()
-
-        // lets just call one task
-        ant.echo("hello")
-        
-        // here"s an example of a block of Ant inside GroovyMarkup
-        ant.sequential {
-            echo("inside sequential")
-            
-            myDir = "target/AntTest/"
-            
-            mkdir(dir:myDir) 
-            copy(todir:myDir) {
-                fileset(dir:"src/test") {
-                    include(name:"**/*.groovy")
-                }
-            }
-            
-            echo("done")
-        }
-        
-        // now lets do some normal Groovy again
-        file = new File("target/AntTest/groovy/util/AntTest.groovy")
-        assert file.exists()
-    }
-    
-    void testFileIteration() {
-        ant = new AntBuilder()
-        
-        // lets create a scanner of filesets
-        scanner = ant.fileScanner {
-            fileset(dir:"src/test") {
-                include(name:"**/Ant*.groovy")
-            }
-        }
-        
-        // now lets iterate over 
-        found = false
-        for (f in scanner) {
-            println("Found file ${f}")
-            
-            found = true
-            
-            assert f instanceof File
-            assert f.name.endsWith(".groovy")
-        }
-        assert found
-    }
-    
-    void testJunitTask() {
-    	ant = new AntBuilder()
-        
-        ant.junit {
-        	test(name:'groovy.util.SomethingThatDoesNotExist')
-        }
-    }
-    
-    void testPathBuilding() {
-    	ant = new AntBuilder()
-        
-        value = ant.path {
-    		fileset(dir:"xdocs") {
-    			include(name:"*.wiki")
-    		}
-    	}
-    	
-    	assert value != null
-    	
-    	println "Found path of type ${value.class.name}"
-    	println value
-    }
-
-    void testTaskContainerAddTaskIsCalled() {
-        ant = new AntBuilder()
-        taskContainer = ant.parallel(){ // "Parallel" serves as a sample TaskContainer
-            ant.echo()                  // "Echo" without message to keep tests silent
-        }
-        // not very elegant, but the easiest way to get the ant internals...
-        assert taskContainer.dump() =~ 'nestedTasks=\\[org.apache.tools.ant.taskdefs.Echo@\\w+\\]'
-    }
-
-    void testTaskContainerExecutionSequence() {
-        ant = new AntBuilder()
-        SpoofTaskContainer.getSpoof().length = 0
-        PATH = 'task.path'
-        ant.path(id:PATH){ant.pathelement(location:'classes')}
-        ['spoofcontainer':'SpoofTaskContainer', 'spoof':'SpoofTask'].each{ |pair|
-            ant.taskdef(name:pair.key, classname:'groovy.util.'+pair.value, classpathref:PATH)
-        }
-        ant.spoofcontainer(){
-            ant.spoof()
-        }
-        expectedSpoof =
-            "SpoofTaskContainer ctor\n"+
-            "SpoofTask ctor\n"+
-            "in addTask\n"+
-            "begin SpoofTaskContainer execute\n"+
-            "begin SpoofTask execute\n"+
-            "end SpoofTask execute\n"+
-            "end SpoofTaskContainer execute\n"
-        assertEquals expectedSpoof, SpoofTaskContainer.getSpoof().toString()
-    }
-
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/BuilderSupportTest.groovy b/groovy/modules/classic/src/test/groovy/util/BuilderSupportTest.groovy
deleted file mode 100644
index d5b526a..0000000
--- a/groovy/modules/classic/src/test/groovy/util/BuilderSupportTest.groovy
+++ /dev/null
@@ -1,139 +0,0 @@
-package groovy.util
-
-import groovy.lang.MissingMethodException
-
-/**
-   Testing BuilderSupport and reveal how calling
-   methods on it result in implementation callbacks.
-   Using the SpoofBuilder (see below) to call it in various ways
-   and analyze the "spoofed" logs.
-   This is especially useful when designing subclasses of BuilderSupport.
-   @author Dierk Koenig
-**/
-
-
-class BuilderSupportTest extends GroovyTestCase{
-   void testSimpleNode() {
-      b = new SpoofBuilder()
-      assert b.log == []
-      node = b.foo()
-      assert b.log == ['create_with_name','foo','node_completed',null, node]
-   }
-
-   void testSimpleNodeWithValue() {
-      b = new SpoofBuilder()
-      node = b.foo('value')
-      assert b.log == ['create_with_name_and_value','foo','value', 'node_completed',null,node]
-   }
-
-   void testSimpleNodeWithOneAttribute() {
-      b = new SpoofBuilder()
-      node = b.foo(name:'value')
-      assert b.log == [
-         'create_with_name_and_map','foo', 'name','value', 'node_completed',null,'x']
-   }
-
-   void testSimpleNodeWithClosure() {
-      b = new SpoofBuilder()
-      b.foo(){
-         b.bar()
-      }
-      assert b.log == [
-         'create_with_name','foo',
-            'create_with_name','bar',
-         'set_parent', 'x', 'x',
-            'node_completed','x','x',
-         'node_completed',null,'x']
-   }
-
-   void testSimpleNodeWithOneAttributeAndValue() {
-      b = new SpoofBuilder()
-      node = b.foo(bar:'baz', 'value')
-      assert b.log == ['create_with_name_map_and_value', 'foo', 'bar', 'baz','value', 'node_completed',null,node]
-   }
-
-   void testSimpleNodeWithValueAndOneAttribute() {
-      b = new SpoofBuilder()
-      node = b.foo('value', bar:'baz')
-      assert b.log == ['create_with_name_map_and_value', 'foo', 'bar', 'baz','value', 'node_completed',null,node]
-   }
-
-   void testSimpleNodeWithOneAttributeAndValueAndClosure() {
-      b = new SpoofBuilder()
-      node = b.foo(bar:'baz', 'value') { 1 }
-      assert b.log == ['create_with_name_map_and_value', 'foo', 'bar', 'baz','value', 'node_completed',null,node]
-   }
-
-   void testSimpleNodeWithValueAndOneAttributeAndClosure() {
-      b = new SpoofBuilder()
-      node = b.foo('value', bar:'baz') { 1 }
-      assert b.log == ['create_with_name_map_and_value', 'foo', 'bar', 'baz','value', 'node_completed',null,node]
-   }
-
-   void testSimpleNodeTwoValues() {
-      b = new SpoofBuilder()
-      shouldFail(MissingMethodException, {node = b.foo('arg1', 'arg2')})
-   }
-
-   void testSimpleNodeTwoValuesClosure() {
-      b = new SpoofBuilder()
-      shouldFail(MissingMethodException, {node = b.foo('arg1', 'arg2') { 1 } })
-   }
-
-   void testSimpleNodeThreeValues() {
-      b = new SpoofBuilder()
-      shouldFail(MissingMethodException, {node = b.foo('arg1', 'arg2', 'arg3') })
-   }
-
-   void testSimpleNodeFourValues() {
-      b = new SpoofBuilder()
-      shouldFail(MissingMethodException, {node = b.foo('arg1', 'arg2', 'arg3', 'arg4') })
-   }
-   
-   void testNodeInClosureFourValues() {
-      b = new SpoofBuilder()
-      shouldFail(MissingMethodException, {node = b.foo() { b.baz('arg1', 'arg2', 'arg3', 'arg4') }})
-   }
-}
-
-/**
-   The SpoofBuilder is a sample instance of the abstract BuilderSupport class 
-   that does nothing but logging how it was called, returning 'x' for each node.
-**/
-class SpoofBuilder extends BuilderSupport{
-    log = []
-    protected void setParent(Object parent, Object child){
-        log << "set_parent"
-        log << parent
-        log << child
-    }
-    protected Object createNode(Object name){
-        log << 'create_with_name'
-        log <<  name
-        return 'x'
-    }
-    protected Object createNode(Object name, Object value){
-        log << 'create_with_name_and_value'
-        log << name
-        log << value
-        return 'x'
-    }
-    protected Object createNode(Object name, Map attributes){
-        log << 'create_with_name_and_map'
-        log << name
-        attributes.each{entry| log << entry.key; log << entry.value}
-        return 'x'
-    }
-    protected Object createNode(Object name, Map attributes, Object value){
-        log << 'create_with_name_map_and_value'
-        log << name
-        attributes.each{entry| log << entry.key; log << entry.value}
-        log << value
-        return 'x'
-    }
-    protected void nodeCompleted(Object parent, Object node) {
-        log << 'node_completed'
-        log << parent
-        log << node
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/Dummy.java b/groovy/modules/classic/src/test/groovy/util/Dummy.java
deleted file mode 100644
index 91e451c..0000000
--- a/groovy/modules/classic/src/test/groovy/util/Dummy.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package groovy.util;
-
-public class Dummy implements DummyMBean {
-
-    private String name = "James";
-    private String location = "London";
-    private int size = 12;
-
-    public Dummy() {
-    }
-    
-    public Dummy(String name, String location) {
-        this.name = name;
-        this.location = location;
-    }
-    
-    public void start() {
-        System.out.println("Started!");
-    }
-    
-    public void stop() {
-        System.out.println("Stopped!");
-    }
-    
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getSize() {
-        return size;
-    }
-
-    public void setSize(int size) {
-        this.size = size;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/DummyMBean.java b/groovy/modules/classic/src/test/groovy/util/DummyMBean.java
deleted file mode 100644
index f691285..0000000
--- a/groovy/modules/classic/src/test/groovy/util/DummyMBean.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package groovy.util;
-
-public interface DummyMBean {
-    public void start();
-    public void stop();
-    public String getLocation();
-    public void setLocation(String location);
-    public String getName();
-    public void setName(String name);
-    public int getSize();
-    public void setSize(int size);
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/util/EmptyScriptTest.java b/groovy/modules/classic/src/test/groovy/util/EmptyScriptTest.java
deleted file mode 100644
index 2f4a852..0000000
--- a/groovy/modules/classic/src/test/groovy/util/EmptyScriptTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.util;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class EmptyScriptTest extends TestSupport {
-
-    public void testEmptyScript() throws Exception {
-        assertScript("");
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/MBeanTest.java b/groovy/modules/classic/src/test/groovy/util/MBeanTest.java
deleted file mode 100644
index d18381d..0000000
--- a/groovy/modules/classic/src/test/groovy/util/MBeanTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.util;
-
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
-import javax.management.ObjectName;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * Tests using the GroovyObject API from Java to access MBeans via 
- * the normal properties API (to simulate normal Groovy property access)
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MBeanTest extends TestSupport {
-
-    public void testGetProperty() throws Exception {
-        MBeanServer mbeanServer = MBeanServerFactory.createMBeanServer();
-        ObjectName name = new ObjectName("groovy.test:role=TestMBean,type=Dummy");
-        mbeanServer.registerMBean(new Dummy(), name);
-
-        assertEquals("JMX value of Name", "James", mbeanServer.getAttribute(name, "Name"));
-
-        GroovyObject object = new GroovyMBean(mbeanServer, name);
-        
-        Object value = object.getProperty("Name");
-        assertEquals("Name property", "James", value);
-
-        object.setProperty("Name", "Bob");
-        assertEquals("Name property", "Bob", object.getProperty("Name"));
-        
-        // now lets look up the name via JMX to checki
-        assertEquals("JMX value of Name", "Bob", mbeanServer.getAttribute(name, "Name"));
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/NavToWiki.groovy b/groovy/modules/classic/src/test/groovy/util/NavToWiki.groovy
deleted file mode 100644
index c226c1b..0000000
--- a/groovy/modules/classic/src/test/groovy/util/NavToWiki.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-import groovy.util.XmlParser
-
-if (args.size() < 1) {
-    println "Usage: NavToWiki fileName"
-}
-else {
-    file = args[0]
-    println "About to parse ${file}"
-    doc = new XmlParser().parse(file)
-
-    println "
-QuickLinks page
--------------------------------
-
-
-"
-    links = doc.body.links.item
-    println links.collect {
-        return "{link:" + it['@name'] + "|" + it['@href'] + "}"
-    }.join(" | ")
-
-    println "
-
-
-
-Navigation page
--------------------------------
-
-
-"
-    menus = doc.body.menu
-    menus.each {
-        println "h3:${it['@name']}"
-
-        it.item.each {
-            println "- {link:" + it['@name'] + "|" + it['@href'] + "}"
-        }
-        println ""
-    }
-}
-
diff --git a/groovy/modules/classic/src/test/groovy/util/NodeTest.java b/groovy/modules/classic/src/test/groovy/util/NodeTest.java
deleted file mode 100644
index 182aeb3..0000000
--- a/groovy/modules/classic/src/test/groovy/util/NodeTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.util;
-
-
-import groovy.util.GroovyTestCase;
-import groovy.util.Node;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * Tests the use of the structured Attribute type
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class NodeTest extends GroovyTestCase {
-
-    public void testSimpleAttribute() {
-        Node attribute = new Node(null, "transactional");
-        assertEquals("name", "transactional", attribute.name());
-        assertEquals("attributes", 0, attribute.attributes().size());
-        assertEquals("value", 0, attribute.children().size());
-        assertEquals("text", "", attribute.text());
-
-        dump(attribute);
-    }
-
-    public void testAttributeWithAttributes() {
-        Map attributes = new HashMap();
-        attributes.put("a", "xyz");
-        
-        Node attribute = new Node(null, "foo", attributes);
-        assertEquals("name", "foo", attribute.name());
-        assertEquals("attributes", 1, attribute.attributes().size());
-        assertEquals("value", 0, attribute.children().size());
-        assertEquals("text", "", attribute.text());
-
-        dump(attribute);
-    }
-
-    public void testAttributeWithText() {
-        Node attribute = new Node(null, "foo", "the text");
-        assertEquals("name", "foo", attribute.name());
-        assertEquals("attributes", 0, attribute.attributes().size());
-        assertEquals("value", 1, attribute.children().size());
-        assertEquals("text", "the text", attribute.text());
-
-        dump(attribute);
-    }
-
-    public void testAttributeWithAttributesAndChildren() {
-        Map attributes = new HashMap();
-        attributes.put("a", "xyz");
-        
-        List children = new ArrayList();
-        children.add(new Node(null, "person", "James"));
-        children.add(new Node(null, "person", "Bob"));
-        children.add("someText");
-        
-        Node attribute = new Node(null, "foo", attributes, children);
-        assertEquals("name", "foo", attribute.name());
-        assertEquals("attributes", 1, attribute.attributes().size());
-        assertEquals("value", 3, attribute.children().size());
-        assertEquals("text", "someText", attribute.text());
-
-        dump(attribute);
-    }
-
-    public void testAttributeWithAttributesAndChildrenWithMixedText() {
-        Map attributes = new HashMap();
-        attributes.put("a", "xyz");
-        
-        List children = new ArrayList();
-        children.add("someText");
-        Node node1 = new Node(null, "person", "James");
-        children.add(node1);
-        children.add("moreText");
-        Node node2 = new Node(null, "person", "Bob");
-        children.add(node2);
-        children.add("moreText");
-        
-        Node attribute = new Node(null, "foo", attributes, children);
-        assertEquals("name", "foo", attribute.name());
-        assertEquals("attributes", 1, attribute.attributes().size());
-        assertEquals("value", 5, attribute.children().size());
-        assertEquals("text", "someTextmoreTextmoreText", attribute.text());
-        
-        
-        // lets test get
-        List list = (List) attribute.get("person");
-        assertEquals("Expected list size: " + list, 2, list.size());
-        
-        assertEquals("Node1", node1, list.get(0));
-        assertEquals("Node2", node2, list.get(1));
-
-        dump(attribute);
-    }
-
-    protected void dump(Node node) {
-        NodePrinter printer = new NodePrinter();
-        printer.print(node);
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/OrderByTest.groovy b/groovy/modules/classic/src/test/groovy/util/OrderByTest.groovy
deleted file mode 100644
index 117be92..0000000
--- a/groovy/modules/classic/src/test/groovy/util/OrderByTest.groovy
+++ /dev/null
@@ -1,54 +0,0 @@
-class OrderByTest extends GroovyTestCase {
-
-    void testSortByOneField() {
-        builder = new NodeBuilder()
-        tree = builder.people {
-            person(name:'James', cheese:'Edam', location:'London')
-            person(name:'Bob', cheese:'Cheddar', location:'Atlanta')
-            person(name:'Chris', cheese:'Red Leicester', location:'London')
-            person(name:'Joe', cheese:'Brie', location:'London')
-        }
-        
-        people = tree.children()
-        
-        /** @todo parser should allow this syntax sugar
-        order = new OrderBy { it.get('@cheese') }
-        */
-        order = new OrderBy( { it.get('@cheese') } )
-        sorted = people.sort(order)
-        
-        assert sorted.get(0).get('@name') == 'Joe'
-        assert sorted.get(1).get('@name') == 'Bob'
-        assert sorted.get(2).get('@name') == 'James'
-        assert sorted.get(3).get('@name') == 'Chris'
-        
-        order = new OrderBy( { it.get('@name') } )
-        sorted = people.sort(order)
-        
-        assert sorted.get(0).get('@name') == 'Bob'
-        assert sorted.get(1).get('@name') == 'Chris'
-        assert sorted.get(2).get('@name') == 'James'
-        assert sorted.get(3).get('@name') == 'Joe'
-    }
-
-
-    void testSortByMultipleFields() {
-        builder = new NodeBuilder()
-        tree = builder.people {
-            person(name:'James', cheese:'Edam', location:'London')
-            person(name:'Bob', cheese:'Cheddar', location:'Atlanta')
-            person(name:'Chris', cheese:'Red Leicester', location:'London')
-            person(name:'Joe', cheese:'Brie', location:'London')
-        }
-        
-        people = tree.children()
-
-        order = new OrderBy([ { it.get('@location') }, { it.get('@cheese') } ])
-        sorted = people.sort(order)
-        
-        assert sorted.get(0).get('@name') == 'Bob'
-        assert sorted.get(1).get('@name') == 'Joe'
-        assert sorted.get(2).get('@name') == 'James'
-        assert sorted.get(3).get('@name') == 'Chris'
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/SpoofTask.java b/groovy/modules/classic/src/test/groovy/util/SpoofTask.java
deleted file mode 100644
index 66ea4c3..0000000
--- a/groovy/modules/classic/src/test/groovy/util/SpoofTask.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.util;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.Task;
-
-public class SpoofTask extends Task {
-
-    public SpoofTask() {
-        super();
-        SpoofTaskContainer.spoof("SpoofTask ctor");
-    }
-
-    public void execute() throws BuildException {
-        SpoofTaskContainer.spoof("begin SpoofTask execute");
-        SpoofTaskContainer.spoof("end SpoofTask execute");
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/SpoofTaskContainer.java b/groovy/modules/classic/src/test/groovy/util/SpoofTaskContainer.java
deleted file mode 100644
index abadcee..0000000
--- a/groovy/modules/classic/src/test/groovy/util/SpoofTaskContainer.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package groovy.util;
-
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.TaskContainer;
-import org.apache.tools.ant.UnknownElement;
-import org.apache.tools.ant.BuildException;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-
-public class SpoofTaskContainer extends Task implements TaskContainer {
-    private List tasks = new ArrayList();
-    static StringBuffer spoof = new StringBuffer();
-
-    public SpoofTaskContainer() {
-        super();
-        spoof("SpoofTaskContainer ctor");
-    }
-
-    static StringBuffer getSpoof(){
-        return spoof;
-    }
-
-    static void spoof(String message){
-        spoof.append(message);
-        spoof.append("\n");
-    }
-
-    public void addTask(Task task) {
-    	// to work with ant 1.6
-        spoof("in addTask");
-        if (task instanceof UnknownElement) {
-            task.maybeConfigure();
-            task = ((UnknownElement) task).getTask();
-        }
-        tasks.add(task);
-    }
-
-    public void execute() throws BuildException {
-        spoof("begin SpoofTaskContainer execute");
-        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
-            Task task = (Task) iter.next();
-            task.perform();
-        }
-        spoof("end SpoofTaskContainer execute");
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/XmlParserTest.groovy b/groovy/modules/classic/src/test/groovy/util/XmlParserTest.groovy
deleted file mode 100644
index f2f0351..0000000
--- a/groovy/modules/classic/src/test/groovy/util/XmlParserTest.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-package groovy.util
-
-class XmlParserTest extends GroovyTestCase {
-    
-    void testXmlParser() {
-        text = """
-<characters>
-    <character id="1" name="Wallace">
-    	<likes>cheese</likes>
-    </character>
-    <character id="2" name="Gromit">
-	    <likes>sleep</likes>
-    </character>
-</characters>
-"""
-        
-        node = new XmlParser().parseText(text);
-        
-        assert node != null
-        assert node.children().size() == 2 : "Children ${node.children()}"
-        
-        characters = node.character
-        
-        for (c in characters) {
-            println c['@name']
-        }
-        
-        assert characters.size() == 2
-        
-        assert node.character.likes.size() == 2 : "Likes ${node.character.likes}"
-        
-        // lets find Gromit
-        gromit = node.character.find { it['@id'] == '2' }
-        assert gromit != null : "Should have found Gromit!"
-        assert gromit['@name'] == "Gromit"
-        
-        
-        // lets find what Wallace likes in 1 query
-        answer = node.character.find { it['@id'] == '1' }.likes[0].text()
-        assert answer == "cheese"
-    }
-    
-    void testMixedMarkup() {
-        text = <<<EOF
-<p>Please read the <a href="index.html">Home</a> page</p>
-EOF
-        
-        node = new XmlParser().parseText(text)
-        
-        new NodePrinter().print(node)
-        
-        assert node != null
-        children = node.children()
-        assert children.size() == 3 : "Children ${children}"
-        assert children[0] instanceof String
-        assert children[1] instanceof Node
-        assert children[2] instanceof String
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/util/XmlSlurperTest.groovy b/groovy/modules/classic/src/test/groovy/util/XmlSlurperTest.groovy
deleted file mode 100644
index c131035..0000000
--- a/groovy/modules/classic/src/test/groovy/util/XmlSlurperTest.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.codehaus.groovy.sandbox.util
-
-class XmlSlurperTest extends GroovyTestCase {
-    
-    void testXmlParser() {
-        text = """
-<characters>
-    <character id="1" name="Wallace">
-    	<likes>cheese</likes>
-    </character>
-    <character id="2" name="Gromit">
-	    <likes>sleep</likes>
-    </character>
-</characters>
-"""
-        
-        node = new XmlSlurper().parseText(text);
-        
-        assert node != null
-        assert node.children().size() == 2 : "Children ${node.children()}"
-        
-        characters = node.character
-        
-        for (c in characters) {
-            println c['@name']
-        }
-        
-        assert characters.size() == 2
-        
-        assert node.character.likes.size() == 2 : "Likes ${node.character.likes}"
-        
-        // lets find Gromit
-        gromit = node.character.find { it['@id'] == '2' }
-        assert gromit != null : "Should have found Gromit!"
-        assert gromit['@name'] == "Gromit"
-        
-        
-        // lets find what Wallace likes in 1 query
-        answer = node.character.find { it['@id'] == '1' }.likes[0].text()
-        assert answer == "cheese"
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/xml/DOMTest.groovy b/groovy/modules/classic/src/test/groovy/xml/DOMTest.groovy
deleted file mode 100644
index 81cb83a..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/DOMTest.groovy
+++ /dev/null
@@ -1,81 +0,0 @@
-package groovy.xml
-
-/**
- * This test uses the concise syntax to test the building of 
- * W3C DOM trees using GroovyMarkup
- */
-class DOMTest extends TestXmlSupport {
-    
-    void testSmallTree() {
-        b = DOMBuilder.newInstance()
-        
-        root = b.root1(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(x:7)
-        }
-        
-        assert root != null
-        
-        dump(root)
-    }
-    
-    void testTree() {
-        b = DOMBuilder.newInstance()
-        
-        root = b.root2(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(x:'abc', y:'def') {
-                child(z:'def')
-                child2()  
-            }
-            
-            nestedElem2(z:'zzz') {
-                child(z:'def')
-                child2("hello")  
-            }
-        }
-        
-        assert root != null
-        
-        dump(root)
-
-/*
-		elem1 = root.elem1
-        assert elem1.value() := 'hello1'
-        
-        elem2 = root.elem2
-        assert elem2.value() := 'hello2'
-
-        assert root.elem1.value() := 'hello1'
-        assert root.elem2.value() := 'hello2'
-
-        assert root.nestedElem.attributes() := ['x':'abc', 'y':'def']        
-        assert root.nestedElem.child.attributes() := ['z':'def']
-        assert root.nestedElem.child2.value() := []
-        assert root.nestedElem.child2.text() := ''
-
-        assert root.nestedElem2.attributes() := ['z':'zzz']      
-        assert root.nestedElem2.child.attributes() := ['z':'def']
-        assert root.nestedElem2.child2.value() := 'hello'
-        assert root.nestedElem2.child2.text() := 'hello'
-        
-        list = root.value()
-        assert list.size() := 4
-        
-        assert root.attributes().a := 5
-        assert root.attributes().b := 7
-
-        assert root.nestedElem.attributes().x := 'abc'
-        assert root.nestedElem.attributes().y := 'def'
-        assert root.nestedElem2.attributes().z := 'zzz'
-        assert root.nestedElem2.child.attributes().z := 'def'
-*/        
-        /** @todo parser add .@ as an operation
-                assert root.@a := 5
-                assert root.@b := 7
-        */        
-    }
-    
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/MarkupTest.groovy b/groovy/modules/classic/src/test/groovy/xml/MarkupTest.groovy
deleted file mode 100644
index 5f55099..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/MarkupTest.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-package groovy.xml
-
-/**
- * This test uses the concise syntax to test the building of 
- * textual markup (XML or HTML) using GroovyMarkup
- */
-class MarkupTest extends TestXmlSupport {
-    
-    void testSmallTree() {
-        b = new MarkupBuilder()
-        
-        b.root1(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(x:7)
-        }
-    }
-    
-    void testTree() {
-        b = new MarkupBuilder()
-        
-        b.root2(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(x:'abc', y:'def') {
-                child(z:'def')
-                child2()  
-            }
-            
-            nestedElem2(z:'zzz') {
-                child(z:'def')
-                child2("hello")  
-            }
-        }
-    }
-
-    void testContentAndDataInMarkup() {
-        b = new MarkupBuilder()
-
-        b.a(href:"http://groovy.codehaus.org", "groovy")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/MarkupWithWriterTest.groovy b/groovy/modules/classic/src/test/groovy/xml/MarkupWithWriterTest.groovy
deleted file mode 100644
index 93ad0e3..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/MarkupWithWriterTest.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-package groovy.xml
-
-/**
- * This test uses GroovyMarkup with writers other than System.out
- */
-class MarkupWithWriterTest extends TestXmlSupport {
-
-    void testSmallTreeWithStringWriter() {
-        writer = new java.io.StringWriter()
-        b = new MarkupBuilder(writer)
-
-        b.root1(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(x:7)
-        }
-        println writer.toString()
-//        assertEquals "<root1 a='5' b='7'>\n" +
-//                "  <elem1>hello1</elem1>\n" +
-//                "  <elem2>hello2</elem2>\n" +
-//                "  <elem3 x='7' />\n" +
-//                "</root1>", writer.toString()
-    }
-
-    void testWriterUseInScriptFile() {
-        assertScriptFile 'src/test/groovy/xml/UseMarkupWithWriterScript.groovy'
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/NamespaceDOMTest.groovy b/groovy/modules/classic/src/test/groovy/xml/NamespaceDOMTest.groovy
deleted file mode 100644
index 18eb0e5..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/NamespaceDOMTest.groovy
+++ /dev/null
@@ -1,73 +0,0 @@
-package groovy.xml
-
-/**
- * Test the building of namespaced XML using GroovyMarkup
- */
-class NamespaceDOMTest extends TestXmlSupport {
-    
-    void testTree() {
-        builder = DOMBuilder.newInstance()
-        xmlns = new NamespaceBuilder(builder)
-        
-        xsd = xmlns.namespace('http://www.w3.org/2001/XMLSchema', 'xsd')
-        
-        root = xsd.schema(xmlns:['foo':'http://someOtherNamespace']) {
-          annotation {
-              documentation("Purchase order schema for Example.com.")
-              //documentation(xmlns=[xml.lang:'en']) ["Purchase order schema for Example.com."]
-          }
-          element(name:'purchaseOrder', type:'PurchaseOrderType')
-          element(name:'comment', type:'xsd:string')
-          complexType(name:'PurchaseOrderType') {
-            sequence {
-              element(name:'shipTo', type:'USAddress')
-              element(name:'billTo', type:'USAddress')
-              element(minOccurs:'0', ref:'comment')
-              element(name:'items', type:'Items')
-            }
-            attribute(name:'orderDate', type:'xsd:date')
-          }
-          complexType(name:'USAddress') {
-            sequence {
-              element(name:'name', type:'xsd:string')
-              element(name:'street', type:'xsd:string')
-              element(name:'city', type:'xsd:string')
-              element(name:'state', type:'xsd:string')
-              element(name:'zip', type:'xsd:decimal')
-            }
-            attribute(fixed:'US', name:'country', type:'xsd:NMTOKEN')
-          }
-          complexType(name:'Items') {
-            sequence {
-              element(maxOccurs:'unbounded', minOccurs:'0', name:'item') {
-                complexType {
-                  sequence {
-                    element(name:'productName', type:'xsd:string')
-                    element(name:'quantity') {
-                      simpleType {
-                        restriction(base:'xsd:positiveInteger') {
-                          maxExclusive(value:'100')
-                        }
-                      }
-                    }
-                    element(name:'USPrice', type:'xsd:decimal')
-                    element(minOccurs:'0', ref:'comment')
-                    element(minOccurs:'0', name:'shipDate', type:'xsd:date')
-                  }
-                  attribute(name:'partNum', type:'SKU', use:'required')
-                }
-              }
-            }
-          }
-          /* Stock Keeping Unit, a code for identifying products */
-          simpleType(name:'SKU') {
-            restriction(base:'xsd:string') {
-              pattern(value:'\d{3}-[A-Z]{2}')
-            }
-          }
-        }        
-        assert root != null
-        
-        dump(root)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/SAXTest.groovy b/groovy/modules/classic/src/test/groovy/xml/SAXTest.groovy
deleted file mode 100644
index c0dfa86..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/SAXTest.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.xml
-
-/**
- * This test uses the concise syntax to test the generation
- * of SAX events using GroovyMarkup
- */
-class SAXTest extends TestXmlSupport {
-    
-    void testSmallTree() {
-        b = createSAXBuilder()
-        
-        root = b.root1(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            elem3(x:7)
-        }
-    }
-    
-    void testTree() {
-        b = createSAXBuilder()
-        
-        root = b.root2(a:5, b:7) {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(x:'abc', y:'def') {
-                child(z:'def')
-                child2()  
-            }
-            
-            nestedElem2(z:'zzz') {
-                child(z:'def')
-                child2("hello")  
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/SmallNamespaceDOMTest.groovy b/groovy/modules/classic/src/test/groovy/xml/SmallNamespaceDOMTest.groovy
deleted file mode 100644
index c5bc554..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/SmallNamespaceDOMTest.groovy
+++ /dev/null
@@ -1,26 +0,0 @@
-package groovy.xml
-
-class SmallNamespaceDOMTest extends TestXmlSupport {
-    
-    void testTree() {
-        builder = DOMBuilder.newInstance()
-        xsd = new Namespace(builder, 'http://www.w3.org/2001/XMLSchema', 'xsd')
-        
-        root = xsd.schema() {
-          element(name:'purchaseOrder', type:'PurchaseOrderType')
-          element(name:'comment', type:'xsd:string')
-          complexType(name:'PurchaseOrderType') {
-            sequence {
-              element(name:'shipTo', type:'USAddress')
-              element(name:'billTo', type:'USAddress')
-              element(minOccurs:'0', ref:'comment')
-              element(name:'items', type:'Items')
-            }
-            attribute(name:'orderDate', type:'xsd:date')
-          }
-        }        
-        assert root != null
-        
-        dump(root)
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/xml/StreamingMarkupTest.groovy b/groovy/modules/classic/src/test/groovy/xml/StreamingMarkupTest.groovy
deleted file mode 100644
index 769b349..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/StreamingMarkupTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.codehaus.groovy.sandbox.markup
-
-/**
- * This test uses the concise syntax to test the building of 
- * textual markup (XML or HTML) using GroovyMarkup
- */
-class StreamingMarkupTest extends groovy.xml.TestXmlSupport {
-    
-    void testSmallTree() {
-        b = new StreamingMarkupBuilder()
-        
-        m = {
-		        root1(a:5, b:7) {
-		            elem1('hello1')
-		            elem2('hello2')
-		            elem3(x:7)
-		        }
-		     }
-		     
-		System.out << b.bind m
-    }
-    
-    void testTree() {
-        b = new StreamingMarkupBuilder()
-        
-        m = {
-		        root2(a:5, b:7) {
-		            elem1('hello1')
-		            elem2('hello2')
-		            nestedElem(x:'abc', y:'def') {
-		                child(z:'def')
-		                child2()  
-		            }
-		            
-		            nestedElem2(z:'zzz') {
-		                child(z:'def')
-		                child2("hello")  
-		            }
-		        }
-	        }
- 		     
-		System.out << b.bind m
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/TestXmlSupport.java b/groovy/modules/classic/src/test/groovy/xml/TestXmlSupport.java
deleted file mode 100644
index cfb771f..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/TestXmlSupport.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-$Id$
-
-Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-statements and notices.  Redistributions must also contain a
-copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-products derived from this Software without prior written
-permission of The Codehaus.  For written permission,
-please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-nor may "groovy" appear in their names without prior written
-permission of The Codehaus. "groovy" is a registered
-trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.xml;
-
-import org.apache.xml.serialize.XMLSerializer;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import java.io.IOException;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public abstract class TestXmlSupport extends TestSupport {
-
-    protected void dump(Node node) throws IOException {
-        XMLSerializer printer = createSerializer();
-        if (node instanceof Document) {
-            printer.serialize((Document) node);
-        }
-        else {
-            printer.serialize((Element) node);
-        }
-        System.out.println();
-    }
-
-    protected XMLSerializer createSerializer() {
-        return new XMLSerializer(System.out, null);
-    }
-
-    protected SAXBuilder createSAXBuilder() throws IOException {
-        return new SAXBuilder(createSerializer().asContentHandler());
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/xml/UseMarkupWithWriterScript.groovy b/groovy/modules/classic/src/test/groovy/xml/UseMarkupWithWriterScript.groovy
deleted file mode 100644
index 5d01a94..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/UseMarkupWithWriterScript.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-// used by MarkupWithWriterTest.testWriterUseInScriptFile
-
-writer = new java.io.StringWriter()
-b = new groovy.xml.MarkupBuilder(writer)
-
-b.root1(a:5)
-println writer.toString()
-assert "<root1 a='5' />" == writer.toString()
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/groovy/xml/VerboseDOMTest.groovy b/groovy/modules/classic/src/test/groovy/xml/VerboseDOMTest.groovy
deleted file mode 100644
index 5150875..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/VerboseDOMTest.groovy
+++ /dev/null
@@ -1,83 +0,0 @@
-package groovy.xml
-
-/**
- * This test uses the verbose syntax to test the building of 
- * W3C DOM trees using GroovyMarkup
- */
-class VerboseDOMTest extends TestXmlSupport {
-    
-    property b
-
-    void testSmallTree() {
-        b = DOMBuilder.newInstance()
-        
-        root = b.root1(['a':5, 'b':7], {||
-            elem1('hello1')
-            elem2('hello2')
-            elem3(['x':7])
-        })
-        
-        assert root != null
-        
-        dump(root)
-    }
-    
-    void testTree() {
-        b = DOMBuilder.newInstance()
-        
-        root = b.root2(['a':5, 'b':7], {
-            elem1('hello1')
-            elem2('hello2')
-            nestedElem(['x':'abc', 'y':'def'], {||
-                child(['z':'def'])
-                child2()  
-            })
-            
-            nestedElem2(['z':'zzz'], {||
-                child(['z':'def'])
-                child2("hello")  
-            })
-        })
-        
-        assert root != null
-        
-        dump(root)
-
-/*
-		elem1 = root.elem1
-        assert elem1.value() := 'hello1'
-        
-        elem2 = root.elem2
-        assert elem2.value() := 'hello2'
-
-        assert root.elem1.value() := 'hello1'
-        assert root.elem2.value() := 'hello2'
-
-        assert root.nestedElem.attributes() := ['x':'abc', 'y':'def']        
-        assert root.nestedElem.child.attributes() := ['z':'def']
-        assert root.nestedElem.child2.value() := []
-        assert root.nestedElem.child2.text() := ''
-
-        assert root.nestedElem2.attributes() := ['z':'zzz']      
-        assert root.nestedElem2.child.attributes() := ['z':'def']
-        assert root.nestedElem2.child2.value() := 'hello'
-        assert root.nestedElem2.child2.text() := 'hello'
-        
-        list = root.value()
-        assert list.size() := 4
-        
-        assert root.attributes().a := 5
-        assert root.attributes().b := 7
-
-        assert root.nestedElem.attributes().x := 'abc'
-        assert root.nestedElem.attributes().y := 'def'
-        assert root.nestedElem2.attributes().z := 'zzz'
-        assert root.nestedElem2.child.attributes().z := 'def'
-*/        
-        /** @todo parser add .@ as an operation
-                assert root.@a := 5
-                assert root.@b := 7
-        */        
-    }
-    
-}
diff --git a/groovy/modules/classic/src/test/groovy/xml/XmlTest.java b/groovy/modules/classic/src/test/groovy/xml/XmlTest.java
deleted file mode 100644
index f08e600..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/XmlTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.xml;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class XmlTest extends TestSupport {
-
-    public void testTree() throws Exception {
-        GroovyObject object = compile("src/test/groovy/xml/SmallNamespaceDOMTest.groovy");
-        object.invokeMethod("testTree", null);
-    }
-}
diff --git a/groovy/modules/classic/src/test/groovy/xml/dom/DOMTest.groovy b/groovy/modules/classic/src/test/groovy/xml/dom/DOMTest.groovy
deleted file mode 100644
index ea4d1df..0000000
--- a/groovy/modules/classic/src/test/groovy/xml/dom/DOMTest.groovy
+++ /dev/null
@@ -1,86 +0,0 @@
-package groovy.xml.dom;
-
-import java.io.*;
-import groovy.xml.*;
-import org.codehaus.groovy.sandbox.markup.*;
-import org.codehaus.groovy.tools.xml.*;
-
-class DOMTest extends GroovyTestCase {
-
-  benchmark = false;
-
-  void testDOMParser() {
-    xml = new StringReader("<html><head><title class='mytitle'>Test</title></head><body><p class='mystyle'>This is a test.</p></body></html>");
-    doc = DOMBuilder.parse(xml);
-    html = doc.documentElement;
-    
-    if (!benchmark) { assertCorrect html }
-  }
-
-  void testDOMBuilder() {
-    html = DOMBuilder.newInstance().
-        
-    html {
-      head {
-		title (class:"mytitle", "Test")
-      }
-      body {
-		p (class:"mystyle", "This is a test.")
-      }
-    }
-
-    if (!benchmark) { assertCorrect html }
-  }
-
-  void testStreamingDOMBuilder() {
-
-    doc = new StreamingDOMBuilder().bind {
-      html {
-        head {
-		  title (class:"mytitle", "Test")
-        }
-        body {
-		  p (class:"mystyle", "This is a test.")
-        }
-      }
-	}()
-
-    if (!benchmark) { assertCorrect doc.documentElement }
-  }
-  void assertCorrect(html) {
-    use (groovy.xml.dom.DOMCategory) {
-	  assert html.head.title.textContent == "Test";
-    	  assert html.body.p.textContent == "This is a test.";
-      assert html.find { it.tagName == "body" }.tagName == "body";
-      assert html.getElementsByTagName("*").findAll { if (it["@class"] != "") { return it } }.size() == 2;
-    }
-    shouldFail (MissingPropertyException) { html.head };
-  }
-  
-  static void main(args) {
-  	// Relative results:
-  	// Test       5th May 2004
-  	// Parser:    1.0
-  	// Builder:   1.05
-  	// Streaming: 0.77
-  	x = args.size() == 0 ? 1000 : Integer.parseInt(args[0]);
-  	mydomtest = new DOMTest();
-  	standard = 0;
-  	mydomtest.benchmark = true;
-  	[mydomtest.testDOMParser, mydomtest.testDOMBuilder, mydomtest.testStreamingDOMBuilder].each {
-  		// Run the method once to fill any caches and to load classes
-  		it();
-	  	start = System.currentTimeMillis();
-  		for (i in 1..x) {
-  			it();
-	  	}
-  		elapsed = System.currentTimeMillis() - start;
-  		result = i * 1000 / elapsed;
-
-		standard = (standard == 0 ? result : standard);  		
-		factor = result/standard;
-  		
-	  	println "${it.method}: ${factor}x (${result} trees/s)";
-	}
-  }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ClassNodeTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ClassNodeTest.java
deleted file mode 100644
index 43f8439..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ClassNodeTest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.ast;
-
-import org.objectweb.asm.Constants;
-
-import junit.framework.TestCase;
-
-/**
- * Tests the ClassNode
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ClassNodeTest extends TestCase implements Constants {
-
-    ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-    ClassNode innerClassNode = new InnerClassNode(classNode, "Foo$1", ACC_PUBLIC, "java.lang.Object");
-
-    protected void setUp() throws Exception {
-        classNode.addField("field", ACC_PUBLIC, "java.lang.String", null);
-    }
-
-    public void testOuterClass() {
-        assertNull(classNode.getOuterClass());
-        assertNotNull(innerClassNode.getOuterClass());
-    }
-
-    public void testOuterField() {
-        assertNull(classNode.getOuterField("field"));
-        assertNotNull(innerClassNode.getOuterField("field"));
-    }
-    
-    public void testPackageName() {
-        assertEquals("Package", null, classNode.getPackageName());
-        
-        ClassNode packageNode = new ClassNode("com.acme.Foo", ACC_PUBLIC, "java.lang.Object");
-        assertEquals("Package", "com.acme", packageNode.getPackageName());
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ModuleNodeTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ModuleNodeTest.java
deleted file mode 100644
index d4beb40..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/ast/ModuleNodeTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.ast;
-
-import java.util.List;
-
-import org.codehaus.groovy.syntax.parser.TestParserSupport;
-
-/**
- * Tests the ClassNode
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ModuleNodeTest extends TestParserSupport {
-
-    public void testStatementClass() throws Exception {
-        ModuleNode module = parse("x = [1, 2, 3]; println(x)", "Cheese.groovy");
-        
-        assertTrue("Should have statements", ! module.getStatementBlock().isEmpty());
-        
-        List classes = module.getClasses();
-        assertEquals("Number of classes", 1, classes.size());
-        
-        ClassNode classNode = (ClassNode) classes.get(0);
-        
-        assertEquals("Class name", "Cheese", classNode.getName());
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/BSFTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/BSFTest.java
deleted file mode 100644
index eda0f89..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/BSFTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.bsf;
-
-import java.io.File;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.bsf.BSFManager;
-import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-
-/**
- * Tests the BSF integration
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class BSFTest extends TestCase {
-
-    protected BSFManager manager;
-
-    protected void setUp() throws Exception {
-        // lets manually register Groovy until its part of the BSF distro
-        BSFManager.registerScriptingEngine("groovy", GroovyEngine.class.getName(), new String[] { "groovy", "gy" });
-
-        manager = new BSFManager();
-    }
-
-    public void testExec() throws Exception {
-        manager.exec(
-            "groovy",
-            "Test1.groovy",
-            0,
-            0,
-            "println('testing Exec'); assert bsf != null : 'should have a bsf variable'");
-    }
-
-    public void testBracketName() throws Exception {
-        manager.exec(
-            "groovy",
-            "Test1<groovy>",
-            0,
-            0,
-            "println('testing Exec'); assert bsf != null : 'should have a bsf variable'");
-    }
-
-    public void testEval() throws Exception {
-        Object answer = manager.eval("groovy", "Test1.groovy", 0, 0, "println('testing Eval')\n  return [1, 2, 3]");
-
-        assertTrue("Should return a list: " + answer, answer instanceof List);
-        List list = (List) answer;
-        assertEquals("List should be of right size", 3, list.size());
-
-        System.out.println("The eval returned the value: " + list);
-    }
-
-    public void testTwoEvalsWithSameName() throws Exception {
-        Object answer = manager.eval("groovy", "Test1.groovy", 0, 0, "println('first line')\n  return 'cheese'");
-        assertEquals("cheese", answer);
-
-        answer = manager.eval("groovy", "Test1.groovy", 0, 0, "println('second line')\n  return 'gromit'");
-        assertEquals("gromit", answer);
-    }
-
-    public void testExecBug() throws Exception {
-        for (int i = 0; i < 10; i++) {
-            manager.exec("groovy", "Test1.groovy", 0, 0, "println('testing Exec')");
-
-            manager.exec("groovy", "Test1.groovy", 0, 0, "println('testing Exec')");
-        }
-    }
-
-    public void testBsfVariables() throws Exception {
-        Object answer =
-            manager.eval(
-                "groovy",
-                "Test1.groovy",
-                0,
-                0,
-                "println('testing variables')\n  assert this.bsf != null\n  return this.bsf");
-        assertTrue("Should have an answer", answer != null);
-    }
-
-    public void testVariables() throws Exception {
-        manager.registerBean("x", new Integer(4));
-
-        Object answer =
-            manager.eval(
-                "groovy",
-                "Test1.groovy",
-                0,
-                0,
-                "valueOfX = this.bsf.lookupBean('x'); assert valueOfX == 4; valueOfX + 1");
-        assertEquals("Incorrect return", new Integer(5), answer);
-    }
-    
-    public void testExecFile() throws Exception {
-        execScript("src/test/groovy/script/MapFromList.groovy");
-        execScript("src/test/groovy/script/AtomTestScript.groovy");
-    }
-
-    protected void execScript(String fileName) throws Exception {
-        System.out.println("Executing script: " + fileName);
-        manager.exec("groovy", fileName, 0, 0, DefaultGroovyMethods.getText(new File(fileName)));
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/CacheBSFTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/CacheBSFTest.java
deleted file mode 100644
index e74be6b..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/bsf/CacheBSFTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-package org.codehaus.groovy.bsf;
-
-import java.util.List;
-
-import junit.framework.TestCase;
-
-import org.apache.bsf.BSFManager;
-
-/**
- * Tests the Caching BSF integration
- * 
- * @author James Birchfield
- * @version $Revision$
- */
-public class CacheBSFTest extends TestCase {
-
-    protected BSFManager manager;
-
-    protected void setUp() throws Exception {
-        // lets manually register Groovy until its part of the BSF distro
-        BSFManager.registerScriptingEngine(
-            "groovy",
-            CachingGroovyEngine.class.getName(),
-            new String[] { "groovy", "gy" });
-
-        manager = new BSFManager();
-    }
-
-    public void testExec() throws Exception {
-        manager.exec("groovy", "Test1.groovy", 0, 0, "println('testing Exec')");
-        //nothing to really test here...just looking for debug that says it
-        // used cache version
-        manager.exec("groovy", "Test1.groovy", 0, 0, "println('testing Exec')");
-    }
-
-    public void testEval() throws Exception {
-        Object answer = manager.eval("groovy", "Test1.groovy", 0, 0, "println('testing Eval')\n  return [1, 2, 3]");
-        // nothing to really test here...just looking for debug that says it
-        // used cache version
-        answer = manager.eval("groovy", "Test.groovy", 0, 0, "println('testing Eval')\n  return [1, 2, 3]");
-
-        assertTrue("Should return a list: " + answer, answer instanceof List);
-        List list = (List) answer;
-        assertEquals("List should be of right size", 3, list.size());
-
-        System.out.println("The eval returned the value: " + list);
-    }
-
-    public void testBsfVariables() throws Exception {
-        Object answer =
-            manager.eval(
-                "groovy",
-                "Test1.groovy",
-                0,
-                0,
-                "println('testing variables')\n  assert this.bsf != null\n  return this.bsf");
-        assertTrue("Should have an answer", answer != null);
-    }
-
-    public void testVariables() throws Exception {
-        manager.registerBean("x", new Integer(4));
-
-        Object answer =
-            manager.eval(
-                "groovy",
-                "Test1.groovy",
-                0,
-                0,
-                "valueOfX = this.bsf.lookupBean('x'); assert valueOfX == 4; valueOfX + 1");
-        // nothing to really test here...just looking for debug that says it
-        // used cache version
-        answer =
-            manager.eval(
-                "groovy",
-                "Test2.groovy",
-                0,
-                0,
-                "valueOfX = this.bsf.lookupBean('x'); assert valueOfX == 4; valueOfX + 1");
-        assertEquals("Incorrect return", new Integer(5), answer);
-    }
-
-    public void testDeclaredVariables() throws Exception {
-        manager.declareBean("foo", new Integer(5), Integer.class);
-
-        Object answer = manager.eval("groovy", "Test1.groovy", 0, 0, "valueOfFoo = foo; return valueOfFoo");
-
-        assertEquals(new Integer(5), answer);
-
-        manager.declareBean("foo", new Integer(6), Integer.class);
-
-        answer = manager.eval("groovy", "Test2.groovy", 0, 0, "valueOfFoo = foo; return valueOfFoo");
-        assertEquals(new Integer(6), answer);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/BytecodeHelperTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/BytecodeHelperTest.java
deleted file mode 100644
index 3e36759..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/BytecodeHelperTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class BytecodeHelperTest extends GroovyTestCase {
-
-    public void testTypeName() {
-        assertEquals("[C", BytecodeHelper.getTypeDescription("char[]"));
-    }
-
-    public void testMethodDescriptor() {
-        String answer = BytecodeHelper.getMethodDescriptor(char[].class, new Class[0]);
-        assertEquals("()[C", answer);
-
-        answer = BytecodeHelper.getMethodDescriptor(int.class, new Class[] { long.class });
-        assertEquals("(J)I", answer);
-
-        answer = BytecodeHelper.getMethodDescriptor(String[].class, new Class[] { String.class, int.class });
-        assertEquals("(Ljava/lang/String;I)[Ljava/lang/String;", answer);
-       }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CallClosureFieldAsMethodTest.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CallClosureFieldAsMethodTest.groovy
deleted file mode 100644
index 7f9a07e..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CallClosureFieldAsMethodTest.groovy
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.codehaus.groovy.classgen
-
-import groovy.util.GroovyTestCase
-
-/**
- * @author Guillaume Laforge
- */
-class CallClosureFieldAsMethodTest extends GroovyTestCase {
-
-    String firstname = "Guillaume"
-    closureMethod = { |greeting| "${greeting} ${firstname}" }
-
-    /**
-     * Check that we can call a closure defined as a field as if it were a normal method
-     */
-    void testCallToClosureAsMethod() {
-
-        obj = new CallClosureFieldAsMethodTest()
-
-        assert obj.closureMethod("Hello") == "Hello Guillaume"
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java
deleted file mode 100644
index feaed42..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class CapitalizeTest extends GroovyTestCase {
-
-    public void testCapitalize() {
-        assertEquals("Foo", Verifier.capitalize("foo"));
-        assertEquals("Foo", Verifier.capitalize("Foo"));
-        assertEquals("FOo", Verifier.capitalize("fOo"));
-        assertEquals("FOO", Verifier.capitalize("fOO"));
-        assertEquals("F", Verifier.capitalize("f"));
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorIssueTest.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorIssueTest.groovy
deleted file mode 100644
index d327bf9..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorIssueTest.groovy
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.codehaus.groovy.classgen
-
-import groovy.bugs.TestSupport
-
-class ConstructorIssueTest extends TestSupport {
-    
-    ConstructorIssueTest() {
-        //println("Created test case!")
-    }
-
-    ConstructorIssueTest(String[] args) {
-        //println("Created test case!")
-    }
-
-    static void main(args) {
-        //println("in main() - called with ${array}")
-        
-        foo = new ConstructorIssueTest()
-        foo.done()
-
-        //System.out.println("Done");
-    }
-    
-    void done() {
-        println("Yeah, I've been made")
-    }
-    
-    void testConstructorIssue() {
-        array = getMockArguments()
-
-        main(array)
-
-        new ConstructorIssueTest(array).done()
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorTest.java
deleted file mode 100644
index c0d9c08..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ConstructorTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ConstructorTest extends TestSupport {
-
-    public void testConstructor() throws Exception {
-        GroovyObject object = compile("src/test/groovy/NewExpressionTest.groovy");
-        object.invokeMethod("testNewInstance", null);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DerivedBean.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DerivedBean.java
deleted file mode 100644
index a203564..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DerivedBean.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-
-/**
- * A simple bean
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DerivedBean extends org.codehaus.groovy.runtime.DummyBean {
-
-    private String bar;
-
-    public String getBar() {
-        return bar;
-    }
-
-    public void setBar(String value) {
-        this.bar = value;
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyReflector.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyReflector.java
deleted file mode 100644
index 10a4331..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyReflector.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.classgen;
-
-import java.util.List;
-
-import groovy.lang.MetaMethod;
-
-import org.codehaus.groovy.runtime.Reflector;
-
-/**
- * This is a scratch class used to experiment with ASM to see what kind of
- * stuff is output for normal Java code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DummyReflector extends Reflector {
-
-    public DummyReflector() {
-    }
-
-    /*
-    public Object invoke(MetaMethod method, Object object, Object[] arguments) {
-        switch (method.getMethodIndex()) {
-            case 1 :
-                return InvokerHelper.toObject(object.hashCode());
-            case 2 :
-                return object.toString();
-            case 3 :
-                return InvokerHelper.toObject(object.equals(arguments[0]));
-            case 4 :
-                return new ObjectRange((Comparable) arguments[0], (Comparable) arguments[1]);
-            case 5 :
-                return ((String) object).toCharArray();
-            case 7 :
-                return new Character("hello".charAt(2));
-            case 8 :
-                return null;
-            default :
-                return noSuchMethod(method, object, arguments);
-        }
-    }
-    */
-
-    public Object invoke(MetaMethod method, Object object, Object[] arguments) {
-        switch (method.getMethodIndex()) {
-            case 1 :
-                return ((String) object).toCharArray();
-            case 2 :
-                return new Boolean(((List) object).contains(arguments[0]));
-            default :
-                return noSuchMethod(method, object, arguments);
-        }
-    }
-
-    public Object invokeConstructor(Object constructor, Object[] arguments) {
-        return null; // noSuchMethod(method, object, arguments);
-    }
-
-    char[] blah() {
-        return "foo".toCharArray();
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyTestDerivation.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyTestDerivation.java
deleted file mode 100644
index d4036c2..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DummyTestDerivation.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.util.GroovyTestCase;
-
-/**
- * A dummy test case
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DummyTestDerivation extends GroovyTestCase {
-    public DummyTestDerivation() {
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass.java
deleted file mode 100644
index a84bc1e..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.Closure;
-import groovy.lang.MetaClass;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * This is a scratch class used to experiment with ASM to see what kind of 
- * stuff is output for normal Java code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DumpClass {
-
-    private String bar;
-    private String result;
-    private Object x;
-
-    public String getResult() {
-        return result;
-    }
-
-    public String getBar() {
-        return bar;
-    }
-
-    public void setBar(String value) {
-        this.bar = value;
-    }
-
-    public void iterateOverList() {
-        // equivalent of
-        //        for i in ["a", "b", "c"] {
-        //            System.out.println(i);
-        //        }
-        List list = InvokerHelper.createList(new Object[] { "a", "b", "c" });
-        for (Iterator iter = InvokerHelper.asIterator(list); iter.hasNext();) {
-            Object i = iter.next();
-            InvokerHelper.invokeMethod(System.out, "println", i);
-        }
-    }
-
-    public void iterateOverMap() {
-        Map map = InvokerHelper.createMap(new Object[] { "a", "x", "b", "y", "c", "z" });
-        for (Iterator iter = InvokerHelper.asIterator(map); iter.hasNext();) {
-            Object i = iter.next();
-            InvokerHelper.invokeMethod(System.out, "println", i);
-        }
-    }
-
-    public void printValues(Object collection) {
-        for (Iterator iter = InvokerHelper.asIterator(collection); iter.hasNext();) {
-            Object foo = iter.next();
-            InvokerHelper.invokeMethod(System.out, "println", foo);
-        }
-    }
-
-    public Object emptyMethod() {
-        return null;
-    }
-
-    public void emptyVoidMethod() {
-    }
-
-    //    public void testAssertion() {
-    //        assert bar == null;
-    //        assert result == null : "message";
-    //    }
-
-    public void testGroovyAssertion2() {
-        if (InvokerHelper.compareEqual(bar, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "message");
-        }
-
-        bar = "abc";
-
-        if (InvokerHelper.compareNotEqual(bar, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "not null");
-        }
-
-        if (InvokerHelper.compareEqual(bar, "abc")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "not null");
-        }
-    }
-
-    public void testFieldSet() {
-        if (InvokerHelper.compareNotEqual(x, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "message");
-        }
-
-        x = "foo";
-
-        if (InvokerHelper.compareEqual(x, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "message");
-        }
-        if (InvokerHelper.compareNotEqual(x, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "message");
-        }
-    }
-    public void assertFailed() {
-        StringBuffer buffer = new StringBuffer("Exception: ");
-        buffer.append("x = ");
-        buffer.append(x);
-        InvokerHelper.assertFailed(buffer, "message");
-    }
-
-    public void setLocalVar() {
-        Object x = null;
-        Object i = null;
-        for (Iterator iter = InvokerHelper.asIterator(InvokerHelper.createRange(new Integer(0), new Integer(10), true));
-            iter.hasNext();
-            ) {
-            i = iter.next();
-            x = i;
-        }
-    }
-
-    public void testGroovyAssertion() {
-        x = "abc";
-        if (InvokerHelper.compareEqual(x, "foo")) {
-        }
-        else {
-            InvokerHelper.assertFailed("expression", "message");
-        }
-    }
-
-    public void doPlus() {
-        Object z = "abcd";
-        x = InvokerHelper.invokeMethod(z, "length", null);
-    }
-
-    public void setBoolean() {
-        x = Boolean.TRUE;
-    }
-
-    public void tryCatch() {
-        try {
-            InvokerHelper.invokeMethod(this, "testGroovyAssertion", null);
-        }
-        catch (AssertionError e) {
-            InvokerHelper.invokeMethod(this, "onException", e);
-        }
-        finally {
-            InvokerHelper.invokeMethod(this, "finallyBlock", null);
-        }
-        InvokerHelper.invokeMethod(this, "afterTryCatch", null);
-    }
-
-    public void doPrintln() {
-        Object value = InvokerHelper.getProperty(System.class, "out");
-        InvokerHelper.invokeMethod(value, "println", "Hello");
-    }
-
-    public void doClosure() {
-        x = new Closure(this) {
-            public Object call(Object arguments) {
-                System.out.println();
-                return null;
-            }
-
-            public MetaClass getMetaClass() {
-                return null;
-            }
-
-            public void setMetaClass(MetaClass metaClass) {
-            }
-        };
-    }
-
-    public Object ifDemo() {
-        if (InvokerHelper.compareEqual(bar, "abc")) {
-            return Boolean.TRUE;
-        }
-        else {
-            return Boolean.FALSE;
-        }
-    }
-
-    public void testWhile() {
-        while (InvokerHelper.compareEqual(bar, "abc")) {
-            System.out.println("Hello");
-        }
-    }
-
-    public void testDoWhile() {
-        do {
-            System.out.println("Hello");
-        }
-        while (InvokerHelper.compareEqual(bar, "abc"));
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass2.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass2.java
deleted file mode 100644
index cff3115..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass2.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.Closure;
-import groovy.lang.MetaClass;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-
-/**
- * This is a scratch class used to experiment with ASM to see what kind of 
- * stuff is output for normal Java code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DumpClass2 {
-
-    private String bar = (String) InvokerHelper.invokeStaticMethod("InvokerHelper", "getMetaClass", null);
-    private static String[] foo = { "hello", "world" };
-    
-    public DumpClass2(Object foo) {
-    }
-    
-    public String[] getFoo() {
-        return foo;
-    }
-    
-    public Object makeClosure() {
-        return new Closure(this) {
-            public void doCall() {
-                
-            }  
-            public MetaClass getMetaClass() {
-                return null;
-            }
-            
-            public void setMetaClass(MetaClass metaClass) {
-            }
-        };
-    }
-    public String getBar() {
-        return bar;
-    }
-    
-    public Object callConstructor() {
-        return InvokerHelper.invokeConstructor("java.lang.String", "hello");
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass3.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass3.java
deleted file mode 100644
index 779108c..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass3.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-
-
-/**
- * This is a scratch class used to experiment with ASM to see what kind of 
- * stuff is output for normal Java code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DumpClass3 extends DumpClass2 {
-
-    String blah;
-    Object another;
-    
-    public DumpClass3(Object foo) {
-        super(foo);
-        this.blah = (String) foo;
-    }
-    
-    public void foo() {
-        Object x = new Integer(12);
-        
-        if (x instanceof DumpClass2) {
-            System.out.println("Hello");
-        }
-    }
-   
-    public void testAnd() {
-        if (InvokerHelper.asBool(blah) && InvokerHelper.asBool(another)) {
-            System.out.println("Hello!");
-        }
-        else {
-            System.out.println("False");
-        }
-    }
-    
-    public Object testWhile(Object x, Object m) {
-        while ( InvokerHelper.compareLessThan(x, m)) {
-            x = increment(x);
-        }
-        return x;
-    }
-
-    private Object increment(Object x) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-    
-    public Object testSuper() {
-        return super.getFoo();
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass4.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass4.java
deleted file mode 100644
index 9170712..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpClass4.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.Reference;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * This is a scratch class used to experiment with ASM to see what kind of
- * stuff is output for normal Java code
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DumpClass4 {
-
-    public DumpClass4() {
-    }
-
-    public static void main(String[] args) {
-        Object foo = InvokerHelper.invokeConstructorOf(DumpClass4.class, null);
-    }
-
-    public void run() {
-        synchronized (this) {
-            InvokerHelper.invokeMethod(this, "foo", null);
-        }
-        InvokerHelper.invokeMethod(this, "bar", null);
-    }
-
-    public void throwException() {
-        throw (RuntimeException) InvokerHelper.invokeConstructor("java.lang.RuntimeException", "Hello");
-    }
-
-    public void switchTest(int i) {
-        String x = "foo";
-
-        switch (i) {
-            case 1 :
-                x = "1";
-                break;
-            case 2 :
-                x = "2";
-            case 3 :
-                x = "3";
-                break;
-            default :
-                x = "default";
-        }
-        System.out.println(x);
-    }
-
-    public Object createReferenceTest() {
-        Reference foo = new Reference();
-        foo.set(new Integer(12));
-        return foo.get();
-    }
-
-    public static void makeInstance() {
-        InvokerHelper.invokeConstructorOf(DumpClass4.class, null);
-    }
-
-    public void makeNestedArray() {
-        InvokerHelper.invokeMethod(
-            "outer",
-            "foo",
-            new Object[] { InvokerHelper.invokeMethod("inner", "plus", new Object[] { "1" })
-        });
-    }
-
-    public void makeNestedEmptyArray() {
-        InvokerHelper
-            .invokeMethod("outer", "foo", new Object[] { InvokerHelper.invokeMethod("inner", "plus", new Object[] {
-            })
-            });
-    }
-
-    public Object makeAnotherArray(Object a, Object b) {
-        return new Object[] { a, b };
-    }
-
-    public void tryFinally() {
-        try {
-            System.out.println("Try");
-        }
-        finally {
-            System.out.println("Finally");
-        }
-    }
-
-    public void tryCatchFinally() {
-        try {
-            System.out.println("Try");
-        }
-        catch (Exception e) {
-            System.out.println("Catch");
-        }
-        finally {
-            System.out.println("Finally");
-        }
-    }
-
-    public void emptyTryCatch() {
-        try {
-        }
-        catch (Throwable t) {
-        }
-    }
-    
-    public void usePrimitiveType() {
-        System.out.println(int.class);
-    }
-    
-    public String testSuperCall() {
-        return super.toString();
-    }
-    
-    public Object createReference(Object foo) {
-        return new Reference(foo);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpingClassLoader.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpingClassLoader.java
deleted file mode 100644
index b6d9a8b..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/DumpingClassLoader.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyClassLoader;
-
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.CompileUnit;
-import org.codehaus.groovy.control.CompilationUnit;
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Constants;
-import org.objectweb.asm.util.CheckClassAdapter;
-import org.objectweb.asm.util.ASMifierClassVisitor;
-
-/**
- * A class loader used for debugging the bytecode generation. 
- * This will log all bytecode being loaded
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DumpingClassLoader extends GroovyClassLoader implements Constants {
-
-    protected static boolean CHECK_CLASS = false;
-    protected static boolean DUMP_CLASS = true;
-
-    public DumpingClassLoader(ClassLoader parentLoader) {
-        super(parentLoader);
-    }
-    
-    
-    protected class DebugCollector extends ClassCollector {
-
-        DebugCollector(GroovyClassLoader cl, CompilationUnit unit) {
-            super(cl, unit);
-        }
-        
-        public void call(ClassVisitor classWriter, ClassNode classNode) {
-            // lets test out the class verifier
-            if (DUMP_CLASS) {
-                dumper.visitClass(classNode);
-            }
-
-            if (CHECK_CLASS) {
-                checker.visitClass(classNode);
-            }
-            
-            super.call(classWriter, classNode);
-        }
-    }
-    
-    protected ClassCollector createCollector(CompilationUnit unit) {
-        return new DebugCollector(this, unit);
-    }
-
-    protected ASMifierClassVisitor dumpVisitor = new ASMifierClassVisitor(new PrintWriter(new OutputStreamWriter(System.out)));
-    protected ASMifierClassVisitor invisibleDumpVisitor = new ASMifierClassVisitor(new PrintWriter(new StringWriter()));
-    protected CompileUnit unit = new CompileUnit(this, new CompilerConfiguration());
-    protected ClassGenerator checker =
-        new AsmClassGenerator(new GeneratorContext(unit), new CheckClassAdapter(invisibleDumpVisitor), this, null);
-    protected ClassGenerator dumper = new AsmClassGenerator(new GeneratorContext(unit), dumpVisitor, this, null);
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ForTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ForTest.java
deleted file mode 100644
index 484c0fa..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ForTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.ast.*;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.ForStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ForTest extends TestSupport {
-
-    public void testLoop() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-        classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null));
-        classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        Parameter[] parameters = {new Parameter("coll")};
-
-        Statement loopStatement = createPrintlnStatement(new VariableExpression("i"));
-
-        ForStatement statement = new ForStatement("i", Type.DYNAMIC_TYPE, new VariableExpression("coll"), loopStatement);
-        classNode.addMethod(new MethodNode("iterateDemo", ACC_PUBLIC, "void", parameters, statement));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        System.out.println("################ Now about to invoke method");
-
-        Object[] array = {new Integer(1234), "abc", "def"};
-
-        try {
-            InvokerHelper.invokeMethod(bean, "iterateDemo", new Object[]{array});
-        } catch (InvokerInvocationException e) {
-            System.out.println("Caught: " + e.getCause());
-            e.getCause().printStackTrace();
-            fail("Should not have thrown an exception");
-        }
-        System.out.println("################ Done");
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GStringTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GStringTest.java
deleted file mode 100644
index b245894..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GStringTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.BooleanExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.GStringExpression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.AssertStatement;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class GStringTest extends TestSupport {
-
-    public void testConstructor() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-
-        //Statement printStatement = createPrintlnStatement(new VariableExpression("str"));
-
-        // simulate "Hello ${user}!"
-        GStringExpression compositeStringExpr = new GStringExpression( "hello ${user}!" );
-        compositeStringExpr.addString(new ConstantExpression("Hello "));
-        compositeStringExpr.addValue(new VariableExpression("user"));
-        compositeStringExpr.addString(new ConstantExpression("!"));
-        BlockStatement block = new BlockStatement();
-        block.addStatement(
-            new ExpressionStatement(
-                new BinaryExpression(
-                    new VariableExpression("user"),
-                    Token.newSymbol("=", -1, -1),
-                    new ConstantExpression("World"))));
-        block.addStatement(
-            new ExpressionStatement(
-                new BinaryExpression(new VariableExpression("str"), Token.newSymbol( "=", -1, -1), compositeStringExpr)));
-        block.addStatement(
-            new ExpressionStatement(
-                new MethodCallExpression(VariableExpression.THIS_EXPRESSION, "println", new VariableExpression("str"))));
-
-        block.addStatement(
-            new ExpressionStatement(
-                new BinaryExpression(
-                    new VariableExpression("text"),
-                    Token.newSymbol( "=", -1, -1),
-                    new MethodCallExpression(new VariableExpression("str"), "toString", ConstantExpression.NULL))));
-
-        block.addStatement(
-            new AssertStatement(
-                new BooleanExpression(
-                    new BinaryExpression(
-                        new VariableExpression("text"),
-                        Token.newSymbol( "==", -1, -1),
-                        new ConstantExpression("Hello World!")))));
-        classNode.addMethod(new MethodNode("stringDemo", ACC_PUBLIC, "void", Parameter.EMPTY_ARRAY, block));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        System.out.println("################ Now about to invoke method");
-
-        //Object[] array = { new Integer(1234), "abc", "def" };
-
-        try {
-            InvokerHelper.invokeMethod(bean, "stringDemo", null);
-        }
-        catch (InvokerInvocationException e) {
-            System.out.println("Caught: " + e.getCause());
-            e.getCause().printStackTrace();
-            fail("Should not have thrown an exception");
-        }
-        System.out.println("################ Done");
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GetPropertyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GetPropertyTest.java
deleted file mode 100644
index c1aa487..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GetPropertyTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * Tests using the GroovyObject API from Java on a groovy object
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class GetPropertyTest extends TestSupport {
-
-    public void testProperty() throws Exception {
-        GroovyObject object = compile("src/test/org/codehaus/groovy/classgen/MyBean.groovy");
-        System.out.println("Got object: " + object);
-
-        Object value = object.getProperty("name");
-        assertEquals("name property", "James", value);
-
-        object.setProperty("name", "Bob");
-        assertEquals("name property", "Bob", object.getProperty("name"));
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GroovyClassLoaderTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GroovyClassLoaderTest.java
deleted file mode 100644
index 4c09665..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/GroovyClassLoaderTest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.MetaClass;
-
-import java.io.File;
-
-
-/**
- * Tests dynamically compiling a new class
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class GroovyClassLoaderTest extends TestSupport {
-
-    public void testCompile() throws Exception {
-        Class groovyClass = loader.parseClass(new File("src/test/org/codehaus/groovy/classgen/Main.groovy"));
-
-        System.out.println("Invoking main...");
-        
-        GroovyObject object = (GroovyObject) groovyClass.newInstance();
-        
-        assertTrue(object != null);
-
-        MetaClass metaClass = object.getMetaClass();
-        System.out.println("Metaclass: " + metaClass);
-        
-        Class type = object.getClass();
-        System.out.println("Type: " + type);
-        
-        // invoke via metaclass
-        metaClass.invokeMethod(object, "main", null);
-        
-        // invoke directly
-        object.invokeMethod("main", null);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/IfElseTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/IfElseTest.java
deleted file mode 100644
index 08e9b65..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/IfElseTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.FieldNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.PropertyNode;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.BooleanExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.FieldExpression;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.IfStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class IfElseTest extends TestSupport {
-
-    public void testLoop() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-        classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null));
-        classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        classNode.addProperty(new PropertyNode("result", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        BooleanExpression expression =
-            new BooleanExpression(
-                new BinaryExpression(
-                    new FieldExpression(
-                        new FieldNode("bar", ACC_PRIVATE, "java.lang.String", "Foo", ConstantExpression.NULL)),
-                    Token.newSymbol("==", 0, 0),
-                    new ConstantExpression("abc")));
-
-        Statement trueStatement =
-            new ExpressionStatement(
-                new BinaryExpression(
-                    new FieldExpression(
-                        new FieldNode("result", ACC_PRIVATE, "java.lang.String", "Foo", ConstantExpression.NULL)),
-                    Token.newSymbol("=", 0, 0),
-                    new ConstantExpression("worked")));
-
-        Statement falseStatement = createPrintlnStatement(new ConstantExpression("false"));
-
-        IfStatement statement = new IfStatement(expression, trueStatement, falseStatement);
-        classNode.addMethod(new MethodNode("ifDemo", ACC_PUBLIC, "void", Parameter.EMPTY_ARRAY, statement));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        assertSetProperty(bean, "bar", "abc");
-
-        System.out.println("################ Now about to invoke method");
-
-        Object[] array = {
-        };
-
-        InvokerHelper.invokeMethod(bean, "ifDemo", array);
-
-        System.out.println("################ Done");
-
-        assertGetProperty(bean, "result", "worked");
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/Main.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/Main.groovy
deleted file mode 100644
index 4199086..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/Main.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.codehaus.groovy.classgen
-
-class Main {
-    
-    main() {
-        println("Hello World!")
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MainTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MainTest.java
deleted file mode 100644
index 79355f3..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MainTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyShell;
-
-import java.io.File;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MainTest extends TestSupport {
-
-    public void testMainMethod() throws Exception {
-        GroovyShell shell = new GroovyShell();
-        shell.run(new File("src/test/groovy/SampleMain.groovy"), new String[] { "A", "B", "C" });
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MetaClassTest.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MetaClassTest.groovy
deleted file mode 100644
index c612af7..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MetaClassTest.groovy
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.codehaus.groovy.classgen
-
-class MetaClassTest extends GroovyTestCase {
-    
-    void testMetaClass() {
-        test(this)
-        test { print(it) }
-    }
-    
-    protected test(object) {
-        metaClass = object.metaClass
-        assert metaClass != null
-        
-        println(metaClass)
-        
-        classNode = metaClass.getClassNode()
-        assert classNode != null
-
-        println(classNode)
-        
-        name = object.getClass().getName()
-        assert classNode.name == name
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MethodTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MethodTest.java
deleted file mode 100644
index 8cc2784..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MethodTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.ast.stmt.ReturnStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MethodTest extends TestSupport {
-
-    public void testMethods() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-        classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null));
-
-        Statement statementA = new ReturnStatement(new ConstantExpression("calledA"));
-        Statement statementB = new ReturnStatement(new ConstantExpression("calledB"));
-        Statement emptyStatement = new BlockStatement();
-
-        classNode.addMethod(new MethodNode("a", ACC_PUBLIC, "java.lang.Object", Parameter.EMPTY_ARRAY, statementA));
-        classNode.addMethod(new MethodNode("b", ACC_PUBLIC, null, Parameter.EMPTY_ARRAY, statementB));
-        
-        classNode.addMethod(new MethodNode("noReturnMethodA", ACC_PUBLIC, null, Parameter.EMPTY_ARRAY, emptyStatement));
-        classNode.addMethod(new MethodNode("noReturnMethodB", ACC_PUBLIC, "java.lang.Object", Parameter.EMPTY_ARRAY, emptyStatement));
-        
-        classNode.addMethod(new MethodNode("c", ACC_PUBLIC, "void", Parameter.EMPTY_ARRAY, emptyStatement));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Created instance of class: " + bean, bean != null);
- 
-        assertCallMethod(bean, "a", "calledA");
-        assertCallMethod(bean, "b", "calledB");
-        assertCallMethod(bean, "noReturnMethodA", null);
-        assertCallMethod(bean, "noReturnMethodB", null);
-        assertCallMethod(bean, "c", null);
-    }
-
-    protected void assertCallMethod(Object object, String method, Object expected) {
-        Object value = InvokerHelper.invokeMethod(object, method, new Object[0]);
-        assertEquals("Result of calling method: " + method + " on: " + object + " with empty list", expected, value);
-
-        value = InvokerHelper.invokeMethod(object, method, null);
-        assertEquals("Result of calling method: " + method + " on: " + object + " with null", expected, value);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MyBean.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MyBean.groovy
deleted file mode 100644
index 325c8bd..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/MyBean.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.codehaus.groovy.classgen
-
-class MyBean {
-
-	name = "James"
-	foo = 123
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/PropertyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/PropertyTest.java
deleted file mode 100644
index f21aef5..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/PropertyTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import java.lang.reflect.Modifier;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.PropertyNode;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class PropertyTest extends TestSupport {
-
-    public void testFields() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-        classNode.addField("x", ACC_PUBLIC, "java.lang.Object", null);
-        classNode.addField("y", ACC_PUBLIC, "java.lang.Integer", null);
-        classNode.addField("z", ACC_PRIVATE, "java.lang.String", null);
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        assertField(fooClass, "x", Modifier.PUBLIC, "java.lang.Object");
-        assertField(fooClass, "y", Modifier.PUBLIC, "java.lang.Integer");
-        assertField(fooClass, "z", Modifier.PRIVATE, "java.lang.String");
-    }
-
-    public void testProperties() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC + ACC_SUPER, "java.lang.Object");
-        classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        assertField(fooClass, "bar", 0, "java.lang.String");
-
-        assertGetProperty(bean, "bar", null);
-        assertSetProperty(bean, "bar", "newValue");
-    }
-
-    public void testInheritedProperties() throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC + ACC_SUPER, "org.codehaus.groovy.runtime.DummyBean");
-        classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        assertField(fooClass, "bar", 0, "java.lang.String");
-
-        assertGetProperty(bean, "name", "James");
-        assertSetProperty(bean, "name", "Bob");
-
-        assertGetProperty(bean, "bar", null);
-        assertSetProperty(bean, "bar", "newValue");
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ReflectorGeneratorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ReflectorGeneratorTest.java
deleted file mode 100644
index 71de198..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/ReflectorGeneratorTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.util.CheckClassAdapter;
-import org.objectweb.asm.util.ASMifierClassVisitor;
-
-import groovy.lang.MetaClassRegistry;
-import groovy.lang.MetaMethod;
-import groovy.util.GroovyTestCase;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ReflectorGeneratorTest extends GroovyTestCase {
-
-    public void testGenerator() throws Exception {
-        List methods = new ArrayList();
-        methods.add(new MetaMethod("toCharArray", String.class, new Class[0], char[].class, 0));
-        //methods.add(new MetaMethod("toString", String.class, new Class[0], String.class, 0));
-        testMethods(methods);
-    }
-    
-    public void testObjectGenerator() throws Exception {
-        List methods = InvokerHelper.getMetaClass(new Object()).getMethods();
-        testMethods(methods);
-    }
-    
-    public void testDummyReflector() throws Exception {
-        DummyReflector dummy = new DummyReflector();
-        assertTrue(dummy != null);
-    }
-    
-    protected void testMethods(List methods) throws Exception {
-        ReflectorGenerator generator = new ReflectorGenerator(methods);
-        String name = getClass().getName() + "." + getMethodName();
-        ClassWriter cw = new ClassWriter(true);
-
-        
-        ASMifierClassVisitor dumper = new ASMifierClassVisitor(new PrintWriter(new OutputStreamWriter(System.out)));
-        //generator.generate(dumper, name);
-
-        generator.generate(new CheckClassAdapter(cw), name);
-
-        byte[] bytecode = cw.toByteArray();
-
-        // lets write it to disk
-        String fileName = "target/" + name + ".class";
-        FileOutputStream out = new FileOutputStream(fileName);
-        out.write(bytecode);
-        out.close();
-
-        // now lets try dump it
-        ASMifierClassVisitor.main(new String[] { fileName });
-
-        // now lets try class load it
-        MetaClassRegistry registry = new MetaClassRegistry();
-        Class type = registry.loadClass(name, bytecode);
-        
-        Object reflector = type.newInstance();
-        
-        System.out.println("Created new reflector: " + reflector);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunBugsTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunBugsTest.java
deleted file mode 100644
index 0c9fd28..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunBugsTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * A helper class for testing bugs in code generation errors. By turning on the
- * logging in TestSupport we can dump the ASM code generation code for inner
- * classes etc.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class RunBugsTest extends TestSupport {
-
-    /*
-    public void testStaticMethodCall() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/StaticMethodCallBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-
-    public void testTryCatchBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/TryCatchBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-
-    public void testRodsBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/RodsBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-
-    public void testCastBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ClosureMethodCallTest.groovy");
-        object.invokeMethod("testCallingClosureWithMultipleArguments", null);
-    }
-
-    public void testGuillaumesMapBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/GuillaumesMapBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-
-    public void testUseClosureInScript() throws Exception {
-        GroovyObject object = compile("src/test/groovy/script/UseClosureInScript.groovy");
-        object.invokeMethod("run", null);
-    }
-
-    public void testUseStaticInClosure() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/UseStaticInClosureBug.groovy");
-        object.invokeMethod("testBug2", null);
-    }
-
-    public void testPrimitiveTypeFieldTest() throws Exception {
-        GroovyObject object = compile("src/test/groovy/PrimitiveTypeFieldTest.groovy");
-        object.invokeMethod("testPrimitiveField", null);
-    }
-    
-    public void testMethodDispatchBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/MethodDispatchBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testClosureInClosureTest() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ClosureInClosureTest.groovy");
-        object.invokeMethod("testInvisibleVariable", null);
-    }
-    public void testStaticMarkupBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/StaticMarkupBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testOverloadInvokeMethodBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/OverloadInvokeMethodBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testClosureVariableBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/ClosureVariableBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    
-    public void testMarkupAndMethodBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/MarkupAndMethodBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testClosureParameterPassingBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/ClosureParameterPassingBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testNestedClosureBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/NestedClosure2Bug.groovy");
-        object.invokeMethod("testFieldBug", null);
-    }
-    public void testSuperMethod2Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/SuperMethod2Bug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testToStringBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/ToStringBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testByteIndexBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/ByteIndexBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    public void testGroovy252_Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Groovy252_Bug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    
-    */
-        
-    public void testGroovy303_Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Groovy303_Bug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-    
-    
-    
-   }
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunClosureTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunClosureTest.java
deleted file mode 100644
index e66600d..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunClosureTest.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class RunClosureTest extends TestSupport {
-
-    public void testClosure() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ClosureUsingOuterVariablesTest.groovy");
-        object.invokeMethod("testExampleUseOfClosureScopesUsingEach", null);
-    }
-
-    public void testStaticClosureBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/StaticClosurePropertyBug.groovy");
-        object.invokeMethod("testCallStaticClosure", null);
-    }
-
-    public void testZoharsBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/ZoharsBug.groovy");
-        object.invokeMethod("testBug", null);
-    }
-
-    public void testBytecodeBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/BytecodeBug.groovy");
-        object.invokeMethod("testTedsBytecodeBug", null);
-    }
-
-    public void testBytecode2Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Bytecode2Bug.groovy");
-        object.invokeMethod("testTedsBytecodeBug", null);
-    }
-
-    public void testBytecode3Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Bytecode3Bug.groovy");
-        //object.invokeMethod("testInject", null);
-        object.invokeMethod("testIncrementPropertyInclosure", null);
-    }
-
-    public void testBytecode4Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Bytecode4Bug.groovy");
-        object.invokeMethod("testInject", null);
-        object.invokeMethod("testUsingProperty", null);
-    }
-
-    public void testBytecode5Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Bytecode5Bug.groovy");
-        object.invokeMethod("testUsingLocalVar", null);
-    }
-
-    public void testBytecode6Bug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/bugs/Bytecode6Bug.groovy");
-        object.invokeMethod("testPreFixReturn", null);
-    }
-
-    public void testPropertyTest() throws Exception {
-        GroovyObject object = compile("src/test/groovy/PropertyTest.groovy");
-        object.invokeMethod("testNormalPropertyGettersAndSetters", null);
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunGroovyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunGroovyTest.java
deleted file mode 100644
index 61bac30..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/RunGroovyTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * Tests dynamically compiling and running a new class
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class RunGroovyTest extends TestSupport {
-
-    public void testArrayBug() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ToArrayBug.groovy");
-        object.invokeMethod("testToArrayBug", null);
-    }
-
-    /*
-    public void testPostfix() throws Exception {
-        GroovyObject object = compile("src/test/groovy/PostfixTest.groovy");
-        object.invokeMethod("testIntegerPostfix", null);
-    }
-
-    public void testMap() throws Exception {
-        GroovyObject object = compile("src/test/groovy/MapTest.groovy");
-        object.invokeMethod("testMap", null);
-    }
-
-    public void testClosure() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ClosureMethodTest.groovy");
-        object.invokeMethod("testListMap", null);
-    }
-
-    public void testClosureWithDefaultParam() throws Exception {
-        GroovyObject object = compile("src/test/groovy/ClosureWithDefaultParamTest.groovy");
-        object.invokeMethod("testListMap", null);
-    }
-
-    public void testOptionalReturn() throws Exception {
-        GroovyObject object = compile("src/test/groovy/OptionalReturnTest.groovy");
-        object.invokeMethod("testSingleExpression", null);
-        object.invokeMethod("testLastExpressionIsSimple", null);
-    }
-
-    public void testConsole() throws Exception {
-        GroovyObject object = compile("src/main/groovy/ui/Console.groovy");
-    }
-    */
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/SimpleBean.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/SimpleBean.java
deleted file mode 100644
index ded77d9..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/SimpleBean.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-
-/**
- * A simple bean
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class SimpleBean {
-
-    private String bar;
-    private Object x;
-
-    //private static final Object INT_CONST = new Integer(123);
-
-    public String getBar() {
-        return bar;
-    }
-
-    public void setBar(String value) {
-        this.bar = value;
-    }
-    
-    
-    public void setNumber() {
-        x = new Integer(123);
-    }
-    
-    public void setFloat() {
-        x = new Double(123);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TestSupport.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TestSupport.java
deleted file mode 100644
index 9e7f06c..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TestSupport.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyCodeSource;
-import groovy.lang.GroovyObject;
-import groovy.lang.Script;
-import groovy.util.GroovyTestCase;
-
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.io.File;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.CompileUnit;
-import org.codehaus.groovy.ast.FieldNode;
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.FieldExpression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.control.CompilerConfiguration;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.objectweb.asm.Constants;
-
-/**
- * Base class for test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class TestSupport extends GroovyTestCase implements Constants {
-
-    protected static boolean DUMP_CLASS = false;
-
-    // ClassLoader parentLoader = Thread.currentThread().getContextClassLoader();
-    ClassLoader parentLoader = getClass().getClassLoader();
-    protected GroovyClassLoader loader = 
-    	(GroovyClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
-    		public Object run() {
-    			return (DUMP_CLASS) 
-					? new DumpingClassLoader(parentLoader)
-					: new GroovyClassLoader(parentLoader); 
-    		}
-    	});
-    CompileUnit unit = new CompileUnit(parentLoader, new CompilerConfiguration());
-    ModuleNode module = new ModuleNode(unit);
-    
-    protected Class loadClass(ClassNode classNode) {
-        classNode.setModule(module);
-        Class fooClass = loader.defineClass(classNode, classNode.getName() + ".groovy", "groovy.testSupport");
-        return fooClass;
-    }
-
-    protected void assertSetProperty(Object bean, String property, Object newValue) throws Exception {
-        PropertyDescriptor descriptor = getDescriptor(bean, property);
-        Method method = descriptor.getWriteMethod();
-        assertTrue("has setter method", method != null);
-
-        Object[] args = { newValue };
-        Object value = invokeMethod(bean, method, args);
-
-        assertEquals("should return null", null, value);
-
-        assertGetProperty(bean, property, newValue);
-    }
-
-    protected void assertGetProperty(Object bean, String property, Object expected) throws Exception {
-        PropertyDescriptor descriptor = getDescriptor(bean, property);
-        Method method = descriptor.getReadMethod();
-        assertTrue("has getter method", method != null);
-
-        Object[] args = {
-        };
-        Object value = invokeMethod(bean, method, args);
-
-        /*
-        System.out.println("Expected: " + expected);
-        System.out.println("Value: " + value);
-        
-        if (expected == null) { System.out.println("Expected is null"); }
-        if (value == null) { System.out.println("value is null"); }
-        */
-        
-        assertEquals("property value", expected, value);
-    }
-
-    protected Object invokeMethod(Object bean, Method method, Object[] args) throws Exception {
-        try {
-            return method.invoke(bean, args);
-        }
-        catch (InvocationTargetException e) {
-            fail("InvocationTargetException: " + e.getTargetException());
-            return null;
-        }
-    }
-
-    protected PropertyDescriptor getDescriptor(Object bean, String property) throws Exception {
-        BeanInfo info = Introspector.getBeanInfo(bean.getClass());
-        PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
-        for (int i = 0; i < descriptors.length; i++) {
-            PropertyDescriptor descriptor = descriptors[i];
-            if (descriptor.getName().equals(property)) {
-                return descriptor;
-            }
-        }
-        fail("Could not find property: " + property + " on bean: " + bean);
-        return null;
-    }
-
-    protected void assertField(Class aClass, String name, int modifiers, String typeName) throws Exception {
-        Field field = aClass.getDeclaredField(name);
-
-        assertTrue("Found field called: " + name, field != null);
-        assertEquals("Name", name, field.getName());
-        assertEquals("Type", typeName, field.getType().getName());
-        assertEquals("Modifiers", modifiers, field.getModifiers());
-    }
-
-    protected ExpressionStatement createPrintlnStatement(Expression expression) throws NoSuchFieldException {
-        return new ExpressionStatement(
-            new MethodCallExpression(
-                new FieldExpression(FieldNode.newStatic(System.class, "out")),
-                "println",
-                expression));
-    }
-
-    /**
-     * Asserts that the script runs without any exceptions
-     * @param script
-     */
-    protected void assertScript(String text) throws Exception {
-        assertScript(text, getTestClassName());
-    }
-    
-    protected void assertScript(final String text, final String scriptName) throws Exception {
-        log.info("About to execute script");
-        log.info(text);
-    	GroovyCodeSource gcs = (GroovyCodeSource) AccessController.doPrivileged(new PrivilegedAction() {
-    		public Object run() {
-    			return new GroovyCodeSource(text, scriptName, "/groovy/testSupport");
-    		}
-    	});
-        Class groovyClass = loader.parseClass(gcs);
-        Script script = InvokerHelper.createScript(groovyClass, new Binding());
-        script.run();
-    }
-    
-    protected void assertScriptFile(String fileName) throws Exception {
-        log.info("About to execute script: " + fileName);
-        
-        Class groovyClass = loader.parseClass(new GroovyCodeSource(new File(fileName)));
-        Script script = InvokerHelper.createScript(groovyClass, new Binding());
-        script.run();
-    }
-    
-    protected GroovyObject compile(String fileName) throws Exception {
-        Class groovyClass = loader.parseClass(new GroovyCodeSource(new File(fileName)));
-
-        GroovyObject object = (GroovyObject) groovyClass.newInstance();
-
-        assertTrue(object != null);
-
-        return object;
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TupleListTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TupleListTest.java
deleted file mode 100644
index d25f808..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/TupleListTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.classgen;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.PropertyNode;
-import org.codehaus.groovy.ast.Type;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.ListExpression;
-import org.codehaus.groovy.ast.expr.MapExpression;
-import org.codehaus.groovy.ast.expr.TupleExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.ForStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.syntax.Token;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class TupleListTest extends TestSupport {
-
-    public void testIterateOverTuple() throws Exception {
-        TupleExpression listExpression = new TupleExpression();
-        listExpression.addExpression(new ConstantExpression("a"));
-        listExpression.addExpression(new ConstantExpression("b"));
-        listExpression.addExpression(new ConstantExpression("c"));
-        assertIterate("iterateOverTuple", listExpression);
-    }
-    
-    public void testIterateOverList() throws Exception {
-        ListExpression listExpression = new ListExpression();
-        listExpression.addExpression(new ConstantExpression("a"));
-        listExpression.addExpression(new ConstantExpression("b"));
-        listExpression.addExpression(new ConstantExpression("c"));
-        listExpression.addExpression(new ConstantExpression("a"));
-        listExpression.addExpression(new ConstantExpression("b"));
-        listExpression.addExpression(new ConstantExpression("c"));
-        assertIterate("iterateOverList", listExpression);
-    }
-    
-    public void testIterateOverMap() throws Exception {
-        MapExpression mapExpression = new MapExpression();
-        mapExpression.addMapEntryExpression(new ConstantExpression("a"), new ConstantExpression("x"));
-        mapExpression.addMapEntryExpression(new ConstantExpression("b"), new ConstantExpression("y"));
-        mapExpression.addMapEntryExpression(new ConstantExpression("c"), new ConstantExpression("z"));
-        assertIterate("iterateOverMap", mapExpression);
-    }
-    
-    protected void assertIterate(String methodName, Expression listExpression) throws Exception {
-        ClassNode classNode = new ClassNode("Foo", ACC_PUBLIC, "java.lang.Object");
-        classNode.addConstructor(new ConstructorNode(ACC_PUBLIC, null));
-        classNode.addProperty(new PropertyNode("bar", ACC_PUBLIC, "java.lang.String", "Foo", null, null, null));
-
-        Statement loopStatement = createPrintlnStatement(new VariableExpression("i"));
-
-        BlockStatement block = new BlockStatement();
-        block.addStatement(new ExpressionStatement(new BinaryExpression(new VariableExpression("list"), Token.newSymbol("=", 0, 0), listExpression)));
-        block.addStatement(new ForStatement("i", Type.DYNAMIC_TYPE, new VariableExpression("list"), loopStatement));
-        classNode.addMethod(new MethodNode(methodName, ACC_PUBLIC, "void", Parameter.EMPTY_ARRAY, block));
-
-        Class fooClass = loadClass(classNode);
-        assertTrue("Loaded a new class", fooClass != null);
-
-        Object bean = fooClass.newInstance();
-        assertTrue("Managed to create bean", bean != null);
-
-        System.out.println("################ Now about to invoke method");
-        
-        try {
-            InvokerHelper.invokeMethod(bean, methodName, null);
-        }
-        catch (InvokerInvocationException e) {
-            System.out.println("Caught: " + e.getCause());
-            e.getCause().printStackTrace();
-            fail("Should not have thrown an exception");
-        }
-        System.out.println("################ Done");    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/VerifierCodeVisitorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/VerifierCodeVisitorTest.java
deleted file mode 100644
index 308cc3c..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/classgen/VerifierCodeVisitorTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- *
- * Copyright 2004 James Strachan
- *
- * 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.codehaus.groovy.classgen;
-
-import junit.framework.TestCase;
-import org.codehaus.groovy.ast.ASTNode;
-import org.codehaus.groovy.syntax.parser.RuntimeParserException;
-
-/**
- * @version $Revision$
- */
-public class VerifierCodeVisitorTest extends TestCase {
-    public void testValidNames() {
-        assertValidName("a");
-        assertValidName("a1234");
-        assertValidName("a_b_c");
-        assertValidName("a____1234");
-    }
-
-    public void testInvalidNames() {
-        assertInvalidName("1");
-        assertInvalidName("100");
-        assertInvalidName("1a");
-        assertInvalidName("a!");
-        assertInvalidName("a.");
-        assertInvalidName("$");
-        assertInvalidName("$foo");
-    }
-
-    protected void assertValidName(String name) {
-        VerifierCodeVisitor.assertValidIdentifier(name, "variable name", new ASTNode());
-    }
-
-    protected void assertInvalidName(String name) {
-        try {
-            VerifierCodeVisitor.assertValidIdentifier(name, "variable name", new ASTNode());
-            fail("Should have thrown exception due to invalid name: " + name);
-        }
-        catch (RuntimeParserException e) {
-            System.out.println("Caught invalid exception: " + e);
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/dummy/FooHandler.java b/groovy/modules/classic/src/test/org/codehaus/groovy/dummy/FooHandler.java
deleted file mode 100644
index e29b0a9..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/dummy/FooHandler.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.codehaus.groovy.dummy;
-
-import java.io.Reader;
-
-/**
- * @author Robert Fuller
- * @version $Revision$
- */
-public interface FooHandler {
-    public void handle(Reader reader);
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.java
deleted file mode 100644
index 594c556..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DefaultGroovyMethodsTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.util.GroovyTestCase;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DefaultGroovyMethodsTest extends GroovyTestCase {
-
-    public void testPrint() throws Exception {
-        Map map = new HashMap();
-        map.put("bob", "drools");
-        map.put("james", "geronimo");
-        List list = new ArrayList();
-        list.add(map);
-
-        /** @todo fix this! */
-        //assertConsoleOutput(list, "[['bob':'drools', 'james':'geronimo']]");
-    }
-
-    public void testIncrementString() throws Exception {
-        String original = "z";
-        String answer = DefaultGroovyMethods.next(original);
-
-        System.out.println(answer);
-        assertTrue(answer.compareTo(original) > 0);
-    }
-
-    public void testDecrementString() throws Exception {
-        String original = "a";
-        String answer = DefaultGroovyMethods.previous(original);
-
-        System.out.println(answer);
-        assertTrue(InvokerHelper.compareLessThan(answer, original));
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DummyBean.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DummyBean.java
deleted file mode 100644
index f849bf7..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/DummyBean.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import java.awt.Point;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A bean used by the test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class DummyBean {
-    private String name = "James";
-    private Integer i = new Integer(123);
-    private Map dynamicProperties = new HashMap();
-    private Point point;
-    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
-    
-    public DummyBean() {
-    }
-
-    public DummyBean(String name) {
-        this.name = name;
-    }
-
-    public DummyBean(String name, Integer i) {
-        this.name = name;
-        this.i = i;
-    }
-
-    public void addPropertyChangeListener(PropertyChangeListener listener) {
-        changeSupport.addPropertyChangeListener(listener);
-    }
-    
-    public Integer getI() {
-        return i;
-    }
-
-    public void setI(Integer i) {
-        this.i = i;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    // dynamic properties
-    public Object get(String property) {
-        return dynamicProperties.get(property);
-    }
-
-    public void set(String property, Object newValue) {
-        dynamicProperties.put(property, newValue);
-    }
-
-    public static String dummyStaticMethod(String text) {
-        return text.toUpperCase();
-    }
-    
-    public boolean equals(Object that) {
-        if (that instanceof DummyBean) {
-            return equals((DummyBean) that);
-        }
-        return false;
-    }
-    
-    public boolean equals(DummyBean that) {
-        return this.name.equals(that.name) && this.i.equals(that.i);
-    }
-
-    public String toString() {
-        return super.toString() + "[name=" + name + ";i=" + i + "]";
-    }
-
-    public Point getPoint() {
-        return point;
-    }
-
-    public void setPoint(Point point) {
-        this.point = point;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InheritedInterfaceMethodTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InheritedInterfaceMethodTest.java
deleted file mode 100644
index 4f37799..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InheritedInterfaceMethodTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.runtime;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class InheritedInterfaceMethodTest extends TestCase {
-
-    public void testInvokeNewListMethodOnArrayList() {
-        List list = new ArrayList();
-        Object answer = InvokerHelper.invokeMethod(list, "count", new Object[] { "123" });
-        assertEquals(new Integer(0), answer);
-
-        System.out.println("Found: " + answer);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java
deleted file mode 100644
index 4c33c58..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.GString;
-import groovy.util.GroovyTestCase;
-
-/**
- * Tests method invocation
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class InvokeConstructorTest extends GroovyTestCase {
-
-    protected Invoker invoker = new Invoker();
-
-    public void testInvokeConstructorNoParams() throws Throwable {
-        assertConstructor(new DummyBean(), new Object[0]);
-    }
-
-    public void testInvokeConstructorOneParam() throws Throwable {
-        assertConstructor(new DummyBean("Bob"), "Bob");
-    }
-
-    public void testInvokeConstructorOneParamWhichIsNull() throws Throwable {
-        assertConstructor(new DummyBean("Bob", new Integer(1707)), new Object[] { "Bob", new Integer(1707)});
-    }
-
-    public void testConstructorWithGStringCoercion() throws Throwable {
-        GString gstring = new GString(new Object[] { new Integer(123)}) {
-            public String[] getStrings() {
-                return new String[] { "" };
-            }
-        };
-
-        Object expected = new Long(gstring.toString());
-
-        assertConstructor(expected, new Object[] { gstring });
-    }
-
-    protected void assertConstructor(Object expected, Object arguments) throws Throwable {
-        Object value = invoke(expected.getClass().getName(), arguments);
-
-        assertEquals("Invoking overloaded method for arguments: " + InvokerHelper.toString(arguments), expected, value);
-    }
-
-    protected Object invoke(String type, Object args) throws Throwable {
-        try {
-            return invoker.invokeConstructor(type, args);
-        }
-        catch (InvokerInvocationException e) {
-            throw e.getCause();
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java
deleted file mode 100644
index 1de89d2..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.Closure;
-import groovy.lang.MetaClass;
-import groovy.util.GroovyTestCase;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Tests method invocation
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class InvokeGroovyMethodTest extends GroovyTestCase {
-
-    protected Invoker invoker = new Invoker();
-    private StringBuffer buffer;
-
-    // Method invocation tests
-    //-------------------------------------------------------------------------
-
-    public void testInvokeMethodNoParams() throws Throwable {
-        buffer = new StringBuffer();
-
-        List list = new ArrayList();
-        list.add("abc");
-        list.add("def");
-
-        invoker.invokeMethod(list, "each", new Closure(this) {
-            protected Object doCall(Object arguments) {
-                buffer.append(arguments.toString());
-                return null;
-            }
-
-            public MetaClass getMetaClass() {
-                return null;
-            }
-
-            public void setMetaClass(MetaClass metaClass) {
-            }
-        });
-
-        assertEquals("buffer", "abcdef", buffer.toString());
-    }
-
-    public void testMatchesWithObject() throws Throwable {
-        assertMatches(new Integer(1), new Integer(1), true);
-        assertMatches(new Integer(1), new Integer(2), false);
-    }
-
-    public void testMatchesWithClass() throws Throwable {
-        assertMatches(new Integer(1), Integer.class, true);
-        assertMatches(new Integer(1), Number.class, true);
-        assertMatches(new Integer(1), Double.class, false);
-    }
-
-    public void testMatchesWithList() throws Throwable {
-        assertMatches(new Integer(1), Arrays.asList(new Object[] { new Integer(2), new Integer(1)}), true);
-        assertMatches(new Integer(1), Arrays.asList(new Object[] { new Integer(2), new Integer(3)}), false);
-    }
-
-    // Implementation methods
-    //-------------------------------------------------------------------------
-    protected void assertMatches(Object switchValue, Object caseValue, boolean expected) {
-        assertEquals(
-            "Switch on: " + switchValue + " Case: " + caseValue,
-            expected,
-            InvokerHelper.isCase(switchValue, caseValue));
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java
deleted file mode 100644
index 6b2ba53..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.GString;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.IntRange;
-import groovy.util.GroovyTestCase;
-
-import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
-
-import junit.framework.AssertionFailedError;
-
-/**
- * Tests method invocation
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class InvokeMethodTest extends GroovyTestCase {
-
-    protected Invoker invoker = new Invoker();
-
-    // Method invocation tests
-    //-------------------------------------------------------------------------
-
-    public void testInvokeMethodNoParams() throws Throwable {
-        Object value = invoke(this, "mockCallWithNoParams", null);
-        assertEquals("return value", "NoParams", value);
-
-        value = invoke(this, "mockCallWithNoParams", new Object[0]);
-        assertEquals("return value", "NoParams", value);
-    }
-
-    public void testInvokeMethodOneParam() throws Throwable {
-        Object value = invoke(this, "mockCallWithOneParam", "abc");
-        assertEquals("return value", "OneParam", value);
-    }
-
-    public void testInvokeMethodOneParamWhichIsNull() throws Throwable {
-        Object value = invoke(this, "mockCallWithOneNullParam", new Object[] { null });
-        assertEquals("return value", "OneParamWithNull", value);
-
-        value = invoke(this, "mockCallWithOneNullParam", null);
-        assertEquals("return value", "OneParamWithNull", value);
-    }
-
-    public void testInvokeOverloadedMethodWithOneParamWhichIsNull() throws Throwable {
-        Object value = invoke(this, "mockOverloadedMethod", new Object[] { null });
-        assertEquals("return value", "Object", value);
-    }
-
-    public void testInvokeMethodOneCollectionParameter() throws Throwable {
-        Object[] foo = { "a", "b", "c" };
-
-        Object value = invoke(this, "mockCallWithOneCollectionParam", new Object[] { foo });
-        assertEquals("return value", new Integer(3), value);
-
-        List list = new ArrayList();
-        list.add("a");
-        list.add("b");
-        value = invoke(this, "mockCallWithOneCollectionParam", list);
-        assertEquals("return value", new Integer(2), value);
-    }
-
-    public void testInvokePrintlnMethod() throws Throwable {
-        Object value = invoke(System.out, "println", "testing System.out.println...");
-        assertEquals("return value", null, value);
-    }
-
-    public void testMethodChooserNull() throws Throwable {
-        assertMethodChooser("Object", new Object[] { null });
-    }
-
-    public void testMethodChooserNoParams() throws Throwable {
-        assertMethodChooser("void", null);
-    }
-
-    public void testMethodChooserObject() throws Throwable {
-        assertMethodChooser("Object", new Object());
-        assertMethodChooser("Object", new Date());
-    }
-
-    public void testMethodChooserString() throws Throwable {
-        assertMethodChooser("String", "foo");
-
-        /** @todo some type cooercion would be cool here... */
-        //assertMethodChooser("String", new StringBuffer());
-        //assertMethodChooser("String", new Character('a');
-    }
-
-    public void testMethodChooserNumber() throws Throwable {
-        assertMethodChooser("Number", new Integer(2));
-        assertMethodChooser("Number", new Double(2));
-    }
-
-    public void testMethodChooserTwoParams() throws Throwable {
-        List list = new ArrayList();
-        list.add("foo");
-        list.add("bar");
-        assertMethodChooser("Object,Object", list.toArray());
-
-        Object[] blah = { "a", "b" };
-        assertMethodChooser("Object,Object", blah);
-    }
-
-    public void testInstanceofWorksForArray() {
-        Class type = Object[].class;
-        Object value = new Object[1];
-        assertTrue("instanceof works for array", type.isInstance(value));
-    }
-
-    public void testMethodChooserTwoParamsWithSecondAnObjectArray() throws Throwable {
-        Object[] blah = { "a", new Object[] { "b" }
-        };
-        assertMethodChooser("Object,Object[]", blah);
-    }
-
-    public void testCollectionMethods() throws Throwable {
-        Object list = InvokerHelper.createList(new Object[] { "a", "b" });
-
-        Object value = invoke(list, "size", null);
-        assertEquals("size of collection", new Integer(2), value);
-
-        value = invoke(list, "contains", "a");
-        assertEquals("contains method", Boolean.TRUE, value);
-    }
-
-    public void testNewMethods() throws Throwable {
-        Object value = invoke("hello", "size", null);
-        assertEquals("size of string", new Integer(5), value);
-    }
-
-    public void testStaticMethod() throws Throwable {
-        Object value = invoke(DummyBean.class, "dummyStaticMethod", "abc");
-        assertEquals("size of string", "ABC", value);
-    }
-
-    public void testBaseClassMethod() throws Throwable {
-        Object object = new DummyBean();
-        Object value = invoke(object, "toString", null);
-        assertEquals("toString", object.toString(), value);
-    }
-
-	//SPG modified to reflect DefaultGroovyMethod name change and expected result from
-	//Integer/Integer division.
-    public void testDivideNumbers() throws Throwable {
-        assertMethodCall(new Double(10), "div", new Double(2), new Double(5));
-        assertMethodCall(new Double(10), "div", new Integer(2), new Double(5));
-        assertMethodCall(new Integer(10), "div", new Double(2), new Double(5));
-        assertMethodCall(new Integer(10), "div", new Integer(2), new java.math.BigDecimal("5"));
-    }
-
-    public void testBaseFailMethod() throws Throwable {
-        Object value;
-        try {
-            value = invoke(this, "fail", "hello");
-        }
-        catch (AssertionFailedError e) {
-            // worked
-        }
-    }
-
-    public void testToArrayOnList() throws Throwable {
-        List object = new ArrayList();
-        object.add("Hello");
-
-        Object[] value = (Object[]) invoke(object, "toArray", null);
-        assertArrayEquals(object.toArray(), value);
-        assertEquals(1, value.length);
-        assertEquals("Hello", value[0]);
-
-        value = (Object[]) invoke(object, "toArray", new Object[0]);
-        assertArrayEquals(object.toArray(), value);
-    }
-
-    public void testInvalidOverloading() throws Throwable {
-        try {
-            invoke(this, "badOverload", new Object[] { "a", "b" });
-            fail("Should fail as an unambiguous method is invoked");
-        }
-        catch (GroovyRuntimeException e) {
-            System.out.println("Caught: " + e);
-        }
-    }
-
-    public void testPlusWithNull() throws Throwable {
-        String param = "called with: ";
-        Object value = invoke(param, "plus", new Object[] { null });
-        assertEquals("called with null", param + null, value);
-    }
-
-    public void testCallIntMethodWithInteger() throws Throwable {
-        Object value = invoke(this, "overloadedRemove", new Object[] { new Integer(5)});
-        assertEquals("called with integer", "int5", value);
-    }
-
-    public void testCallListRemove() throws Throwable {
-        List list = new ArrayList();
-        list.add("foo");
-        list.add("bar");
-
-        Object value = invoke(list, "remove", new Object[] { new Integer(0)});
-
-        assertEquals("Should have just 1 item left: " + list, 1, list.size());
-    }
-
-    public void testCoerceGStringToString() throws Throwable {
-        GString param = new GString(new Object[] { "James" }) {
-            public String[] getStrings() {
-                return new String[] { "Hello " };
-            }
-        };
-        Object value = invoke(this, "methodTakesString", new Object[] { param });
-        assertEquals("converted GString to string", param.toString(), value);
-    }
-
-    public void testCoerceGStringToStringOnGetBytes() throws Throwable {
-        GString param = new GString(new Object[] { "US-ASCII" }) {
-            public String[] getStrings() {
-                return new String[] { "" };
-            }
-        };
-        Object value = invoke("test", "getBytes", new Object[] { param });
-        assertEquals("converted GString to string", "test".getBytes("US-ASCII").getClass(), value.getClass());
-    }
-
-    public void testBadBDToDoubleCoerce() throws Throwable {
-        try {
-            Object value = invoke(Math.class, "floor", new BigDecimal("1.7E309"));
-        } catch (GroovyRuntimeException e) {
-            assertTrue("Math.floor(1.7E309) should fail because it is out of range for a Double. "
-                    +e,e.getMessage().indexOf("out of range") > 0);
-            return;
-        }
-        fail("Math.floor(1.7E309) should fail because it is out of range for a Double.");        
-    }
-
-    public void testClassMethod() throws Throwable {
-        Class c = String.class;
-        Object value = invoke(c, "getName", null);
-        assertEquals("Class.getName()", c.getName(), value);
-        c = getClass();
-        value = invoke(c, "getName", null);
-        assertEquals("Class.getName()", c.getName(), value);
-    }
-
-    public void testProtectedMethod() throws Throwable {
-        String param = "hello";
-        Object value = invoke(this, "aProtectedMethod", param);
-        assertEquals("protected method call", aProtectedMethod(param), value);
-    }
-
-    public void testPrivateMethod() throws Throwable {
-        String param = "hello";
-        Object value = invoke(this, "aPrivateMethod", param);
-        assertEquals("private method call", aPrivateMethod(param), value);
-    }
-
-    public void testStringSubstringMethod() throws Throwable {
-        String object = "hello";
-        Object value = invoke(object, "substring", new Integer(2));
-        assertEquals("substring(2)", object.substring(2), value);
-
-        value = invoke(object, "substring", new Object[] { new Integer(1), new Integer(3)});
-        assertEquals("substring(1,3)", object.substring(1, 3), value);
-    }
-
-    public void testListGetWithRange() throws Throwable {
-        List list = Arrays.asList(new Object[] { "a", "b", "c" });
-        Object range = new IntRange(0, 2);
-        Object value = invoke(list, "getAt", range);
-        assertTrue("Returned List: " + value, value instanceof List);
-        List retList = (List) value;
-        assertEquals("List size", 3, retList.size());
-    }
-
-    public void testSetLenientOnDateFormat() throws Throwable {
-        SimpleDateFormat a = new SimpleDateFormat( "MM/dd/yyyy" );
-        
-        Object value = invoke(a, "setLenient", new Object[] { Boolean.FALSE });
-        assertEquals("void method", null, value);
-    }
-
-    public void testInvokeUnknownMethod() throws Throwable {
-        try {
-            Object value = invoke(this, "unknownMethod", "abc");
-            fail("Should have thrown an exception");
-        }
-        catch (GroovyRuntimeException e) {
-            // worked
-        }
-    }
-
-    public void testInvokeMethodWithWrongNumberOfParameters() throws Throwable {
-        try {
-            Object[] args = { "a", "b" };
-            Object value = invoke(this, "unknownMethod", args);
-            fail("Should have thrown an exception");
-        }
-        catch (GroovyRuntimeException e) {
-            // worked
-        }
-    }
-
-    public void testInvokeMethodOnNullObject() throws Throwable {
-        try {
-            invoke(null, "mockCallWithNoParams", null);
-            fail("Should have thrown an exception");
-        }
-        catch (NullPointerException e) {
-            // worked
-        }
-    }
-
-    // Mock methods used for testing
-    //-------------------------------------------------------------------------
-
-    public Object mockCallWithNoParams() {
-        return "NoParams";
-    }
-
-    public Object mockCallWithOneParam(Object value) {
-        assertEquals("Method not passed in the correct value", "abc", value);
-        return "OneParam";
-    }
-
-    public Object mockCallWithOneNullParam(Object value) {
-        assertEquals("Method not passed in the correct value", null, value);
-        return "OneParamWithNull";
-    }
-
-    public Integer mockCallWithOneCollectionParam(Object collection) {
-        Collection coll = InvokerHelper.asCollection(collection);
-        return new Integer(coll.size());
-    }
-
-    public Object mockOverloadedMethod() {
-        return "void";
-    }
-
-    public Object mockOverloadedMethod(Object object) {
-        return "Object";
-    }
-
-    public Object mockOverloadedMethod(Number object) {
-        return "Number";
-    }
-
-    public Object mockOverloadedMethod(String object) {
-        return "String";
-    }
-
-    public Object mockOverloadedMethod(Object object, Object bar) {
-        return "Object,Object";
-    }
-
-    public Object mockOverloadedMethod(Object object, Object[] array) {
-        return "Object,Object[]";
-    }
-
-    public Object badOverload(String a, Object b) {
-        return "String, Object";
-    }
-
-    public Object badOverload(Object a, String b) {
-        return "Object, String";
-    }
-
-    public Object methodTakesString(String x) {
-        return x;
-    }
-
-    public Object overloadedRemove(int idx) {
-        return "int" + idx;
-    }
-
-    public Object overloadedRemove(Object value) {
-        return "Object" + value;
-    }
-
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
-    protected Object aProtectedMethod(String param) {
-        return param + " there!";
-    }
-
-    private Object aPrivateMethod(String param) {
-        return param + " James!";
-    }
-
-    protected void assertMethodCall(Object object, String method, Object param, Object expected) {
-        Object value = InvokerHelper.invokeMethod(object, method, new Object[] { param });
-        assertEquals("result of method: " + method, expected, value);
-    }
-
-    /**
-	 * Asserts that invoking the method chooser finds the right overloaded
-	 * method implementation
-	 * 
-	 * @param expected
-	 *            is the expected value of the method
-	 * @param arguments
-	 *            the argument(s) to the method invocation
-	 */
-    protected void assertMethodChooser(Object expected, Object arguments) throws Throwable {
-        Object value = invoke(this, "mockOverloadedMethod", arguments);
-
-        assertEquals("Invoking overloaded method for arguments: " + InvokerHelper.toString(arguments), expected, value);
-    }
-
-    protected Object invoke(Object object, String method, Object args) throws Throwable {
-        try {
-            return invoker.invokeMethod(object, method, args);
-        }
-        catch (InvokerInvocationException e) {
-            throw e.getCause();
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokerTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokerTest.java
deleted file mode 100644
index eb29e2e..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/InvokerTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.GroovyRuntimeException;
-import groovy.util.GroovyTestCase;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Collections;
-import java.util.Arrays;
-
-
-/**
- * Test the Invoker class
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class InvokerTest extends GroovyTestCase {
-
-    protected Invoker invoker = new Invoker();
-
-    public void testAsCollectionWithArray() {
-        Object[] array = { "A", "B", "C" };
-        assertAsCollection(array, 3);
-    }
-
-    public void testAsCollectionWithMap() {
-        Map map = new HashMap();
-        map.put("A", "abc");
-        map.put("B", "def");
-        map.put("C", "xyz");
-        assertAsCollection(map, 3);
-    }
-
-    public void testAsCollectionWithList() {
-        List list = new ArrayList();
-        list.add("A");
-        list.add("B");
-        list.add("C");
-        assertAsCollection(list, 3);
-    }
-
-    public void testInvokerException() throws Throwable {
-        try {
-            throw new GroovyRuntimeException("message", new NullPointerException());
-        }
-        catch (GroovyRuntimeException e) {
-            // worked
-            assertEquals("message", e.getMessage());
-            assertTrue(e.getCause() instanceof NullPointerException);
-        }
-    }
-
-    public void testAsBoolean() {
-        assertAsBoolean(true, Boolean.TRUE);
-        assertAsBoolean(true, "true");
-        assertAsBoolean(true, "TRUE");
-        assertAsBoolean(true, "false");
-        assertAsBoolean(false, Boolean.FALSE);
-        assertAsBoolean(false, (String) null);
-        assertAsBoolean(true, new Integer(1234));
-        assertAsBoolean(false, new Integer(0));
-        assertAsBoolean(true, new Float(0.3f));
-        assertAsBoolean(true, new Double(3.0f));
-        assertAsBoolean(false, new Float(0.0f));
-		assertAsBoolean(false, Collections.EMPTY_LIST);
-		assertAsBoolean(true, Arrays.asList(new Integer[] { new Integer(1) }));
-       }
-    
-    public void testLessThan() {
-        assertTrue(InvokerHelper.compareLessThan(new Integer(1), new Integer(2)));
-        assertTrue(InvokerHelper.compareLessThanEqual(new Integer(2), new Integer(2)));
-    }
-    
-    public void testGreaterThan() {
-        assertTrue(InvokerHelper.compareGreaterThan(new Integer(3), new Integer(2)));
-        assertTrue(InvokerHelper.compareGreaterThanEqual(new Integer(2), new Integer(2)));
-    }
-    
-    public void testCompareTo() {
-        assertTrue(InvokerHelper.compareEqual("x", new Integer('x')));
-    }
-    
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
-    /**
-     * Asserts the asBoolean method returns the given flag
-     */
-    protected void assertAsBoolean(boolean expected, Object value) {
-        boolean answer = InvokerHelper.asBool(value);
-        assertEquals("value: " + value + " asBoolean()", expected, answer);
-    }
-
-    /**
-     * Asserts that the given object can be converted into a collection and iterator
-     * of the given size
-     */
-    protected void assertAsCollection(Object collectionObject, int count) {
-        Collection collection = invoker.asCollection(collectionObject);
-        assertTrue("Collection is not null", collection != null);
-        assertEquals("Collection size", count, collection.size());
-
-        assertIterator("collections iterator", collection.iterator(), count);
-        assertIterator("invoker.asIterator", invoker.asIterator(collectionObject), count);
-        assertIterator("invoker.asIterator(invoker.asCollection)", invoker.asIterator(collection), count);
-        assertIterator("invoker.asIterator(invoker.asIterator)", invoker.asIterator(invoker.asIterator(collectionObject)), count);
-    }
-
-    /**
-     * Asserts that the iterator is valid and of the right size
-     */
-    protected void assertIterator(String message, Iterator iterator, int count) {
-        for (int i = 0; i < count; i++) {
-            assertTrue(message + ": should have item: " + i, iterator.hasNext());
-            assertTrue(message + ": item: " + i + " should not be null", iterator.next() != null);
-        }
-
-        assertFalse(
-            message + ": should not have item after iterating through: " + count + " items",
-            iterator.hasNext());
-    }
-
-   
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java
deleted file mode 100644
index 7ba5c18..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.util.GroovyTestCase;
-
-/**
- * Tests failing method invocations to ensure correct exceptions
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MethodFailureTest extends GroovyTestCase {
-
-    public void testFailingMethod() {
-        MockGroovyObject object = new MockGroovyObject();
-        try {
-            object.invokeMethod("nonExistentMethod", "hello");
-
-            fail("Should have thrown an exception");
-        }
-        catch (GroovyRuntimeException e) {
-            System.out.println(e);
-        }
-    }
-
-    public void testMethodWhichCallsTheFailingMethod() {
-        MockGroovyObject object = new MockGroovyObject();
-        try {
-            object.invokeMethod("methodThatFails", null);
-
-            fail("Should have thrown an exception");
-        }
-        catch (GroovyRuntimeException e) {
-            System.out.println(e);
-            //e.printStackTrace();
-        }
-    }
-
-    public void testMethodWhichCallsTheFailingMethodInsideAClosure() {
-        MockGroovyObject object = new MockGroovyObject();
-        try {
-            object.invokeMethod("callClosure", new Closure(this) {
-                protected Object doCall(GroovyObject object) {
-                    return object.invokeMethod("nonExistentMethod", "hello");
-                }
-            });
-
-            fail("Should have thrown an exception");
-        }
-        catch (GroovyRuntimeException e) {
-            System.out.println(e);
-            //e.printStackTrace();
-        }
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodKeyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodKeyTest.java
deleted file mode 100644
index b1b1df7..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MethodKeyTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.runtime;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MethodKeyTest extends TestCase {
-
-    public void testDefaultImplementation() throws Exception {
-        MethodKey a = new DefaultMethodKey("foo", new Class[] { Object.class, Integer.class });
-        MethodKey a2 = new DefaultMethodKey("foo", new Class[] { Object.class, Integer.class });
-        MethodKey b = new DefaultMethodKey("foo", new Class[] { Object.class });
-        MethodKey c = new DefaultMethodKey("bar", new Class[] { Object.class, Integer.class });
-
-        assertCompare(a, a, true);
-        assertCompare(a, a2, true);
-        assertCompare(b, b, true);
-
-        assertCompare(a, b, false);
-        assertCompare(a, c, false);
-        assertCompare(b, c, false);
-    }
-
-    public void testTemporaryImplementation() throws Exception {
-        MethodKey a = new DefaultMethodKey("foo", new Class[] { Object.class, Integer.class });
-        MethodKey a2 = new TemporaryMethodKey("foo", new Object[] { new Object(), new Integer(1) });
-        MethodKey b = new TemporaryMethodKey("foo", new Object[] { new Object() });
-        MethodKey c = new TemporaryMethodKey("bar", new Object[] { new Object(), new Integer(1) });
-
-        assertCompare(a, a, true);
-        assertCompare(a, a2, true);
-        assertCompare(b, b, true);
-
-        assertCompare(a, b, false);
-        assertCompare(a, c, false);
-        assertCompare(b, c, false);
-    }
-
-    protected void assertCompare(Object a, Object b, boolean expected) {
-        assertEquals("Compare " + a + " to " + b, expected, a.equals(b));
-        if (expected) {
-            assertEquals("hashCode " + a + " to " + b, a.hashCode(), b.hashCode());
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MockGroovyObject.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MockGroovyObject.java
deleted file mode 100644
index 62f22d9..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/MockGroovyObject.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObjectSupport;
-
-/**
- * A POGO used by the test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class MockGroovyObject extends GroovyObjectSupport {
-
-    public Object methodThatFails() {
-        return invokeMethod("nonExistentMethod", "hello");
-    }
-    
-    public Object callClosure(Closure closure) {
-        return closure.call(this);
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/NewStaticMetaMethodTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/NewStaticMetaMethodTest.java
deleted file mode 100644
index bbbe0cb..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/NewStaticMetaMethodTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.runtime;
-
-import java.lang.reflect.Method;
-
-import junit.framework.TestCase;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class NewStaticMetaMethodTest extends TestCase {
-
-    public void testInvokeMetaMethod() throws Exception {
-        Method method = getClass().getMethod("dummyMethod", new Class[] { String.class, String.class });
-        assertTrue("Should have found a method", method != null);
-
-        NewInstanceMetaMethod metaMethod = createNewMetaMethod(method);
-
-        Object answer = metaMethod.invoke("abc", new Object[] { "xyz" });
-        assertEquals("def", answer);
-
-        assertTrue("Should not appear as static method", metaMethod.isStatic() == false);
-    }
-
-    public void testInvokeDefaultGroovyMethod() throws Exception {
-        Method method = DefaultGroovyMethods.class.getMethod("plus", new Class[] { String.class, Object.class });
-        assertTrue("Should have found a method", method != null);
-
-        NewInstanceMetaMethod metaMethod = createNewMetaMethod(method);
-
-        Object answer = metaMethod.invoke("abc", new Object[] { "123" });
-        assertEquals("abc123", answer);
-
-        System.out.println("Found: " + answer);
-    }
-
-    public void testInvokeDefaultGroovyMethodUsingMetaClass() {
-        Object answer = InvokerHelper.invokeMethod("abc", "plus", new Object[] { "123" });
-        assertEquals("abc123", answer);
-
-        System.out.println("Found: " + answer);
-    }
-
-    public static String dummyMethod(String foo, String bar) throws Exception {
-        assertEquals("abc", foo);
-        assertEquals("xyz", bar);
-        return "def";
-    }
-
-    protected NewInstanceMetaMethod createNewMetaMethod(Method method) {
-        return new NewInstanceMetaMethod(new ReflectionMetaMethod(method));
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/PropertyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/PropertyTest.java
deleted file mode 100644
index 5c8417d..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/PropertyTest.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.Closure;
-import groovy.lang.MissingMethodException;
-import groovy.util.GroovyTestCase;
-import groovy.util.Node;
-
-import java.awt.HeadlessException;
-import java.awt.Point;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-
-/**
- * Test the property access of the Invoker class
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class PropertyTest extends GroovyTestCase {
-
-    protected Invoker invoker = new Invoker();
-
-    public void testMapProperties() throws Exception {
-        Map map = new HashMap();
-        map.put("foo", "abc");
-        map.put("bar", new Integer(123));
-
-        assertGetSetProperty(map, "foo", "abc", "def");
-        assertGetSetProperty(map, "bar", new Integer(123), new Double(12.34));
-    }
-
-    public void testBeanProperties() throws Exception {
-        DummyBean bean = new DummyBean();
-
-        assertGetSetProperty(bean, "name", "James", "Bob");
-        assertGetSetProperty(bean, "i", new Integer(123), new Integer(455));
-
-        // dynamic properties
-        assertGetSetProperty(bean, "dynamicFoo", null, "aValue");
-        assertGetSetProperty(bean, "dynamicFoo", "aValue", "NewValue");
-    }
-
-    public void testUsingMethodProperty() throws Exception {
-        DummyBean bean = new DummyBean();
-
-        assertGetSetProperty(bean, "name", "James", "Bob");
-
-        Object value = InvokerHelper.getProperty(bean, "getName");
-        assertTrue("Should have returned a closure: " + value, value instanceof Closure);
-        Closure closure = (Closure) value;
-        Object result = closure.call(null);
-        assertEquals("Result of call to closure", "Bob", result);
-    }
-
-    public void testStaticProperty() throws Exception {
-        Object value = InvokerHelper.getProperty(System.class, "out");
-        assertEquals("static property out", System.out, value);
-    }
-
-    public void testClassProperty() throws Exception {
-        Class c = String.class;
-        Object value = InvokerHelper.getProperty(c, "name");
-        assertEquals("class name property", c.getName(), value);
-    }
-
-    public void testMapEntryProperty() throws Exception {
-        HashMap map = new HashMap();
-        map.put("a", "x");
-        Object[] array = map.entrySet().toArray();
-        Object entry = array[0];
-
-        Object key = InvokerHelper.getProperty(entry, "key");
-        assertEquals("key property", "a", key);
-
-        Object value = InvokerHelper.getProperty(entry, "value");
-        assertEquals("value property", "x", value);
-    }
-
-    public void testMethodProperty() throws Exception {
-        Object value = InvokerHelper.getProperty(this, "getCheese");
-        assertTrue("Should have returned a closure: " + value, value instanceof Closure);
-
-        Object result = ((Closure) value).call();
-        assertEquals("result of closure call", getCheese(), result);
-
-        System.out.println("Closure: " + value + " and cheese: " + result);
-    }
-
-    public void testListCoercionProperty() throws Exception {
-        DummyBean bean = new DummyBean();
-        List list = new ArrayList();
-        list.add(new Integer(10));
-        list.add(new Integer(20));
-
-        InvokerHelper.setProperty(bean, "point", list);
-        assertEquals("Should have set a point", new Point(10, 20), bean.getPoint());
-    }
-
-    public void testListCoercionPropertyOnJFrame() throws Exception {
-        try {
-	        JFrame bean = new JFrame();
-	        List list = new ArrayList();
-	        list.add(new Integer(10));
-	        list.add(new Integer(20));
-	
-	        InvokerHelper.setProperty(bean, "location", list);
-	        assertEquals("Should have set a point", new Point(10, 20), bean.getLocation());
-        }
-        catch (HeadlessException e) {
-            // its fine to not run this test on headless environments
-        }
-        catch (MissingMethodException e) {
-            System.out.println("Failed with cause: " + e);
-            e.printStackTrace();
-            fail("Should not have throw: " + e);
-        }
-    }
-
-    public void testListNavigationProperty() throws Exception {
-        List list = new ArrayList();
-        list.add(new DummyBean("James"));
-        list.add(new DummyBean("Bob"));
-
-        List value = (List) InvokerHelper.getProperty(list, "name");
-        assertArrayEquals(new Object[] { "James", "Bob" }, value.toArray());
-    }
-
-    public void testListOfListNavigationProperty() throws Exception {
-       List list = new ArrayList();
-       list.add(new DummyBean("James"));
-       list.add(new DummyBean("Bob"));
-
-       List listOfList = new ArrayList();
-       listOfList.add(list);
-       
-       List value = (List) InvokerHelper.getProperty(listOfList, "name");
-       assertArrayEquals(new Object[] { "James", "Bob" }, value.toArray());
-   }
-
-    public void testNodeNavigationProperty() throws Exception {
-        Node z = new Node(null, "z");
-        Node y = new Node(null, "y");
-
-        List children = new ArrayList();
-        children.add(y);
-        children.add(z);
-
-        Node x = new Node(null, "x", children);
-
-        children = new ArrayList();
-        children.add(x);
-        Node b = new Node(null, "b", children);
-
-        // @todo should try with just a node as the child
-
-        List value = (List) InvokerHelper.getProperty(b, "x");
-        assertArrayEquals(new Object[] { x }, value.toArray());
-
-        value = (List) InvokerHelper.getProperty(value, "z");
-        assertArrayEquals(new Object[] { z }, value.toArray());
-    }
-
-    public void testUsingInPropertyOnProcessViaGroovyMethod() throws Exception {
-        Process process = DefaultGroovyMethods.execute("java -version");
-        Object value = InvokerHelper.getProperty(process, "in");
-        assertNotNull(value);
-        
-        System.out.println("Found in: " + value);
-        
-        process.destroy();
-    }
-    
-    public Object getCheese() {
-        return "cheddar";
-    }
-
-    public void testComponentParent() {
-        JPanel panel = new JPanel();
-        JButton bean = new JButton();
-        
-        panel.add(bean);
-        
-        Object value = InvokerHelper.getProperty(bean, "parent");
-        assertTrue(value != null);
-    }
-    
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
-    protected void assertGetSetProperty(Object object, String property, Object currentValue, Object newValue) {
-        assertGetProperty(object, property, currentValue);
-
-        InvokerHelper.setProperty(object, property, newValue);
-
-        assertGetProperty(object, property, newValue);
-    }
-
-    protected void assertGetProperty(Object object, String property, Object expected) {
-        Object value = InvokerHelper.getProperty(object, property);
-
-        assertEquals("property: " + property + " of: " + object, expected, value);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/StaticPrintlnTest.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/StaticPrintlnTest.groovy
deleted file mode 100644
index 9126752..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/StaticPrintlnTest.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-import groovy.bugs.TestSupport
-
-class StaticPrintlnTest extends TestSupport {
-
-    void testStaticPrint() {
-        main(getMockArguments())
-	}
-	
-    static void main(args) {
-        println("called with: " + args)
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/TupleListTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/TupleListTest.java
deleted file mode 100644
index 1e17c76..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/runtime/TupleListTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.runtime;
-
-import groovy.util.GroovyTestCase;
-
-import java.util.Iterator;
-import java.util.Map;
-
-
-/**
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class TupleListTest extends GroovyTestCase {
-
-    public void testIterateOverTuple() throws Exception {
-        StringBuffer buffer = new StringBuffer();
-        for (Iterator iter = InvokerHelper.asIterator(InvokerHelper.createTuple(new Object[] { "a", "b", "c" }));
-            iter.hasNext();
-            ) {
-            Object i = iter.next();
-            buffer.append(i);
-        }
-
-        assertEquals("buffer", "abc", buffer.toString());
-    }
-
-    public void testIterateOverList() throws Exception {
-        StringBuffer buffer = new StringBuffer();
-        for (Iterator iter = InvokerHelper.asIterator(InvokerHelper.createList(new Object[] { "a", "b", "c" }));
-            iter.hasNext();
-            ) {
-            Object i = iter.next();
-            buffer.append(i);
-        }
-
-        assertEquals("buffer", "abc", buffer.toString());
-    }
-
-    public void testCreateMap() throws Exception {
-        Map map = InvokerHelper.createMap(new Object[] {"a", "x", "b", "y"});
-
-        assertNotNull("map", map);
-        assertEquals("size", 2, map.size());
-        assertEquals("value of a", "x", map.get("a"));
-        assertEquals("value of b", "y", map.get("b"));            
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/AbstractTokenStreamTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/AbstractTokenStreamTest.java
deleted file mode 100644
index 03a5264..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/AbstractTokenStreamTest.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.codehaus.groovy.syntax;
-
-
-import groovy.util.GroovyTestCase;
-import org.codehaus.groovy.GroovyBugError;
-
-
-public class AbstractTokenStreamTest
-    extends GroovyTestCase
-{
-    public static class MockTokenStream
-        extends AbstractTokenStream
-    {
-        private int cur;
-        private int checkpoint;
-        private Token[] tokens;
-
-        public MockTokenStream(Token[] tokens)
-        {
-            this.tokens = tokens;
-            this.cur  = 0;
-        }
-
-        public Token nextToken()
-            throws ReadException, SyntaxException
-        {
-            if ( this.cur >= this.tokens.length )
-            {
-                return null;
-            }
-
-            Token token = this.tokens[ this.cur ];
-
-            ++this.cur;
-
-            return token;
-        }
-
-        public void checkpoint() {
-            checkpoint = cur;
-        }
-
-        public void restore() {
-            cur = checkpoint;
-        }
-    }
-
-    public void testNextToken()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newSymbol( "(", 1, 1 ),
-                Token.newSymbol( ")", 1, 2 )
-            };
-
-        MockTokenStream in = new MockTokenStream( tokens );
-
-
-        assertSame( tokens[0],
-                    in.nextToken() );
-        
-        assertSame( tokens[1],
-                    in.nextToken() );
-
-        assertNull( in.nextToken() );
-
-    }
-
-    public void testLa()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newSymbol( "(", 1, 1 ),
-                Token.newSymbol( ")", 1, 2 )
-            };
-
-        MockTokenStream in = new MockTokenStream( tokens );
-
-
-        assertSame( tokens[0],
-                    in.la() );
-        
-        assertSame( tokens[0],
-                    in.la() );
-
-        assertSame( tokens[0],
-                    in.la( 1 ) );
-        
-        assertSame( tokens[0],
-                    in.la( 1 ) );
-
-        assertSame( tokens[1],
-                    in.la( 2 ) );
-        
-        assertSame( tokens[1],
-                    in.la( 2 ) );
-    }
-
-    public void testLaAndConsume()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newSymbol( "(", 1, 1 ),
-                Token.newSymbol( ")", 1, 2 )
-            };
-        
-        MockTokenStream in = new MockTokenStream( tokens );
-        
-        assertSame( tokens[0],
-                    in.la() );
-        
-        assertSame( tokens[0],
-                    in.la() );
-        
-        assertSame( tokens[0],
-                    in.la( 1 ) );
-        
-        assertSame( tokens[0],
-                    in.la( 1 ) );
-        
-        assertSame( tokens[1],
-                    in.la( 2 ) );
-
-        in.consume( Types.LEFT_PARENTHESIS );
-
-        assertSame( tokens[1],
-                    in.la() );
-        
-        assertSame( tokens[1],
-                    in.la() );
-        
-        assertSame( tokens[1],
-                    in.la( 1 ) );
-        
-        assertSame( tokens[1],
-                    in.la( 1 ) );
-    }
-
-    public void testLaOutOfOrder()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newIdentifier( "cheeseIt", 1, 1 ),
-                Token.newSymbol( "(", 1, 10 ),
-                Token.newSymbol( ")", 1, 11 )
-            };
-
-        MockTokenStream in = new MockTokenStream( tokens );
-
-        assertSame( tokens[2],
-                    in.la( 3 ) );
-
-        assertSame( tokens[1],
-                    in.la( 2 ) );
-
-        assertSame( tokens[0],
-                    in.la( 1 ) );
-    }
-
-    public void testLaAtEnd()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-            };
-        
-        MockTokenStream in = new MockTokenStream( tokens );
-        
-        assertNull( in.la() );
-
-        assertNull( in.la() );
-
-        assertNull( in.la() );
-    }
-
-    /** 
-     * this test is broken as we have a large look-ahead token buffer now 
-     * to handle newlines. if we supported mid-stream consumption 
-     * (e.g. consumeAtIndex(3) then we could avoid such a large buffer
-     */
-    public void DISABLED_testExhaustLookAhead()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newSymbol( "(", 1, 1 ),
-                Token.newSymbol( ")", 1, 2 ),
-                Token.newSymbol( "[", 1, 3 ),
-                Token.newSymbol( "]", 1, 4 ),
-                Token.newSymbol( "{", 1, 5 ),
-                Token.newSymbol( "}", 1, 6 )
-            };
-        
-        MockTokenStream in = new MockTokenStream( tokens );
-        
-        assertSame( tokens[0],
-                    in.la() );
-        
-        assertSame( tokens[1],
-                    in.la( 2 ) );
-
-        assertSame( tokens[2],
-                    in.la( 3 ) );
-
-        assertSame( tokens[3],
-                    in.la( 4 ) );
-
-        assertSame( tokens[4],
-                    in.la( 5 ) );
-        try
-        {
-            in.la( 6 );
-            fail( "should have thrown GroovyBugError" );
-        }
-        catch (GroovyBugError e)
-        {
-            // expected and correct
-//            assertEquals( 6,
-//                          e.getLookAhead() );
-        }
-    }
-
-    public void testTokenMismatch()
-        throws Exception
-    {
-        Token[] tokens = new Token[]
-            {
-                Token.newSymbol( "(", 1, 1 ),
-                Token.newSymbol( ")", 1, 2 )
-            };
-        
-        MockTokenStream in = new MockTokenStream( tokens );
-        
-        try
-        {
-            in.consume( Types.RIGHT_PARENTHESIS );
-            fail( "should have thrown TokenMismatchException" );
-        }
-        catch (TokenMismatchException e)
-        {
-            // expected and correct
-
-            assertSame( tokens[0],
-                        e.getUnexpectedToken() );
-
-            assertEquals( Types.RIGHT_PARENTHESIS,
-                          e.getExpectedType() );
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/TokenTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/TokenTest.java
deleted file mode 100644
index 0ef873f..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/TokenTest.java
+++ /dev/null
@@ -1,758 +0,0 @@
-package org.codehaus.groovy.syntax;
-
-
-import groovy.util.GroovyTestCase;
-
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-
-public class TokenTest
-    extends GroovyTestCase
-{
-
-    public void testNothing()
-    {
-    }
-
-/*
-    private static final int LINE = 11;
-    private static final int COLUMN = 33;
-
-    public void testConstruct()
-    {
-        Token token = new Token( 42,
-                                 "forty-two",
-                                 11,
-                                 22 );
-
-        assertEquals( 42,
-                      token.getType() );
-
-        assertEquals( "forty-two",
-                      token.getText() );
-
-        assertEquals( 11,
-                      token.getStartLine() );
-
-        assertEquals( 22,
-                      token.getStartColumn() );
-    }
-
-    public void testLeftCurlyBrace()
-    {
-        Token token = Token.leftCurlyBrace( LINE,
-                                            COLUMN );
-
-        assertToken( token,
-                     Token.LEFT_CURLY_BRACE,
-                     "{" );
-    }
-
-    public void testRightCurlyBrace()
-    {
-        Token token = Token.rightCurlyBrace( LINE,
-                                             COLUMN );
-
-        assertToken( token,
-                     Token.RIGHT_CURLY_BRACE,
-                     "}" );
-    }
-
-    public void testLeftSquareBracket()
-    {
-        Token token = Token.leftSquareBracket( LINE,
-                                               COLUMN );
-
-        assertToken( token,
-                     Token.LEFT_SQUARE_BRACKET,
-                     "[" );
-    }
-
-    public void testRightSquareBracket()
-    {
-        Token token = Token.rightSquareBracket( LINE,
-                                                COLUMN );
-
-        assertToken( token,
-                     Token.RIGHT_SQUARE_BRACKET,
-                     "]" );
-    }
-
-    public void testLeftParenthesis()
-    {
-        Token token = Token.leftParenthesis( LINE,
-                                             COLUMN );
-
-        assertToken( token,
-                     Token.LEFT_PARENTHESIS,
-                     "(" );
-    }
-
-    public void testRightParenthesis()
-    {
-        Token token = Token.rightParenthesis( LINE,
-                                              COLUMN );
-
-        assertToken( token,
-                     Token.RIGHT_PARENTHESIS,
-                     ")" );
-    }
-
-    public void testDot()
-    {
-        Token token = Token.dot( LINE,
-                                 COLUMN );
-
-        assertToken( token,
-                     Token.DOT,
-                     "." );
-    }
-
-    public void testDotDot()
-    {
-        Token token = Token.dotDot( LINE,
-                                    COLUMN );
-
-        assertToken( token,
-                     Token.DOT_DOT,
-                     ".." );
-    }
-
-    public void testNot()
-    {
-        Token token = Token.not( LINE,
-                                 COLUMN );
-
-        assertToken( token,
-                     Token.NOT,
-                     "!" );
-    }
-
-    public void testCompareNotEqual()
-    {
-        Token token = Token.compareNotEqual( LINE,
-                                             COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_NOT_EQUAL,
-                     "!=" );
-    }
-
-    public void testEqual()
-    {
-        Token token = Token.equal( LINE,
-                                   COLUMN );
-
-        assertToken( token,
-                     Token.EQUAL,
-                     "=" );
-    }
-
-    public void testCompareIdentical()
-    {
-        Token token = Token.compareIdentical( LINE,
-                                              COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_IDENTICAL,
-                     "===" );
-    }
-
-    public void testCompareEqual()
-    {
-        Token token = Token.compareEqual( LINE,
-                                          COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_EQUAL,
-                     "==" );
-    }
-
-    public void testCompareLessThan()
-    {
-        Token token = Token.compareLessThan( LINE,
-                                             COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_LESS_THAN,
-                     "<" );
-    }
-
-    public void testCompareLessThanEqual()
-    {
-        Token token = Token.compareLessThanEqual( LINE,
-                                                  COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_LESS_THAN_EQUAL,
-                     "<=" );
-    }
-
-    public void testCompareGreaterThan()
-    {
-        Token token = Token.compareGreaterThan( LINE,
-                                                COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_GREATER_THAN,
-                     ">" );
-    }
-
-    public void testCompareGreaterThanEqual()
-    {
-        Token token = Token.compareGreaterThanEqual( LINE,
-                                                     COLUMN );
-
-        assertToken( token,
-                     Token.COMPARE_GREATER_THAN_EQUAL,
-                     ">=" );
-    }
-
-    public void testLogicalOr()
-    {
-        Token token = Token.logicalOr( LINE,
-                                       COLUMN );
-
-        assertToken( token,
-                     Token.LOGICAL_OR,
-                     "||" );
-    }
-
-    public void testLogicalAnd()
-    {
-        Token token = Token.logicalAnd( LINE,
-                                        COLUMN );
-
-        assertToken( token,
-                     Token.LOGICAL_AND,
-                     "&&" );
-    }
-
-    public void testPlus()
-    {
-        Token token = Token.plus( LINE,
-                                  COLUMN );
-
-        assertToken( token,
-                     Token.PLUS,
-                     "+" );
-    }
-
-    public void testPlusPlus()
-    {
-        Token token = Token.plusPlus( LINE,
-                                      COLUMN );
-
-        assertToken( token,
-                     Token.PLUS_PLUS,
-                     "++" );
-    }
-
-    public void testPlusEqual()
-    {
-        Token token = Token.plusEqual( LINE,
-                                       COLUMN );
-
-        assertToken( token,
-                     Token.PLUS_EQUAL,
-                     "+=" );
-    }
-
-    public void testMinus()
-    {
-        Token token = Token.minus( LINE,
-                                   COLUMN );
-
-        assertToken( token,
-                     Token.MINUS,
-                     "-" );
-    }
-
-    public void testMinusMinus()
-    {
-        Token token = Token.minusMinus( LINE,
-                                        COLUMN );
-
-        assertToken( token,
-                     Token.MINUS_MINUS,
-                     "--" );
-    }
-
-    public void testMinusEqual()
-    {
-        Token token = Token.minusEqual( LINE,
-                                        COLUMN );
-
-        assertToken( token,
-                     Token.MINUS_EQUAL,
-                     "-=" );
-    }
-
-    public void testDivide()
-    {
-        Token token = Token.divide( LINE,
-                                    COLUMN );
-
-        assertToken( token,
-                     Token.DIVIDE,
-                     "/" );
-    }
-
-    public void testDivideEqual()
-    {
-        Token token = Token.divideEqual( LINE,
-                                         COLUMN );
-
-        assertToken( token,
-                     Token.DIVIDE_EQUAL,
-                     "/=" );
-    }
-
-    public void testMod()
-    {
-        Token token = Token.mod( LINE,
-                                 COLUMN );
-
-        assertToken( token,
-                     Token.MOD,
-                     "%" );
-    }
-
-    public void testModEqual()
-    {
-        Token token = Token.modEqual( LINE,
-                                      COLUMN );
-
-        assertToken( token,
-                     Token.MOD_EQUAL,
-                     "%=" );
-    }
-
-    public void testMultiply()
-    {
-        Token token = Token.multiply( LINE,
-                                      COLUMN );
-
-        assertToken( token,
-                     Token.MULTIPLY,
-                     "*" );
-    }
-
-    public void testMultiplyEqual()
-    {
-        Token token = Token.multiplyEqual( LINE,
-                                           COLUMN );
-
-        assertToken( token,
-                     Token.MULTIPLY_EQUAL,
-                     "*=" );
-    }
-
-    public void testComma()
-    {
-        Token token = Token.comma( LINE,
-                                   COLUMN );
-
-        assertToken( token,
-                     Token.COMMA,
-                     "," );
-    }
-
-    public void testColon()
-    {
-        Token token = Token.colon( LINE,
-                                   COLUMN );
-
-        assertToken( token,
-                     Token.COLON,
-                     ":" );
-    }
-
-    public void testSemicolon()
-    {
-        Token token = Token.semicolon( LINE,
-                                       COLUMN );
-
-        assertToken( token,
-                     Token.SEMICOLON,
-                     ";" );
-    }
-
-    public void testQuestion()
-    {
-        Token token = Token.question( LINE,
-                                      COLUMN );
-
-        assertToken( token,
-                     Token.QUESTION,
-                     "?" );
-    }
-
-    public void testPipe()
-    {
-        Token token = Token.pipe( LINE,
-                                  COLUMN );
-
-        assertToken( token,
-                     Token.PIPE,
-                     "|" );
-    }
-
-    public void testDoubleQuoteString()
-    {
-        Token token = Token.doubleQuoteString( LINE,
-                                               COLUMN,
-                                               "cheese" );
-
-        assertToken( token,
-                     Token.DOUBLE_QUOTE_STRING,
-                     "cheese",
-                     "<string literal>");
-    }
-
-    public void testSingleQuoteString()
-    {
-        Token token = Token.singleQuoteString( LINE,
-                                               COLUMN,
-                                               "cheese" );
-
-        assertToken( token,
-                     Token.SINGLE_QUOTE_STRING,
-                     "cheese",
-                     "<string literal>" );
-    }
-
-    public void testIdentifier()
-    {
-        Token token = Token.identifier( LINE,
-                                        COLUMN,
-                                        "cheese" );
-
-        assertToken( token,
-                     Token.IDENTIFIER,
-                     "cheese",
-                     "<identifier>" );
-    }
-
-    public void testIntegerNumber()
-    {
-        Token token = Token.integerNumber( LINE,
-                                           COLUMN,
-                                           "42" );
-
-        assertToken( token,
-                     Token.INTEGER_NUMBER,
-                     "42",
-                     "<number>" );
-    }
-
-    public void testFloatNumber()
-    {
-        Token token = Token.floatNumber( LINE,
-                                         COLUMN,
-                                         "42.84" );
-
-        assertToken( token,
-                     Token.FLOAT_NUMBER,
-                     "42.84",
-                     "<number>" );
-    }
-
-    // ----------------------------------------------------------------------
-    // ----------------------------------------------------------------------
-
-    public void testKeyword_As()
-    {
-        assertKeywordToken( "as",
-                            Token.KEYWORD_AS );
-    }
-
-    public void testKeyword_Abstract()
-    {
-        assertKeywordToken( "abstract",
-                            Token.KEYWORD_ABSTRACT );
-    }
-
-    public void testKeyword_Break()
-    {
-        assertKeywordToken( "break",
-                            Token.KEYWORD_BREAK );
-    }
-
-    public void testKeyword_Case()
-    {
-        assertKeywordToken( "case",
-                            Token.KEYWORD_CASE );
-    }
-
-    public void testKeyword_Catch()
-    {
-        assertKeywordToken( "catch",
-                            Token.KEYWORD_CATCH );
-    }
-
-    public void testKeyword_Class()
-    {
-        assertKeywordToken( "class",
-                            Token.KEYWORD_CLASS );
-    }
-
-    public void testKeyword_Const()
-    {
-        assertKeywordToken( "const",
-                            Token.KEYWORD_CONST );
-    }
-
-    public void testKeyword_Continue()
-    {
-        assertKeywordToken( "continue",
-                            Token.KEYWORD_CONTINUE );
-    }
-
-    public void testKeyword_Default()
-    {
-        assertKeywordToken( "default",
-                            Token.KEYWORD_DEFAULT );
-    }
-
-    public void testKeyword_Do()
-    {
-        assertKeywordToken( "do",
-                            Token.KEYWORD_DO );
-    }
-
-    public void testKeyword_Else()
-    {
-        assertKeywordToken( "else",
-                            Token.KEYWORD_ELSE );
-    }
-
-    public void testKeyword_Extends()
-    {
-        assertKeywordToken( "extends",
-                            Token.KEYWORD_EXTENDS );
-    }
-
-    public void testKeyword_Final()
-    {
-        assertKeywordToken( "final",
-                            Token.KEYWORD_FINAL );
-    }
-
-    public void testKeyword_Finally()
-    {
-        assertKeywordToken( "finally",
-                            Token.KEYWORD_FINALLY );
-    }
-
-    public void testKeyword_For()
-    {
-        assertKeywordToken( "for",
-                            Token.KEYWORD_FOR );
-    }
-
-    public void testKeyword_Goto()
-    {
-        assertKeywordToken( "goto",
-                            Token.KEYWORD_GOTO );
-    }
-
-    public void testKeyword_If()
-    {
-        assertKeywordToken( "if",
-                            Token.KEYWORD_IF );
-    }
-
-    public void testKeyword_Implements()
-    {
-        assertKeywordToken( "implements",
-                            Token.KEYWORD_IMPLEMENTS );
-    }
-
-    public void testKeyword_Import()
-    {
-        assertKeywordToken( "import",
-                            Token.KEYWORD_IMPORT );
-    }
-
-    public void testKeyword_Instanceof()
-    {
-        assertKeywordToken( "instanceof",
-                            Token.KEYWORD_INSTANCEOF );
-    }
-
-    public void testKeyword_Interface()
-    {
-        assertKeywordToken( "interface",
-                            Token.KEYWORD_INTERFACE );
-    }
-
-    public void testKeyword_Native()
-    {
-        assertKeywordToken( "native",
-                            Token.KEYWORD_NATIVE );
-    }
-
-    public void testKeyword_New()
-    {
-        assertKeywordToken( "new",
-                            Token.KEYWORD_NEW );
-    }
-
-    public void testKeyword_Package()
-    {
-        assertKeywordToken( "package",
-                            Token.KEYWORD_PACKAGE );
-    }
-
-    public void testKeyword_Private()
-    {
-        assertKeywordToken( "private",
-                            Token.KEYWORD_PRIVATE );
-    }
-
-    public void testKeyword_Property()
-    {
-        assertKeywordToken( "property",
-                            Token.KEYWORD_PROPERTY );
-    }
-
-    public void testKeyword_Protected()
-    {
-        assertKeywordToken( "protected",
-                            Token.KEYWORD_PROTECTED );
-    }
-
-    public void testKeyword_Public()
-    {
-        assertKeywordToken( "public",
-                            Token.KEYWORD_PUBLIC );
-    }
-
-    public void testKeyword_Return()
-    {
-        assertKeywordToken( "return",
-                            Token.KEYWORD_RETURN );
-    }
-
-    public void testKeyword_Static()
-    {
-        assertKeywordToken( "static",
-                            Token.KEYWORD_STATIC );
-    }
-
-    public void testKeyword_Super()
-    {
-        assertKeywordToken( "super",
-                            Token.KEYWORD_SUPER );
-    }
-
-    public void testKeyword_Switch()
-    {
-        assertKeywordToken( "switch",
-                            Token.KEYWORD_SWITCH );
-    }
-
-    public void testKeyword_Synchronized()
-    {
-        assertKeywordToken( "synchronized",
-                            Token.KEYWORD_SYNCHRONIZED );
-    }
-
-    public void testKeyword_This()
-    {
-        assertKeywordToken( "this",
-                            Token.KEYWORD_THIS );
-    }
-
-    public void testKeyword_Throw()
-    {
-        assertKeywordToken( "throw",
-                            Token.KEYWORD_THROW );
-    }
-
-    public void testKeyword_Throws()
-    {
-        assertKeywordToken( "throws",
-                            Token.KEYWORD_THROWS );
-    }
-
-    public void testKeyword_Try()
-    {
-        assertKeywordToken( "try",
-                            Token.KEYWORD_TRY );
-    }
-
-    public void testKeyword_While()
-    {
-        assertKeywordToken( "while",
-                            Token.KEYWORD_WHILE );
-    }
-
-    public void testUniqueKeywordTypes()
-    {
-        Map keywords = Token.getKeywordMap();
-
-        Set types = new HashSet();
-
-        types.addAll( keywords.values() );
-
-        assertEquals( types.size(),
-                      keywords.size() );
-    }
-
-    public void testUnknownTokenType()
-    {
-        assertEquals( "<unknown>",
-                      Token.getTokenDescription( 6666 ) );
-    }
-
-    // ----------------------------------------------------------------------
-    // ----------------------------------------------------------------------
-
-    protected void assertKeywordToken(String text,
-                                      int expectedType)
-    {
-        Token token = Token.keyword( LINE,
-                                     COLUMN,
-                                     text );
-
-        assertToken( token,
-                     expectedType,
-                     text );
-    }
-
-    protected void assertToken(Token token,
-                               int type,
-                               String text)
-    {
-        assertToken( token,
-                     type,
-                     text,
-                     '"' + text + '"' );
-    }
-
-    protected void assertToken(Token token,
-                               int type,
-                               String text,
-                               String description)
-    {
-        assertEquals( type,
-                      token.getType() );
-
-        assertEquals( text,
-                      token.getText() );
-
-        assertEquals( description,
-                      token.getDescription() );
-
-        assertEquals( LINE,
-                      token.getStartLine() );
-
-        assertEquals( COLUMN,
-                      token.getStartColumn() );
-    }
-    
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/AbstractCharStreamTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/AbstractCharStreamTest.java
deleted file mode 100644
index 090e019..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/AbstractCharStreamTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.syntax.ReadException;
-
-public class AbstractCharStreamTest
-    extends GroovyTestCase
-{
-    public static class MockCharStream
-        extends AbstractCharStream
-    {
-        private int cur;
-        private String text;
-
-        public MockCharStream(String text)
-        {
-            this.text = text;
-            this.cur  = 0;
-        }
-
-        public MockCharStream(String text,
-                              String description)
-        {
-            super( description );
-            this.text = text;
-            this.cur  = 0;
-        }
-
-        public char consume()
-            throws ReadException
-        {
-            if ( this.cur >= this.text.length() )
-            {
-                return (char) -1;
-            }
-
-            char c = this.text.charAt( this.cur );
-
-            ++this.cur;
-
-            return c;
-        }
-
-        public void close()
-            throws ReadException
-        {
-
-        }
-    }
-
-    public void testConstruct_Default()
-    {
-        assertEquals( "<unknown>",
-                      new MockCharStream( "cheddar" ).getDescription() );
-    }
-
-    public void testConstruct_WithDescription()
-    {
-        assertEquals( "/path/to/Cheddar.groovy",
-                      new MockCharStream( "cheddar",
-                                          "/path/to/Cheddar.groovy" ).getDescription() );
-    }
-
-    public void testconsume()
-        throws Exception
-    {
-        MockCharStream in = new MockCharStream( "cheddar" );
-
-        assertEquals( 'c',
-                      in.consume() );
-
-        assertEquals( 'h',
-                      in.consume() );
-
-        assertEquals( 'e',
-                      in.consume() );
-
-        assertEquals( 'd',
-                      in.consume() );
-
-        assertEquals( 'd',
-                      in.consume() );
-
-        assertEquals( 'a',
-                      in.consume() );
-
-        assertEquals( 'r',
-                      in.consume() );
-
-        assertEquals( (char) -1,
-                      in.consume() );
-    }
-
-    public void testConsume()
-        throws Exception
-    {
-        MockCharStream in = new MockCharStream( "cheddar" );
-
-        assertEquals( 'c',
-                      in.consume() );
-
-        assertEquals( 'h',
-                      in.consume() );
-
-        assertEquals( 'e',
-                      in.consume() );
-        
-        assertEquals( 'd',
-                      in.consume() );
-
-        assertEquals( 'd',
-                      in.consume() );
-        
-        assertEquals( 'a',
-                      in.consume() );
-
-        assertEquals( 'r',
-                      in.consume() );
-
-        assertEquals( (char) -1,
-                      in.consume() );
-        
-    }
-
-    public void testConsumeAtEnd()
-        throws Exception
-    {
-        MockCharStream in = new MockCharStream( "" );
-
-        assertEquals( (char) -1,
-                      in.consume() );
-
-        assertEquals( (char) -1,
-                      in.consume() );
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/EscapedMetaCharacterTest.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/EscapedMetaCharacterTest.groovy
deleted file mode 100644
index 05f865d..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/EscapedMetaCharacterTest.groovy
+++ /dev/null
@@ -1,60 +0,0 @@
-class EscapedMetaCharacterTest extends GroovyTestCase {
-
-  def newline = "\\"+"n"
-  def tab = "\\"+"t"
-  def backslash = "\\"
-  def doublebackslash = "\\"+"\\"
-  def creturn = "\\"+"r"
-  def singlequote = "\\"+"'"
-  def doublequote = "\\"+'"'
-  def dollar= "\\"+"\$"
-  
-  def all = newline+tab+creturn
-
-
-  void testNewLine() {
-    assert "\\n"==newline
-    assert '\\n'==newline
-  }
-
-  void testTab() {
-    assert "\\t"==tab
-    assert '\\t'==tab
-  }
-
- void testBackslash() {
-    assert "\\"==backslash 
-    assert '\\'==backslash 
-    assert '\\\\'==doublebackslash 
-    assert "\\\\"==doublebackslash
- }
-
- void testReturn(){
-   assert "\\r"==creturn 
-   assert '\\r'==creturn 
-  }
-
- void testDoubleQuote(){
-   assert '\\"'==doublequote 
-  }
-
- void testSingleQuote(){
-   assert "\\'"==singlequote 
-  }
-
-  void testDollarSign(){
-    assert "\\\$"==dollar
-    assert '\\\$'==dollar
-  }
-
-  void testAll() {
-    assert "\\n\\t\\r\\\\\\\$\\'" == all+doublebackslash+dollar+"\\'"
-    assert '\\n\\t\\r\\\\\\\$\\"' == all+doublebackslash+dollar+'\\"'
-    assert "\\n\\t\\r\\'" == all+"\\'"
-    assert '\\n\\t\\r\\"' == all+'\\"'
-
-
-  }
-
-
-}
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTest.java
deleted file mode 100644
index 22754af..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTest.java
+++ /dev/null
@@ -1,716 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.syntax.Token;
-
-public class LexerTest extends GroovyTestCase {
-
-    public void testNothing()
-    {
-    }
-
-/*
-
-    private Lexer lexer;
-
-    public void testEndOfStream() throws Exception {
-        newLexer("");
-
-        assertEnd();
-
-        assertEnd();
-
-        assertEnd();
-
-        assertEnd();
-    }
-
-    public void testSingleLineComment_Newline() throws Exception {
-        newLexer("// I like cheese\ncheese");
-
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertEnd();
-    }
-
-    public void testSingleLineComment_CarriageReturn() throws Exception {
-        newLexer("// I like cheese\rcheese");
-
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertEnd();
-    }
-
-    public void testSingleLineComment_CarriageReturn_Newline() throws Exception {
-        newLexer("// I like cheese\r\ncheese");
-
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertEnd();
-    }
-
-    public void testSingleLineHashComment_CarriageReturn() throws Exception {
-        newLexer("# I like cheese\rcheese");
-
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertEnd();
-    }
-
-    public void testMultilineComment_MiddleOfLine() throws Exception {
-*/ //        newLexer("cheese /* is */ toasty");
-/*
-
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertNextToken(Token.IDENTIFIER, "toasty");
-
-        assertEnd();
-    }
-
-    public void testMultilineComment_SpanningLines() throws Exception {
-*/ //        newLexer("cheese /* is \n really */ toasty");
-/*
-
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertNextToken(Token.IDENTIFIER, "toasty");
-
-        assertEnd();
-    }
-
-    public void testMultilineComment_EmbeddedStarts() throws Exception {
-*/ //        newLexer("cheese /* * * * / * / */ toasty");
-/*
-
-        assertNextToken(Token.IDENTIFIER, "cheese");
-
-        assertNextToken(Token.IDENTIFIER, "toasty");
-
-        assertEnd();
-    }
-
-    public void testIgnoredWhitespace() throws Exception {
-        newLexer(" \r \n \r\n \n\r    \t   \t");
-
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.NEWLINE, "<newline>");
-        assertNextToken(Token.NEWLINE, "<newline>");
-
-        assertEnd();
-    }
-
-    public void testLeftCurlyBrace() throws Exception {
-        assertSimple("{", Token.LEFT_CURLY_BRACE);
-    }
-
-    public void testRightCurlyBrace() throws Exception {
-        assertSimple("}", Token.RIGHT_CURLY_BRACE);
-    }
-
-    public void testLeftSquareBracket() throws Exception {
-        assertSimple("[", Token.LEFT_SQUARE_BRACKET);
-    }
-
-    public void testRightSquareBracket() throws Exception {
-        assertSimple("]", Token.RIGHT_SQUARE_BRACKET);
-    }
-
-    public void testLeftParenthesis() throws Exception {
-        assertSimple("(", Token.LEFT_PARENTHESIS);
-    }
-
-    public void testRightParenthesis() throws Exception {
-        assertSimple(")", Token.RIGHT_PARENTHESIS);
-    }
-
-    public void testDot() throws Exception {
-        assertSimple(".", Token.DOT);
-    }
-
-    public void testDotDot() throws Exception {
-        assertSimple("..", Token.DOT_DOT);
-    }
-
-    public void testNot() throws Exception {
-        assertSimple("!", Token.NOT);
-    }
-
-    public void testCompareNotEqual() throws Exception {
-        assertSimple("!=", Token.COMPARE_NOT_EQUAL);
-    }
-
-    public void testEqual() throws Exception {
-        assertSimple("=", Token.EQUAL);
-    }
-
-    public void testCompareEqual() throws Exception {
-        assertSimple("==", Token.COMPARE_EQUAL);
-    }
-
-    public void testCompareIdentical() throws Exception {
-        assertSimple("===", Token.COMPARE_IDENTICAL);
-    }
-
-    public void testCompareLessThan() throws Exception {
-        assertSimple("<", Token.COMPARE_LESS_THAN);
-    }
-
-    public void testCompareLessThanEqual() throws Exception {
-        assertSimple("<=", Token.COMPARE_LESS_THAN_EQUAL);
-    }
-
-    public void testCompareGreaterThan() throws Exception {
-        assertSimple(">", Token.COMPARE_GREATER_THAN);
-    }
-
-    public void testCompareGreaterThanEqual() throws Exception {
-        assertSimple(">=", Token.COMPARE_GREATER_THAN_EQUAL);
-    }
-
-    public void testCompareTo() throws Exception {
-        assertSimple("<=>", Token.COMPARE_TO);
-    }
-
-    public void testNavigate() throws Exception {
-        assertSimple("->", Token.NAVIGATE);
-    }
-
-    public void testLogicalOr() throws Exception {
-        assertSimple("||", Token.LOGICAL_OR);
-    }
-
-    public void testPipe() throws Exception {
-        assertSimple("|", Token.PIPE);
-    }
-
-    public void testLogicalAnd() throws Exception {
-        assertSimple("&&", Token.LOGICAL_AND);
-    }
-
-    public void testAmpersand_UnexpectedCharacter() throws Exception {
-        newLexer("&a");
-
-        char[] expected = assertUnexpectedCharacter('a', 1, 2);
-
-        assertLength(1, expected);
-
-        assertContains('&', expected);
-    }
-
-    public void testPlus() throws Exception {
-        assertSimple("+", Token.PLUS);
-    }
-
-    public void testPlusPlus() throws Exception {
-        assertSimple("++", Token.PLUS_PLUS);
-    }
-
-    public void testPlusEqual() throws Exception {
-        assertSimple("+=", Token.PLUS_EQUAL);
-    }
-
-    public void testMinus() throws Exception {
-        assertSimple("-", Token.MINUS);
-    }
-
-    public void testMinusMinus() throws Exception {
-        assertSimple("--", Token.MINUS_MINUS);
-    }
-
-    public void testMinusEqual() throws Exception {
-        assertSimple("-=", Token.MINUS_EQUAL);
-    }
-
-    public void testDivide() throws Exception {
-        assertSimple("/", Token.DIVIDE);
-    }
-
-    public void testDivideEqual() throws Exception {
-        assertSimple("/=", Token.DIVIDE_EQUAL);
-    }
-
-    public void testMod() throws Exception {
-        assertSimple("%", Token.MOD);
-    }
-
-    public void testModEqual() throws Exception {
-        assertSimple("%=", Token.MOD_EQUAL);
-    }
-
-    public void testMultiply() throws Exception {
-        assertSimple("*", Token.MULTIPLY);
-    }
-
-    public void testMultiplyEqual() throws Exception {
-        assertSimple("*=", Token.MULTIPLY_EQUAL);
-    }
-
-    public void testColon() throws Exception {
-        assertSimple(":", Token.COLON);
-    }
-
-    public void testSemicolon() throws Exception {
-        assertSimple(";", Token.SEMICOLON);
-    }
-
-    public void testQuestion() throws Exception {
-        assertSimple("?", Token.QUESTION);
-    }
-
-    public void testDoubleQuoteString_Simple() throws Exception {
-        newLexer("\"cheese\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "cheese");
-
-        assertEnd();
-    }
-
-    public void testDoubleQuoteString_EscapedDollar() throws Exception {
-        newLexer("\"foo $${bar}\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "foo $${bar}");
-
-        assertEnd();
-    }
-
-    public void testDoubleQuoteString_EscapedTab() throws Exception {
-        newLexer("\"che\\tese\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "che\tese");
-
-        assertEnd();
-    }
-
-    public void testDoubleQuoteString_EscapedNewline() throws Exception {
-        newLexer("\"che\\nese\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "che\nese");
-
-        assertEnd();
-    }
-
-    public void testDoubleQuoteString_EscapedCarriageReturn() throws Exception {
-        newLexer("\"che\\rese\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "che\rese");
-
-        assertEnd();
-    }
-
-    public void testDoubleQuoteString_EscapedOther() throws Exception {
-        newLexer("\"che\\bese\"");
-
-        assertNextToken(Token.DOUBLE_QUOTE_STRING, "chebese");
-
-        assertEnd();
-    }
-
-    public void testSingleQuoteString_Simple() throws Exception {
-        newLexer("'cheese'");
-
-        assertNextToken(Token.SINGLE_QUOTE_STRING, "cheese");
-
-        assertEnd();
-    }
-
-    public void testSingleQuoteString_EscapedTab() throws Exception {
-        newLexer("'che\\tese'");
-
-        assertNextToken(Token.SINGLE_QUOTE_STRING, "che\tese");
-
-        assertEnd();
-    }
-
-    public void testSingleQuoteString_EscapedNewline() throws Exception {
-        newLexer("'che\\nese'");
-
-        assertNextToken(Token.SINGLE_QUOTE_STRING, "che\nese");
-
-        assertEnd();
-    }
-
-    public void testSingleQuoteString_EscapedCarriageReturn() throws Exception {
-        newLexer("'che\\rese'");
-
-        assertNextToken(Token.SINGLE_QUOTE_STRING, "che\rese");
-
-        assertEnd();
-    }
-
-    public void testSingleQuoteString_EscapedOther() throws Exception {
-        newLexer("'che\\bese'");
-
-        assertNextToken(Token.SINGLE_QUOTE_STRING, "chebese");
-
-        assertEnd();
-    }
-
-    public void testUnterminatedStringLiteral_DoubleQuote_Newline() throws Exception {
-        newLexer("\"cheese\n");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testUnterminatedStringLiteral_DoubleQuote_CarriageReturn() throws Exception {
-        newLexer("\"cheese\r");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testUnterminatedStringLiteral_DoubleQuote_EndOfStream() throws Exception {
-        newLexer("\"cheese");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testUnterminatedStringLiteral_SingleQuote_Newline() throws Exception {
-        newLexer("'cheese\n'");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testUnterminatedStringLiteral_SingleQuote_CarriageReturn() throws Exception {
-        newLexer("'cheese\r'");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testUnterminatedStringLiteral_SingleQuote_EndOfStream() throws Exception {
-        newLexer("'cheese");
-
-        try {
-            nextToken();
-            fail("should have thrown UnterminatedStringLiteralException");
-        }
-        catch (UnterminatedStringLiteralException e) {
-            // expected and correct
-        }
-    }
-
-    public void testIdentifier() throws Exception {
-        assertSimple("cheese", Token.IDENTIFIER);
-    }
-
-    public void testNumber_Integer() throws Exception {
-        assertSimple("42", Token.INTEGER_NUMBER);
-    }
-
-    public void testNumber_FloatingPoint() throws Exception {
-        assertSimple("42.84", Token.FLOAT_NUMBER);
-    }
-
-    public void testNumber_IntegerCall() throws Exception {
-        newLexer("42.cheese");
-
-        assertNextToken(Token.INTEGER_NUMBER, "42");
-        assertNextToken(Token.DOT, ".");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-    }
-
-    public void testNumber_FloatCall() throws Exception {
-        newLexer("42.0.cheese");
-
-        assertNextToken(Token.FLOAT_NUMBER, "42.0");
-        assertNextToken(Token.DOT, ".");
-        assertNextToken(Token.IDENTIFIER, "cheese");
-    }
-
-*/    /*
-    public void testNumber_UnexpectedCharacter()
-        throws Exception
-    {
-        newLexer( "4.0cheese" );
-    
-        char[] expected = assertUnexpectedCharacter( 'c',
-                                                     1,
-                                                     4 );
-    
-        assertLength( 10,
-                      expected );
-    
-        assertContains( '0',
-                        expected );
-        assertContains( '1',
-                        expected );
-        assertContains( '2',
-                        expected );
-        assertContains( '3',
-                        expected );
-        assertContains( '4',
-                        expected );
-        assertContains( '5',
-                        expected );
-        assertContains( '6',
-                        expected );
-        assertContains( '7',
-                        expected );
-        assertContains( '8',
-                        expected );
-        assertContains( '9',
-                        expected );
-    }
-    */
-/*
-
-    // ----------------------------------------------------------------------
-    // ----------------------------------------------------------------------
-
-    public void testKeyword_Abstract() throws Exception {
-        assertSimple("abstract", Token.KEYWORD_ABSTRACT);
-    }
-
-    public void testKeyword_As() throws Exception {
-        assertSimple("as", Token.KEYWORD_AS);
-    }
-
-    public void testKeyword_Break() throws Exception {
-        assertSimple("break", Token.KEYWORD_BREAK);
-    }
-
-    public void testKeyword_Case() throws Exception {
-        assertSimple("case", Token.KEYWORD_CASE);
-    }
-
-    public void testKeyword_Catch() throws Exception {
-        assertSimple("catch", Token.KEYWORD_CATCH);
-    }
-
-    public void testKeyword_Class() throws Exception {
-        assertSimple("class", Token.KEYWORD_CLASS);
-    }
-
-    public void testKeyword_Const() throws Exception {
-        assertSimple("const", Token.KEYWORD_CONST);
-    }
-
-    public void testKeyword_Continue() throws Exception {
-        assertSimple("continue", Token.KEYWORD_CONTINUE);
-    }
-
-    public void testKeyword_Default() throws Exception {
-        assertSimple("default", Token.KEYWORD_DEFAULT);
-    }
-
-    public void testKeyword_Do() throws Exception {
-        assertSimple("do", Token.KEYWORD_DO);
-    }
-
-    public void testKeyword_Else() throws Exception {
-        assertSimple("else", Token.KEYWORD_ELSE);
-    }
-
-    public void testKeyword_Extends() throws Exception {
-        assertSimple("extends", Token.KEYWORD_EXTENDS);
-    }
-
-    public void testKeyword_Final() throws Exception {
-        assertSimple("final", Token.KEYWORD_FINAL);
-    }
-
-    public void testKeyword_Finally() throws Exception {
-        assertSimple("finally", Token.KEYWORD_FINALLY);
-    }
-
-    public void testKeyword_For() throws Exception {
-        assertSimple("for", Token.KEYWORD_FOR);
-    }
-
-    public void testKeyword_Goto() throws Exception {
-        assertSimple("goto", Token.KEYWORD_GOTO);
-    }
-
-    public void testKeyword_If() throws Exception {
-        assertSimple("if", Token.KEYWORD_IF);
-    }
-
-    public void testKeyword_Implements() throws Exception {
-        assertSimple("implements", Token.KEYWORD_IMPLEMENTS);
-    }
-
-    public void testKeyword_Import() throws Exception {
-        assertSimple("import", Token.KEYWORD_IMPORT);
-    }
-
-    public void testKeyword_Instanceof() throws Exception {
-        assertSimple("instanceof", Token.KEYWORD_INSTANCEOF);
-    }
-
-    public void testKeyword_Interface() throws Exception {
-        assertSimple("interface", Token.KEYWORD_INTERFACE);
-    }
-
-    public void testKeyword_Native() throws Exception {
-        assertSimple("native", Token.KEYWORD_NATIVE);
-    }
-
-    public void testKeyword_New() throws Exception {
-        assertSimple("new", Token.KEYWORD_NEW);
-    }
-
-    public void testKeyword_Package() throws Exception {
-        assertSimple("package", Token.KEYWORD_PACKAGE);
-    }
-
-    public void testKeyword_Private() throws Exception {
-        assertSimple("private", Token.KEYWORD_PRIVATE);
-    }
-
-    public void testKeyword_Property() throws Exception {
-        assertSimple("property", Token.KEYWORD_PROPERTY);
-    }
-
-    public void testKeyword_Protected() throws Exception {
-        assertSimple("protected", Token.KEYWORD_PROTECTED);
-    }
-
-    public void testKeyword_Public() throws Exception {
-        assertSimple("public", Token.KEYWORD_PUBLIC);
-    }
-
-    public void testKeyword_Return() throws Exception {
-        assertSimple("return", Token.KEYWORD_RETURN);
-    }
-
-    public void testKeyword_Static() throws Exception {
-        assertSimple("static", Token.KEYWORD_STATIC);
-    }
-
-    public void testKeyword_Super() throws Exception {
-        assertSimple("super", Token.KEYWORD_SUPER);
-    }
-
-    public void testKeyword_Switch() throws Exception {
-        assertSimple("switch", Token.KEYWORD_SWITCH);
-    }
-
-    public void testKeyword_Synchronized() throws Exception {
-        assertSimple("synchronized", Token.KEYWORD_SYNCHRONIZED);
-    }
-
-    public void testKeyword_This() throws Exception {
-        assertSimple("this", Token.KEYWORD_THIS);
-    }
-
-    public void testKeyword_Throw() throws Exception {
-        assertSimple("throw", Token.KEYWORD_THROW);
-    }
-
-    public void testKeyword_Throws() throws Exception {
-        assertSimple("throws", Token.KEYWORD_THROWS);
-    }
-
-    public void testKeyword_Try() throws Exception {
-        assertSimple("try", Token.KEYWORD_TRY);
-    }
-
-    public void testKeyword_While() throws Exception {
-        assertSimple("while", Token.KEYWORD_WHILE);
-    }
-
-    public void testUnexpecteCharacterException() throws Exception {
-        newLexer("±");
-
-        try {
-            nextToken();
-            fail("should have thrown UnexpectedCharacterException");
-        }
-        catch (UnexpectedCharacterException e) {
-            // expected and correct
-            assertEquals('±', e.getCharacter());
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    // ----------------------------------------------------------------------
-
-    protected void assertSimple(String text, int type) throws Exception {
-        newLexer(text);
-
-        assertNextToken(type, text);
-
-        assertEnd();
-    }
-
-    protected void assertNextToken(int type, String text) throws Exception {
-        Token token = this.lexer.nextToken();
-
-        assertNotNull(token);
-
-        assertEquals(type, token.getType());
-
-        //System.out.println("Expected: " + text + " but got: " + token.getText());
-        
-        assertEquals(text, token.getText());
-    }
-
-    protected void nextToken() throws Exception {
-        this.lexer.nextToken();
-    }
-
-    protected char[] assertUnexpectedCharacter(char c, int line, int column) throws Exception {
-        try {
-            this.lexer.nextToken();
-            fail("should have thrown UnexpectedCharacterException");
-        }
-        catch (UnexpectedCharacterException e) {
-            // expected and correct
-            assertEquals(c, e.getCharacter());
-
-            assertEquals(line, e.getLine());
-
-            assertEquals(column, e.getStartColumn());
-
-            return e.getExpected();
-        }
-
-        return new char[] {
-        };
-    }
-
-    protected void assertEnd() throws Exception {
-        assertNull(this.lexer.nextToken());
-    }
-
-    protected void newLexer(String text) {
-        StringCharStream in = new StringCharStream(text);
-
-        this.lexer = new Lexer(in);
-    }
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTokenStreamTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTokenStreamTest.java
deleted file mode 100644
index 19199a6..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/LexerTokenStreamTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.syntax.Token;
-
-public class LexerTokenStreamTest
-    extends GroovyTestCase
-{
-
-    public void testNothing()
-    {
-    }
-
-/*
-    public void testConstruct()
-    {
-        StringCharStream chars = new StringCharStream( "()" );
-        Lexer lexer = new Lexer( chars );
-        LexerTokenStream tokens = new LexerTokenStream( lexer );
-
-        assertSame( lexer,
-                    tokens.getLexer() );
-    }
-
-    public void testNextToken()
-        throws Exception
-    {
-        StringCharStream chars = new StringCharStream( "()" );
-        Lexer lexer = new Lexer( chars );
-        LexerTokenStream tokens = new LexerTokenStream( lexer );
-
-        assertToken( tokens.nextToken(),
-                     "(",
-                     Token.LEFT_PARENTHESIS );
-
-        assertToken( tokens.nextToken(),
-                     ")",
-                     Token.RIGHT_PARENTHESIS );
-
-        assertNull( tokens.nextToken() );
-    }
-
-    protected void assertToken(Token token,
-                               String text,
-                               int type)
-    {
-        assertEquals( text,
-                      token.getText() );
-
-        assertEquals( type,
-                      token.getType() );
-    }
-
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/StringCharStreamTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/StringCharStreamTest.java
deleted file mode 100644
index 205b00f..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/lexer/StringCharStreamTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.codehaus.groovy.syntax.lexer;
-
-import groovy.util.GroovyTestCase;
-
-public class StringCharStreamTest
-    extends GroovyTestCase
-{
-    public void testNothing()
-    {
-    }
-
-/*
-    public void testNextChar_EmptyString()
-        throws Exception
-    {
-        StringCharStream charStream = new StringCharStream( "" );
-
-        assertEquals( CharStream.EOS,
-                      charStream.consume() );
-        assertEquals( CharStream.EOS,
-                      charStream.consume() );
-    }
-
-    public void testconsume_NonEmptyString()
-        throws Exception
-    {
-        StringCharStream charStream = new StringCharStream( "cheese" );
-
-        assertEquals( 'c',
-                      charStream.consume() );
-        assertEquals( 'h',
-                      charStream.consume() );
-        assertEquals( 'e',
-                      charStream.consume() );
-        assertEquals( 'e',
-                      charStream.consume() );
-        assertEquals( 's',
-                      charStream.consume() );
-        assertEquals( 'e',
-                      charStream.consume() );
-        assertEquals( CharStream.EOS,
-                      charStream.consume() );
-        assertEquals( CharStream.EOS,
-                      charStream.consume() );
-    }
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ASTBuilderTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ASTBuilderTest.java
deleted file mode 100644
index 544535c..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ASTBuilderTest.java
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- *
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- *
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *
- */
-package org.codehaus.groovy.syntax.parser;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.ClassExpression;
-import org.codehaus.groovy.ast.expr.ClosureExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.MapEntryExpression;
-import org.codehaus.groovy.ast.expr.MapExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.ForStatement;
-import org.codehaus.groovy.ast.stmt.IfStatement;
-import org.codehaus.groovy.ast.stmt.ReturnStatement;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.syntax.Types;
-import org.codehaus.groovy.syntax.lexer.UnexpectedCharacterException;
-
-/**
- * Test case for the AST builder
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class ASTBuilderTest extends TestParserSupport {
-
-    public void testStatementParsing() throws Exception {
-        ModuleNode module =
-            parse("import cheddar.cheese.Toast as Bread\n x = [1, 2, 3]; System.out.println(x)", "foo/Cheese.groovy");
-
-        BlockStatement block = module.getStatementBlock();
-        assertTrue("Contains some statements", !block.getStatements().isEmpty());
-
-        //System.out.println("Statements: " + block.getStatements());
-    }
-
-    public void testBlock() throws Exception {
-        ModuleNode module =
-            parse("class Foo { void testMethod() { x = someMethod(); callMethod(x) } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 2, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-    }
-
-    public void testSubscript() throws Exception {
-        ModuleNode module =
-            parse("class Foo { void testMethod() { x = 1\n [1].each { println(it) }} }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 2, statement.getStatements().size());
-
-        for (Iterator iter = statement.getStatements().iterator(); iter.hasNext();) {
-            System.out.println(iter.next());
-        }
-    }
-
-    public void testNewlinesInsideExpresssions() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x = 1 +\n 5 * \n 2 / \n 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        for (Iterator iter = statement.getStatements().iterator(); iter.hasNext();) {
-            System.out.println(iter.next());
-        }
-    }
-
-    public void testMethodCalls() throws Exception {
-        ModuleNode module =
-            parse(
-                "class Foo { void testMethod() { def array = getMockArguments()\n \n dummyMethod(array) } }",
-                "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 2, statement.getStatements().size());
-
-        for (Iterator iter = statement.getStatements().iterator(); iter.hasNext();) {
-            System.out.println(iter.next());
-        }
-    }
-
-/*  todo should we or shouldn't we support the jdk 1.5 for loop, with the colon in lieu of the groovy 'in' keyword?
-    public void testJdk15ForLoop() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { for (x : foo) { println x } } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        ForStatement stmt = (ForStatement) statement.getStatements().get(0);
-        assertEquals("x", stmt.getVariable());
-        assertTrue(stmt.getVariableType().isDynamic());
-        System.out.println(stmt);
-    }
-
-    public void testJdk15ForLoopWithType() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { for (Integer x : foo) { println x } } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        ForStatement stmt = (ForStatement) statement.getStatements().get(0);
-        assertEquals("x", stmt.getVariable());
-        System.out.println( stmt.getVariableType().getName() );
-        assertEquals("java.lang.Integer", stmt.getVariableType().getName());
-        assertFalse(stmt.getVariableType().isDynamic());
-        System.out.println(stmt);
-    }
-*/
-
-    public void testForLoopWithType() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { for (Foo x in foo) { println x } } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        ForStatement stmt = (ForStatement) statement.getStatements().get(0);
-        assertEquals("x", stmt.getVariable());
-        assertEquals("Foo", stmt.getVariableType().getName());
-        assertFalse(stmt.getVariableType().isDynamic());
-        System.out.println(stmt);
-    }
-
-    public void testSubscriptAssignment() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x[12] = 'abc' } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-        System.out.println(exp);
-
-        assertTrue(exp instanceof BinaryExpression);
-        BinaryExpression binExpr = (BinaryExpression) exp;
-        assertTrue("RHS is constant", binExpr.getRightExpression() instanceof ConstantExpression);
-
-        Expression lhs = binExpr.getLeftExpression();
-        assertTrue("LHS is binary expression", lhs instanceof BinaryExpression);
-
-        BinaryExpression lhsBinExpr = (BinaryExpression) lhs;
-        assertEquals(Types.LEFT_SQUARE_BRACKET, lhsBinExpr.getOperation().getType());
-
-        assertTrue("Left of LHS is a variable", lhsBinExpr.getLeftExpression() instanceof VariableExpression);
-        assertTrue("Right of LHS is a constant", lhsBinExpr.getRightExpression() instanceof ConstantExpression);
-
-    }
-
-    public void testNoReturn() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x += 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testCastExpression() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x = (Short) 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testTernaryExpression() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { foo() ? 'a' : 'b' } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testClosureWithJustIdentifierBug() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { return {a} } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ReturnStatement returnStmt = (ReturnStatement)statement.getStatements().get(0);
-        Expression exp = returnStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testClosureWithJustIdentifierInMapBug() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { ['x':{a}, 'd':123] } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-
-        MapExpression mapExp = (MapExpression) exprStmt.getExpression();
-        MapEntryExpression entryExp = (MapEntryExpression) mapExp.getMapEntryExpressions().get(0);
-        ClosureExpression closureExp = (ClosureExpression) entryExp.getValueExpression();
-        assertEquals("Parameters on closure", 0, closureExp.getParameters().length);
-        System.out.println("expr: " + closureExp);
-    }
-
-    public void testArrayExpression() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { def foo = ['a', 'b', 'c']  as String[]\n assert foo != null } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 2, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testArrayExpression2() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { String[] foo = ['a', 'b', 'c']\n assert foo != null } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 2, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testTypedVariableExpression() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { Short x = 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-    }
-
-    public void testFullyQualifiedType() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { com.acme.Foo } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testDoubleSubscript() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x = foo[0][0] } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testMethodCallWithDotAndNoParenthesis() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { foo.someMethod 1 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testMethodCallWithNoParenthesis() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { someMethod 1 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testScriptMethodCallWithNoParenthesis() throws Exception {
-        ModuleNode module = parse("someMethod 1", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "run");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testScriptWithMethodDeclaration() throws Exception {
-        ModuleNode module = parse("def foo(a) { return a + 1}\n foo(123)", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "run");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testSubscriptThenMethod() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { x = foo[0].foo() } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-    public void testSubscriptThenOperation() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { foo[0] += 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        ExpressionStatement exprStmt = (ExpressionStatement) statement.getStatements().get(0);
-        Expression exp = exprStmt.getExpression();
-
-        System.out.println("expr: " + exp);
-
-        System.out.println("text: " + exp.getText());
-    }
-
-
-    public void testRodsBug() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { if (x) { String n = 'foo' } } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        IfStatement ifStmt = (IfStatement) statement.getStatements().get(0);
-        BlockStatement trueStmt = (BlockStatement) ifStmt.getIfBlock();
-
-        System.out.println("trueStmt: " + trueStmt);
-
-        // ideally there would be 1 statement; though we're handling that in the verifier
-        assertEquals(1, trueStmt.getStatements().size());
-    }
-
-    public void testStaticMethodCallBug() throws Exception {
-        ModuleNode module =
-            parse("class Foo { void testMethod() { ASTBuilderTest.mockHelperMethod() } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-    }
-
-    public void testInstanceofBug() throws Exception {
-        ModuleNode module =
-        parse("class Foo { void testMethod() { if (foo instanceof java.util.List) { println('hello') } } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-
-        IfStatement ifStmt = (IfStatement) statement.getStatements().get(0);
-        BinaryExpression exp = (BinaryExpression) ifStmt.getBooleanExpression().getExpression();
-
-        System.out.println("exp: " + exp);
-
-        Expression rhs = exp.getRightExpression();
-        assertTrue("RHS should be a class expression", rhs instanceof ClassExpression);
-
-        ClassExpression classExp = (ClassExpression) rhs;
-        assertEquals("java.util.List", classExp.getType());
-    }
-
-    public void testMethodCallWithoutParensBug() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { println 3, 5 } }", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-    }
-
-    public void testReturnMethodClosure() throws Exception {
-        ModuleNode module = parse("class Foo { void testMethod() { System.out.println\n}}", "Dummy.groovy");
-        BlockStatement statement = getCode(module, "testMethod");
-
-        assertEquals("Statements size: " + statement.getStatements(), 1, statement.getStatements().size());
-
-        System.out.println(statement.getStatements());
-    }
-
-    public void testDionsTypo() throws Exception {
-        String script = "class Foo { void testMethod() { println ${foo}\n}}";
-        try {
-            ModuleNode module = parse(script, "Dummy.groovy");
-        } catch (Exception e) {
-            // todo problem of antlr thrown exception
-            //SyntaxException cause = e.getUnit().getSyntaxError(0);
-            //if( cause != null && cause instanceof ParserException) {
-                return;
-            //}
-            //fail (script+" should fail with a ParserException: "+e.getMessage());
-        }
-        fail(script+" should fail because the { was unexpected after the dollar sign.");
-    }
-
-    public void testMethodWithArrayTypeParam() throws Exception {
-        ModuleNode module = parse("class Foo { void main(String[] args) { println(args) } }", "Dummy.groovy");
-
-        MethodNode method = getMethod(module, "main");
-
-        System.out.println("Parameters: " + InvokerHelper.toString(method.getParameters()));
-    }
-
-    private void ensureOutOfRange(String script) throws Exception {
-        try {
-            ModuleNode module = parse(script, "Dummy.groovy");
-        } catch (Exception e) {
-            // todo problem of antlr thrown exception
-            // SyntaxException cause = e.getUnit().getSyntaxError(0);
-            // if( cause != null && cause instanceof ParserException && cause.getMessage().indexOf("out of range") >= 0) {
-                return;
-            //}
-            //fail (script+" should fail with a ParserException: "+e.getMessage());
-        }
-        fail(script+" should fail because the number is out of range.");
-    }
-
-    private void ensureInRange(String script) throws Exception {
-        ModuleNode module = parse(script, "Dummy.groovy");
-    }
-
-    public void testLiteralIntegerRange() throws Exception {
-        ensureInRange(   "def x =  2147483647I;");
-        ensureOutOfRange("def x =  2147483648I;");
-
-        ensureInRange(   "def x = -2147483648I;");
-        ensureOutOfRange("def x = -2147483649I;");
-    }
-
-    public void testLiteralLongRange() throws Exception {
-        ensureInRange(   "def x =  9223372036854775807L;");
-        ensureOutOfRange("def x =  9223372036854775808L;");
-
-        ensureInRange(   "def x = -9223372036854775808L;");
-        ensureOutOfRange("def x = -9223372036854775809L;");
-    }
-
-    public void testLiteralDoubleRange() throws Exception {
-        ensureInRange(   "def x =  1.7976931348623157E308D;");
-        ensureOutOfRange("def x =  1.7976931348623167E308D;");
-
-        ensureInRange(   "def x = -1.7976931348623157E308D;");
-        ensureOutOfRange("def x = -1.7976931348623167E308D;");
-    }
-
-    public void testLiteralFloatRange() throws Exception {
-        ensureInRange(   "def x =  3.4028235e+38f;");
-        ensureOutOfRange("def x =  3.4028236e+38f;");
-
-        ensureInRange(   "def x = -3.4028235e+38f;");
-        ensureOutOfRange("def x = -3.4028236e+38f;");
-    }
-
-    public void testLiteralIntegerBadSuffix() throws Exception {
-        try {
-            ModuleNode module = parse("def x = 2147483648J;", "Dummy.groovy");
-        } catch (Exception e) {
-            // todo problem of antlr thrown exception
-            //SyntaxException cause = e.getUnit().getSyntaxError(0);
-            //if (cause instanceof UnexpectedCharacterException) {
-                return;
-            //}
-            //fail ("x = 2147483648J should fail with an UnexpectedCharacterException");
-        }
-        fail("x = 2147483648J, should fail because J is an invalid numeric literal suffix.");
-    }
-
-    public void testLiteralBadExponent() throws Exception {
-        try {
-            ModuleNode module = parse("def x = 2.3e;", "Dummy.groovy");
-        } catch (Exception e) {
-            // todo problem of antlr thrown exception
-            //SyntaxException cause = e.getUnit().getSyntaxError(0);
-            //if (cause instanceof UnexpectedCharacterException) {
-                return;
-            //}
-            //fail ("x = 2.3e should fail with an UnexpectedCharacterException");
-        }
-        fail("x = 2.3e, should fail because no exponent is specified.");
-    }
-
-    public static Object mockHelperMethod() {
-        return "cheese";
-    }
-
-    protected BlockStatement getCode(ModuleNode module, String name) {
-        MethodNode method = getMethod(module, name);
-
-        BlockStatement statement = (BlockStatement) method.getCode();
-        assertNotNull(statement);
-        return statement;
-    }
-
-    protected MethodNode getMethod(ModuleNode module, String name) {
-        assertEquals("class count", 1, module.getClasses().size());
-
-        ClassNode node = (ClassNode) module.getClasses().get(0);
-
-        assertNotNull(node);
-
-        List methods = node.getDeclaredMethods(name);
-        assertTrue(methods.size() > 0);
-        return (MethodNode) methods.get(0);
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/AbstractMethodCheckTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/AbstractMethodCheckTest.java
deleted file mode 100644
index 9be4ec1..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/AbstractMethodCheckTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-/*
-interface Comparable { int compareTo(Object o); }
-abstract class GString { abstract String[] getStrings(); }
-interface CharSequence {
-    char charAt(int);  int length();  CharSequence subsequence(int, int);  String toString()
-}
-
-abstract  class AbstractList: { abstract Object get(int index); abstract int size(); }
-
-*/
-
-package org.codehaus.groovy.syntax.parser;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingClassException;
-import groovy.lang.MissingPropertyException;
-
-import java.io.ByteArrayInputStream;
-
-import org.codehaus.groovy.classgen.RuntimeIncompleteClassException;
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-public class AbstractMethodCheckTest extends TestSupport {
-
-
-    /**
-     * GString literals generate an anonymous inner class which 
-     * adds an implementation of the abstract String[] getStrings()
-     * method. 
-     */
-    public void testAnonymousGStringAbstract() throws Exception {
-	GroovyObject object =
-	    assertCompileWorks(
-               "class GStringTest {\n" +
-               "    public groovy.lang.GString testGStringAbstract(Integer x, Integer y) {\n" + 
-               "       return \"GStringTest of ${x} and ${y}\"\n" +
-               "    }\n" +
-               "}\n");
-
-    }
-
-    public void testCompleteComparable() throws Exception {
-	GroovyObject object =
-	    assertCompileWorks(
-	     "class ComparableTest implements java.lang.Comparable {\n" +
-	     "    int compareTo(java.lang.Object o) {\n" +
-	     "	return 0;\n" +
-	     "    }\n" +
-	     "}\n");
-    }
-
-
-    public void testIncompleteCharSequence() throws Exception {
-	// Should generate an error for not implementing subsequence
-	MissingClassException e =
-	    assertCompileFailed(
-           "class IncompleteCharSequenceTest implements java.lang.CharSequence {\n" +
-	       "    char charAt(int pos) {\n" +
-	       "	return 'a';\n" +
-	       "    }\n" +
-	       "\n" +
-	       "    int length() {\n" +
-	       "	return 5;\n" +
-	       "    }\n" +
-	       "}\n");
-    }
-
-    public void testCompleteCharSequence() throws Exception {
-	GroovyObject object =
-	    assertCompileWorks(
-              "class CompleteCharSequenceTest implements java.lang.CharSequence {\n" +
-	      "    char charAt(int pos) {\n" +
-	      "	return 'a';\n" +
-	      "    }\n" +
-	      "\n" +
-	      "    int length() {\n" +
-	      "	return 5;\n" +
-	      "    }\n" +
-	      "\n" +
-	      "   CharSequence subSequence(int start, int end) {\n" +
-	      "	return null;\n" +
-	      "    }\n" +
-	      "}\n");
-    }
-
-
-    public void testIncompleteList() throws Exception {
-	// Should generate an error for not implementing Object get(int)
-	MissingClassException e =
-	    assertCompileFailed(
-               "class IncompleteList extends java.util.AbstractList {\n" +
-	       "    int size() { return 0; }\n" +
-	       "}\n");
-    }
-
-
-    public void testCompleteList() throws Exception {
-	GroovyObject object =
-	    assertCompileWorks(
-               "class CompleteList extends java.util.AbstractList {\n" +
-	       "    int size() { return 0; }\n" +
-	       "    Object get(int pos) { return null; }\n" +
-	       "}\n");
-    }
-
-    
-    protected GroovyObject assertCompileWorks(String code) throws Exception {
-        Class type =
-            loader.parseClass(new ByteArrayInputStream(code.getBytes()), "ValidClass_" + getMethodName() + ".groovy");
-        return (GroovyObject) type.newInstance();
-    }
-
-    protected MissingClassException assertCompileFailed(String code) throws Exception {
-        try {
-            assertCompileWorks(code);
-
-            fail("Should have thrown an exception");
-        }
-        catch( CompilationFailedException e ) {
-            Exception cause = e.getUnit().getException(0);
-            if( cause instanceof  RuntimeIncompleteClassException ) {
-                System.out.println("Worked, threw: " + cause);
-                //e.printStackTrace();
-                return null;
-            }
-            throw e;
-        }
-        return null;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CSTNodeTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CSTNodeTest.java
deleted file mode 100644
index a2dde10..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CSTNodeTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.codehaus.groovy.syntax.parser;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.syntax.Token;
-
-public class CSTNodeTest
-    extends GroovyTestCase
-{
-
-    public void testNothing()
-    {
-    }
-    
-/*
-    public void testConstruct_Default()
-    {
-        CSTNode node = new CSTNode();
-
-        assertNull( node.getToken() );
-
-        assertLength( 0,
-                      node.getChildren() );
-    }
-
-    public void testConstruct_WithToken()
-    {
-        Token token = Token.identifier( 1,
-                                        1,
-                                        "cheese" );
-
-        CSTNode node = new CSTNode( token );
-
-        assertSame( token,
-                    node.getToken() );
-
-        assertLength( 0,
-                      node.getChildren() );
-    }
-
-    public void testChildren()
-    {
-        CSTNode node = new CSTNode();
-
-        CSTNode childOne = new CSTNode();
-        CSTNode childTwo = new CSTNode();
-
-        node.addChild( childOne );
-        node.addChild( childTwo );
-
-        assertLength( 2,
-                      node.getChildren() );
-
-        assertSame( childOne,
-                    node.getChild( 0 ) );
-
-        assertSame( childTwo,
-                    node.getChild( 1 ) );
-
-        assertSame( childOne,
-                    node.getChildren()[0] );
-
-        assertSame( childTwo,
-                    node.getChildren()[1] );
-    }
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CompilerErrorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CompilerErrorTest.java
deleted file mode 100644
index c362d87..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/CompilerErrorTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.syntax.parser;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingClassException;
-import groovy.lang.MissingPropertyException;
-
-import java.io.ByteArrayInputStream;
-
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-/**
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class CompilerErrorTest extends TestSupport {
-
-    public void testUnknownClassCatch() throws Exception {
-        MissingClassException e =
-            assertCompileFailed_WithMCE(
-                "class UnknownClass {\n"
-                    + "    void main(args) {\n"
-                    + "        try {\n"
-                    + "            println('Hello World!')\n"
-                    + "        }\n"
-                    + "        catch (UnknownException e) {\n"
-                    + "            println('This will never happen')\n"
-                    + "        }\n"
-                    + "    }\n"
-                    + "}\n");
-
-        assertEquals("UnknownException", e.getType());
-    }
-
-    public void testUnknownClassInNew() throws Exception {
-        MissingClassException e =
-            assertCompileFailed_WithMCE(
-                "class UnknownClass {\n" + "    void main(args) {\n" + "        def x = new UnknownThingy()\n" + "    }\n" + "}\n");
-        assertEquals("UnknownThingy", e.getType());
-    }
-
-    public void testUnknownClassInAssignment() throws Exception {
-        GroovyObject object =
-            assertCompileWorks(
-                "class UnknownClass {\n" + "    void main(args) {\n" + "        def x = UnknownThingy\n" + "    }\n" + "}\n");
-
-        try {
-            object.invokeMethod("main", new String[] {});
-            fail("Should have thrown exception due to unknown property");
-        }
-        catch (MissingPropertyException e) {
-            assertEquals("UnknownThingy", e.getProperty());
-        }
-    }
-
-
-    /** TODO non-terminated strings or GStrings lead to an undless loop and to an OutOfMemoryError */
-    public void testUnterminatedConstantGString() throws Exception {
-        //assertCompileFailed( "println \"d" );
-    }
-
-    /** TODO non-terminated strings or GStrings lead to an undless loop and to an OutOfMemoryError */
-    public void testUnterminatedGString() throws Exception {
-        //assertCompileFailed( "println \"${1+2\"\nprintln \"c\"" );
-    }
-
-
-
-
-
-    protected GroovyObject assertCompileWorks(String code) throws Exception {
-        Class type =
-            loader.parseClass(new ByteArrayInputStream(code.getBytes()), "ValidClass_" + getMethodName() + ".groovy");
-        return (GroovyObject) type.newInstance();
-    }
-
-    protected MissingClassException assertCompileFailed_WithMCE(String code) throws Exception {
-        try {
-            assertCompileWorks(code);
-
-            fail("Should have thrown an exception");
-        }
-        catch( CompilationFailedException e ) {
-            Exception cause = e.getUnit().getException(0);
-            if( cause instanceof MissingClassException ) {
-                System.out.println("Worked, threw: " + cause);
-                //e.printStackTrace();
-                return (MissingClassException)cause;
-            }
-            throw e;
-        }
-        return null;
-    }
-
-    protected CompilationFailedException assertCompileFailed(String code) throws Exception {
-        try {
-            assertCompileWorks(code);
- 
-            fail("Should have thrown an exception");
-        }
-        catch( CompilationFailedException e ) {
-            return e;
-        }
-
-        return null;
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ParserTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ParserTest.java
deleted file mode 100644
index 5ef12df..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ParserTest.java
+++ /dev/null
@@ -1,1134 +0,0 @@
-package org.codehaus.groovy.syntax.parser;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.control.SourceUnit;
-
-/*
-import org.codehaus.groovy.syntax.lexer.CharStream;
-import org.codehaus.groovy.syntax.lexer.StringCharStream;
-import org.codehaus.groovy.syntax.lexer.Lexer;
-import org.codehaus.groovy.syntax.lexer.LexerTokenStream;
-import org.codehaus.groovy.syntax.Token;
-import org.codehaus.groovy.syntax.TokenStream;
-import org.codehaus.groovy.tools.ExceptionCollector;
-*/
-
-public class ParserTest extends GroovyTestCase {
-
-   private int tolerance = 0;
-
-
-   /**
-    * This test case performs the same logic as the interactive shell to
-    * decide if a statement is complete or not
-    */
-   public void testParserThrowsTheRightException() throws Exception {
-        String code = "class Cheese {";
-        SourceUnit parser = null;
-
-        try {
-            parser = SourceUnit.create("groovysh script", code, tolerance);
-            parser.parse();
-            parser.getCST();
-        }
-        catch (CompilationFailedException e) {
-            assertTrue("Parser should have failed with Unexpected EOF flag", parser.failedWithUnexpectedEOF());
-            assertTrue("Parser should have an error count of 1 or less", parser.getErrorCount() <= 1);
-        }
-    }
-
-
-/*
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     package
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testEmptyScript() throws Exception {
-        Parser parser = newParser("");
-
-        CSTNode root = parser.compilationUnit();
-
-        assertEquals(null, root.getToken());
-        
-        System.out.println("Root: " + root);
-        {
-            CSTNode child = root.getChild(0);
-            
-            System.out.println("Child: "+ child);
-            
-            //assertEquals(null, child);
-        }
-    }
-
-    public void testPackageDeclaration_NoDots() throws Exception {
-        Parser parser = newParser("package cheese");
-
-        CSTNode root = parser.packageDeclaration();
-
-        assertNode(root, "package", Token.KEYWORD_PACKAGE, 1);
-
-        {
-            assertNode(root.getChild(0), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testPackageDeclaration_OneDot() throws Exception {
-        Parser parser = newParser("package cheese.toast");
-
-        CSTNode root = parser.packageDeclaration();
-
-        assertNode(root, "package", Token.KEYWORD_PACKAGE, 1);
-
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "cheese", Token.IDENTIFIER, 0);
-
-                assertNode(root.getChild(0).getChild(1), "toast", Token.IDENTIFIER, 0);
-            }
-        }
-    }
-
-    public void testPackageDeclaration_MultipleDots() throws Exception {
-        Parser parser = newParser("package cheddar.cheese.toast");
-
-        CSTNode root = parser.packageDeclaration();
-
-        assertNode(root, "package", Token.KEYWORD_PACKAGE, 1);
-
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-
-            {
-                assertNode(root.getChild(0).getChild(0), ".", Token.DOT, 2);
-                {
-                    assertNode(root.getChild(0).getChild(0).getChild(0), "cheddar", Token.IDENTIFIER, 0);
-
-                    assertNode(root.getChild(0).getChild(0).getChild(1), "cheese", Token.IDENTIFIER, 0);
-                }
-
-                assertNode(root.getChild(0).getChild(1), "toast", Token.IDENTIFIER, 0);
-            }
-        }
-    }
-
-    public void testPackageDeclaration_UnexpectedToken_NoInitialIdentifier() throws Exception {
-        Parser parser = newParser("package .");
-
-        try {
-            try {
-                parser.packageDeclaration();
-                fail("should have thrown UnexpectedTokenException");
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-            // expected and correct
-            assertToken(e.getUnexpectedToken(), ".", Token.DOT);
-
-            assertLength(1, e.getExpectedTypes());
-
-            assertContains(Token.IDENTIFIER, e.getExpectedTypes());
-        }
-    }
-
-    public void testPackageDeclaration_UnexpectedToken_NoIdentifierFollowingDot() throws Exception {
-        Parser parser = newParser("package cheese.");
-
-        try {
-            try {
-                parser.packageDeclaration();
-                fail("should have thrown UnexpectedTokenException");
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-            // expected and correct
-            assertNull(e.getUnexpectedToken());
-
-            assertLength(1, e.getExpectedTypes());
-
-            assertContains(Token.IDENTIFIER, e.getExpectedTypes());
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     import
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testImportStatement_NoDots() throws Exception {
-        Parser parser = newParser("import Cheese");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_As_NoDots() throws Exception {
-        Parser parser = newParser("import Cheese as Toast");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 1);
-
-            assertNode(root.getChild(1).getChild(0), "Toast", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_OneDot() throws Exception {
-        Parser parser = newParser("import cheese.Toast");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNode(root.getChild(0), "cheese", Token.IDENTIFIER, 0);
-            assertNode(root.getChild(1), "Toast", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_As_OneDot() throws Exception {
-        Parser parser = newParser("import cheese.Toast as Bread");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNode(root.getChild(0), "cheese", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(1), "Toast", Token.IDENTIFIER, 1);
-
-            assertNode(root.getChild(1).getChild(0), "Bread", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_MultipleDots() throws Exception {
-        Parser parser = newParser("import cheddar.cheese.Toast");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-            {
-                assertNode(root.getChild(0).getChild(0), "cheddar", Token.IDENTIFIER, 0);
-                assertNode(root.getChild(0).getChild(1), "cheese", Token.IDENTIFIER, 0);
-            }
-            
-            assertNode(root.getChild(1), "Toast", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_As_MultipleDots() throws Exception {
-        Parser parser = newParser("import cheddar.cheese.Toast as Bread");
-
-        CSTNode root = parser.importStatement();
-
-        assertNode(root, "import", Token.KEYWORD_IMPORT, 2);
-
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-            {
-                assertNode(root.getChild(0).getChild(0), "cheddar", Token.IDENTIFIER, 0);
-                assertNode(root.getChild(0).getChild(1), "cheese", Token.IDENTIFIER, 0);
-            }
-            
-            assertNode(root.getChild(1), "Toast", Token.IDENTIFIER, 1);
-            assertNode(root.getChild(1).getChild(0), "Bread", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testImportStatement_UnexpectedToken_NoInitialIdentifier() throws Exception {
-        Parser parser = newParser("import .");
-
-        try {
-            try {
-                parser.importStatement();
-                fail("should have thrown UnexpectedTokenException");
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-            // expected and correct
-            assertToken(e.getUnexpectedToken(), ".", Token.DOT);
-
-            assertLength(1, e.getExpectedTypes());
-
-            assertContains(Token.IDENTIFIER, e.getExpectedTypes());
-        }
-    }
-
-    public void testImportStatement_UnexpectedToken_NoIdentifierFollowingDot() throws Exception {
-        Parser parser = newParser("import cheese.");
-
-        try {
-            try {
-                parser.importStatement();
-                fail("should have thrown UnexpectedTokenException");
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-            // expected and correct
-            assertNull(e.getUnexpectedToken());
-
-            assertLength(1, e.getExpectedTypes());
-
-            assertContains(Token.IDENTIFIER, e.getExpectedTypes());
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     class
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testClassDeclaration_NoModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("class Cheese { }");
-
-        CSTNode modifiers = new CSTNode();
-
-        CSTNode root = parser.classDeclaration(modifiers);
-
-        assertNode(root, "class", Token.KEYWORD_CLASS, 5);
-
-        {
-            assertSame(modifiers, root.getChild(0));
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNullNode(root.getChild(3), 0);
-
-            assertNullNode(root.getChild(4), 0);
-        }
-    }
-
-    public void testClassDeclaration_NoIdentifier() throws Exception {
-        Parser parser = newParser("class {");
-
-        CSTNode modifiers = new CSTNode();
-
-        try {
-            try {
-                parser.classDeclaration(modifiers);
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-            // expected and correct
-            assertToken(e.getUnexpectedToken(), "{", Token.LEFT_CURLY_BRACE);
-
-            assertLength(1, e.getExpectedTypes());
-
-            assertContains(Token.IDENTIFIER, e.getExpectedTypes());
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     interface
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testInterfaceDeclaration_NoModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("interface Cheese { }");
-
-        CSTNode modifiers = new CSTNode();
-
-        CSTNode root = parser.interfaceDeclaration(modifiers);
-
-        assertNode(root, "interface", Token.KEYWORD_INTERFACE, 5);
-
-        {
-            assertSame(modifiers, root.getChild(0));
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     <type declaration>
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testTypeDeclaration_Class_NoModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("class Cheese { }");
-
-        CSTNode root = parser.typeDeclaration();
-
-        assertNode(root, "class", Token.KEYWORD_CLASS, 5);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNullNode(root.getChild(3), 0);
-
-            assertNullNode(root.getChild(4), 0);
-        }
-    }
-
-    public void testTypeDeclaration_Class_WithModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("public class Cheese { }");
-
-        CSTNode root = parser.typeDeclaration();
-
-        assertNode(root, "class", Token.KEYWORD_CLASS, 5);
-
-        {
-            assertNullNode(root.getChild(0), 1);
-            {
-                assertNode(root.getChild(0).getChild(0), "public", Token.KEYWORD_PUBLIC, 0);
-            }
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNullNode(root.getChild(3), 0);
-
-            assertNullNode(root.getChild(4), 0);
-        }
-    }
-
-    public void testTypeDeclaration_Interface_NoModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("interface Cheese { }");
-
-        CSTNode root = parser.typeDeclaration();
-
-        assertNode(root, "interface", Token.KEYWORD_INTERFACE, 5);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testTypeDeclaration_Interface_WithModifiers_NoBody_NoExtendsOrImplements() throws Exception {
-        Parser parser = newParser("public interface Cheese { }");
-
-        CSTNode root = parser.typeDeclaration();
-
-        assertNode(root, "interface", Token.KEYWORD_INTERFACE, 5);
-
-        {
-            assertNullNode(root.getChild(0), 1);
-            {
-                assertNode(root.getChild(0).getChild(0), "public", Token.KEYWORD_PUBLIC, 0);
-            }
-
-            assertNode(root.getChild(1), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-/*    /*
-    
-    The following is actually now valid...
-    
-    public void testTypeDeclaration_UnexpectedToken()
-        throws Exception
-    {
-        Parser parser = newParser( "cheese" );
-    
-        try
-        {
-            try {
-                parser.typeDeclaration();
-                fail( "should have thrown UnexpectedTokenException" );
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e)
-        {
-            assertToken( e.getToken(),
-                         "cheese",
-                         Token.IDENTIFIER );
-    
-            assertLength( 2,
-                          e.getExpectedTypes() );
-    
-            assertContains( Token.KEYWORD_CLASS,
-                            e.getExpectedTypes() );
-    
-            assertContains( Token.KEYWORD_INTERFACE,
-                            e.getExpectedTypes() );
-        }
-    }
-    */
-/*
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     <compilation unit>
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testCompilationUnit_NoImports_OneClass() throws Exception {
-        Parser parser = newParser("package cheese; public class Cheese{}");
-
-        CSTNode root = parser.compilationUnit();
-
-        assertNullNode(root, 3);
-
-        {
-            assertNode(root.getChild(0), "package", Token.KEYWORD_PACKAGE, 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "cheese", Token.IDENTIFIER, 0);
-            }
-
-            assertNullNode(root.getChild(1), 0);
-
-            assertNode(root.getChild(2), "class", Token.KEYWORD_CLASS, 5);
-        }
-    }
-
-    public void testCompilationUnit_NoImports_OneInterface() throws Exception {
-        Parser parser = newParser("package cheese; public interface Cheese{}");
-
-        CSTNode root = parser.compilationUnit();
-
-        assertNullNode(root, 3);
-
-        {
-            assertNode(root.getChild(0), "package", Token.KEYWORD_PACKAGE, 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "cheese", Token.IDENTIFIER, 0);
-            }
-
-            assertNullNode(root.getChild(1), 0);
-
-            assertNode(root.getChild(2), "interface", Token.KEYWORD_INTERFACE, 5);
-        }
-    }
-
-    public void testCompilationUnit_WithImports_OneClass() throws Exception {
-        Parser parser = newParser("package cheese; import com.Toast; import com.Jelly; public class Cheese{}");
-
-        CSTNode root = parser.compilationUnit();
-
-        assertNullNode(root, 3);
-
-        {
-            assertNode(root.getChild(0), "package", Token.KEYWORD_PACKAGE, 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "cheese", Token.IDENTIFIER, 0);
-            }
-
-            assertNullNode(root.getChild(1), 2);
-
-            {
-                assertNode(root.getChild(1).getChild(0), "import", Token.KEYWORD_IMPORT, 2);
-
-                assertNode(root.getChild(1).getChild(1), "import", Token.KEYWORD_IMPORT, 2);
-            }
-
-            assertNode(root.getChild(2), "class", Token.KEYWORD_CLASS, 5);
-        }
-    }
-
-    public void testCompilationUnit_WithImports_TwoClasses() throws Exception {
-        Parser parser =
-            newParser("package cheese; import com.Toast; import com.Jelly; public class Cheese{} public class Goober {}");
-
-        CSTNode root = parser.compilationUnit();
-
-        assertNullNode(root, 4);
-
-        {
-            assertNode(root.getChild(0), "package", Token.KEYWORD_PACKAGE, 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "cheese", Token.IDENTIFIER, 0);
-            }
-
-            assertNullNode(root.getChild(1), 2);
-
-            {
-                assertNode(root.getChild(1).getChild(0), "import", Token.KEYWORD_IMPORT, 2);
-
-                assertNode(root.getChild(1).getChild(1), "import", Token.KEYWORD_IMPORT, 2);
-            }
-
-            assertNode(root.getChild(2), "class", Token.KEYWORD_CLASS, 5);
-            {
-                assertNode(root.getChild(2).getChild(1), "Cheese", Token.IDENTIFIER, 0);
-            }
-
-            assertNode(root.getChild(3), "class", Token.KEYWORD_CLASS, 5);
-            {
-                assertNode(root.getChild(3).getChild(1), "Goober", Token.IDENTIFIER, 0);
-            }
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     <body statement>
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testBodyStatement_PropertyDeclaration_NoModifiers_NoType() throws Exception {
-        Parser parser = newParser("property cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        System.out.println("Got: " + root);
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_OneModifier_NoType() throws Exception {
-        Parser parser = newParser("static property cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "static", Token.KEYWORD_STATIC, 0);
-            }
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_TwoModifiers_NoType() throws Exception {
-        Parser parser = newParser("static synchronized property cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 2);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "static", Token.KEYWORD_STATIC, 0);
-
-                assertNode(root.getChild(0).getChild(1), "synchronized", Token.KEYWORD_SYNCHRONIZED, 0);
-            }
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_NoProperty_NoModifiers_NoType() throws Exception {
-        Parser parser = newParser("cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        System.out.println("Got: " + root);
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_NoProperty_OneModifier_NoType() throws Exception {
-        Parser parser = newParser("static cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 1);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "static", Token.KEYWORD_STATIC, 0);
-            }
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_NoProperty_TwoModifiers_NoType() throws Exception {
-        Parser parser = newParser("static synchronized cheese;");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 2);
-
-            {
-                assertNode(root.getChild(0).getChild(0), "static", Token.KEYWORD_STATIC, 0);
-
-                assertNode(root.getChild(0).getChild(1), "synchronized", Token.KEYWORD_SYNCHRONIZED, 0);
-            }
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_NoType_WithExpression() throws Exception {
-        Parser parser = newParser("cheese = 1234");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 4);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNode(root.getChild(3), "1234", Token.INTEGER_NUMBER, 0);
-        }
-    }
-
-    public void testBodyStatement_PropertyDeclaration_Type_WithExpression() throws Exception {
-        Parser parser = newParser("Food cheese = defaultValue()");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 4);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(2), "Food", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(3), "(", Token.LEFT_PARENTHESIS, 3);
-        }
-    }
-
-    public void testBodyStatement_MethodDeclaration_NoReturnType_NoParameters() throws Exception {
-        Parser parser = newParser("cheeseIt() { } ");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_METHOD, 6);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheeseIt", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNode(root.getChild(3), "(", Token.LEFT_PARENTHESIS, 0);
-        }
-    }
-
-    public void testBodyStatement_MethodDeclaration_WithReturnType_NoParameters() throws Exception {
-        Parser parser = newParser("String cheeseIt() { }");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_METHOD, 6);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheeseIt", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(2), "String", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(3), "(", Token.LEFT_PARENTHESIS, 0);
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     <parameter>
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testParameterList() throws Exception {
-    }
-
-    public void testParameterDeclarationWithoutDatatype() throws Exception {
-        Parser parser = newParser("cheese");
-
-        CSTNode root = parser.parameterDeclaration();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_PARAMETER_DECLARATION, 2);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testParameterDeclarationWithDatatype_Simple() throws Exception {
-        Parser parser = newParser("String cheese");
-
-        CSTNode root = parser.parameterDeclaration();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_PARAMETER_DECLARATION, 2);
-
-        {
-            assertNode(root.getChild(0), "String", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testParameterDeclarationWithDatatype_Qualified() throws Exception {
-        Parser parser = newParser("java.lang.String cheese");
-
-        CSTNode root = parser.parameterDeclaration();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_PARAMETER_DECLARATION, 2);
-
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-            {
-                assertNode(root.getChild(0).getChild(0), ".", Token.DOT, 2);
-
-                {
-                    assertNode(root.getChild(0).getChild(0).getChild(0), "java", Token.IDENTIFIER, 0);
-
-                    assertNode(root.getChild(0).getChild(0).getChild(1), "lang", Token.IDENTIFIER, 0);
-                }
-
-                assertNode(root.getChild(0).getChild(1), "String", Token.IDENTIFIER, 0);
-            }
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testParameterDeclaration_General_WithoutDatatype() throws Exception {
-        Parser parser = newParser("cheese");
-
-        CSTNode root = parser.parameterDeclaration();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_PARAMETER_DECLARATION, 2);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testParameterDeclaration_General_WithDatatype() throws Exception {
-        Parser parser = newParser("String cheese");
-
-        CSTNode root = parser.parameterDeclaration();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_PARAMETER_DECLARATION, 2);
-
-        {
-            assertNode(root.getChild(0), "String", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     <parameter list>
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testParameterList_Empty() throws Exception {
-        Parser parser = newParser("");
-
-        CSTNode root = parser.parameterDeclarationList();
-
-        assertNullNode(root, 0);
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     method
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testMethod_NoModifiers_NoReturnType_NoParameters() throws Exception {
-        Parser parser = newParser("cheeseIt() { }");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "<synthetic>", Token.SYNTH_METHOD, 6);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheeseIt", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-
-            assertNode(root.getChild(3), "(", Token.LEFT_PARENTHESIS, 0);
-        }
-    }
-
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-    //     property
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testProperty_NoModifiers_NoType() throws Exception {
-        Parser parser = newParser("property cheese");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    public void testProperty_NoModifiers_NoProperty_NoType() throws Exception {
-        Parser parser = newParser("cheese");
-
-        CSTNode root = parser.bodyStatement();
-
-        assertNode(root, "property", Token.KEYWORD_PROPERTY, 3);
-
-        {
-            assertNullNode(root.getChild(0), 0);
-
-            assertNode(root.getChild(1), "cheese", Token.IDENTIFIER, 0);
-
-            assertNullNode(root.getChild(2), 0);
-        }
-    }
-
-    //     ((misc))
-    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-
-    public void testIsModifier() throws Exception {
-        assertTrue(Token.isModifier(Token.KEYWORD_PUBLIC));
-        assertTrue(Token.isModifier(Token.KEYWORD_PROTECTED));
-        assertTrue(Token.isModifier(Token.KEYWORD_PRIVATE));
-        assertTrue(Token.isModifier(Token.KEYWORD_STATIC));
-        assertTrue(Token.isModifier(Token.KEYWORD_FINAL));
-        assertTrue(Token.isModifier(Token.KEYWORD_SYNCHRONIZED));
-        assertFalse(Token.isModifier(Token.IDENTIFIER));
-    }
-
-    public void testConsumeUntil_Found() throws Exception {
-        Parser parser = newParser("cheese toast is; bread");
-
-        assertToken(parser.la(), "cheese", Token.IDENTIFIER);
-
-        parser.consumeUntil(Token.SEMICOLON);
-
-        assertToken(parser.la(), "bread", Token.IDENTIFIER);
-    }
-
-    public void testConsumeUntil_NotFound() throws Exception {
-        Parser parser = newParser("cheese toast");
-
-        assertToken(parser.la(), "cheese", Token.IDENTIFIER);
-
-        parser.consumeUntil(Token.SEMICOLON);
-
-        assertNull(parser.la());
-    }
-
-    public void testAssignmentExpression() throws Exception {
-        Parser parser = newParser("answer = list.collect( { item | return item * 2 } )");
-
-        CSTNode root = parser.expression();
-    }
-
-    public void testSafeMethodCallExpression() throws Exception {
-        Parser parser = newParser("answer = foo->someMethod()");
-
-        CSTNode root = parser.expression();
-
-        System.out.println("Got: " + root);
-    }
-
-    public void testLogicalAndExpression() throws Exception {
-        Parser parser = newParser("x > 1 && \n y < 2");
-
-        CSTNode root = parser.expression();
-
-        System.out.println("Got: " + root);
-    }
-
-    public void testStatement_CharacterizeMePlease() throws Exception {
-        Parser parser = newParser("callBlock(5, { owner | owner.incrementCallCount() })");
-
-        CSTNode root = parser.statement();
-    }
-
-    public void testStatementBlock_CharacterizeMePlease() throws Exception {
-        Parser parser =
-            newParser("keys = answer.collect( { entry | return entry.key } ); values = answer.collect( { entry | return entry.value })");
-
-        CSTNode root = parser.statement();
-
-        root = parser.statement();
-    }
-
-    public void testStatementBlock_MissingSemicolon() throws Exception {
-        Parser parser =
-            newParser("keys = answer.collect( { entry | return entry.key } )  values = answer.collect( { entry | return entry.value })");
-
-        try {
-            try {
-                parser.statement(); 
-                fail("should have thrown UnexpectedTokenException");
-            }
-            catch( ExceptionCollector e ) {
-                e.throwFirstChild();
-            }
-        }
-        catch (UnexpectedTokenException e) {
-        }
-    }
-
-    public void testNewExpression() throws Exception {
-        Parser parser = newParser("new Cheese()");
-
-        CSTNode root = parser.newExpression();
-
-        assertNode(root, "new", Token.KEYWORD_NEW, 2);
-
-        {
-            assertNode(root.getChild(0), "Cheese", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(1), "<synthetic>", Token.SYNTH_LIST, 0);
-        }
-    }
-
-    public void testDatatype_NoDots() throws Exception {
-        Parser parser = newParser("Cheese");
-
-        CSTNode root = parser.datatype();
-
-        assertNode(root, "Cheese", Token.IDENTIFIER, 0);
-    }
-
-    public void testDatatype_OneDot() throws Exception {
-        Parser parser = newParser("cheese.Toast");
-
-        CSTNode root = parser.datatype();
-
-        assertNode(root, ".", Token.DOT, 2);
-        {
-            assertNode(root.getChild(0), "cheese", Token.IDENTIFIER, 0);
-
-            assertNode(root.getChild(1), "Toast", Token.IDENTIFIER, 0);
-        }
-    }
-
-    public void testDatatype_TwoDots() throws Exception {
-        Parser parser = newParser("toast.is.Bread");
-
-        CSTNode root = parser.datatype();
-
-        assertNode(root, ".", Token.DOT, 2);
-        {
-            assertNode(root.getChild(0), ".", Token.DOT, 2);
-            {
-                assertNode(root.getChild(0).getChild(0), "toast", Token.IDENTIFIER, 0);
-
-                assertNode(root.getChild(0).getChild(1), "is", Token.IDENTIFIER, 0);
-            }
-
-            assertNode(root.getChild(1), "Bread", Token.IDENTIFIER, 0);
-        }
-    }
-
-    // ----------------------------------------------------------------------
-    // ----------------------------------------------------------------------
-
-    protected void assertNullNode(CSTNode node, int numChildren) {
-        assertNotNull(node);
-        assertNull(node.getToken());
-        assertLength(numChildren, node.getChildren());
-    }
-
-    protected void assertNode(CSTNode node, String text, int type) {
-        assertNotNull(node);
-        assertNotNull(node.getToken());
-        assertEquals(text, node.getToken().getText());
-        assertEquals(type, node.getToken().getType());
-    }
-
-    protected void assertNode(CSTNode node, String text, int type, int numChildren) {
-        assertNotNull("Node should not be null!", node);
-        assertNotNull(node.getToken());
-        assertEquals(text, node.getToken().getText());
-        assertEquals(type, node.getToken().getType());
-        assertLength(numChildren, node.getChildren());
-    }
-
-    protected void assertToken(Token token, String text, int type) {
-        assertNotNull(token);
-        assertEquals(text, token.getText());
-        assertEquals(type, token.getType());
-    }
-
-    protected Parser newParser(String text) {
-        CharStream chars = new StringCharStream(text);
-        Lexer lexer = new Lexer(chars);
-        TokenStream tokens = new LexerTokenStream(lexer);
-
-        return new Parser(tokens);
-    }
-*/
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ReturnTypeErrorTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ReturnTypeErrorTest.java
deleted file mode 100644
index 3e49ab2..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/ReturnTypeErrorTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.codehaus.groovy.syntax.parser;
-
-import java.io.ByteArrayInputStream;
-
-import org.codehaus.groovy.classgen.TestSupport;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-/**
- * Tests that void/value return mismatches can be detected.
- * @author Steve Goetze
- */
-public class ReturnTypeErrorTest extends TestSupport {
-
-    public void testInvalidValueReturnStatement() throws Exception {
-    	doCompile(
-   				"class zup {\n"
-                + "    void foo() {\n"
-                + "        return 3;"
-                + "    }\n"
-                + "}\n");
-    }
-
-    public void testInvalidValueReturnStatement2() throws Exception {
-    	doCompile(
-   				"class zup {\n"
-                + "    void foo() {\n"
-                + "        if (true) \n"
-                + "            return \n"
-                + "        else \n"
-                + "            return 'Foo' \n"
-                + "    }\n"
-                + "}\n");
-    }
-
-    protected void doCompile(String code) throws Exception {
-        try {
-            loader.parseClass(new ByteArrayInputStream(code.getBytes()), getMethodName() + ".groovy");
-        }
-        catch(CompilationFailedException e ) {
-			if (e.getCause() instanceof RuntimeParserException) {
-				return;
-			}
-        }
-        
-        fail("Should have caught a RuntimeParserException");
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java b/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java
deleted file mode 100644
index bef4115..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-package org.codehaus.groovy.syntax.parser;
-
-import groovy.util.GroovyTestCase;
-
-import org.codehaus.groovy.ast.ModuleNode;
-import org.codehaus.groovy.control.SourceUnit;
-
-
-
-/**
- * An abstract base class useful for AST parser related test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public abstract class TestParserSupport extends GroovyTestCase {
-    
-    public ModuleNode parse(String text, String description) throws Exception {
-        SourceUnit unit = SourceUnit.create( description, text );
-        unit.parse();
-        unit.convert();
-        
-        return unit.getAST();
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/CompilerTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/CompilerTest.java
deleted file mode 100644
index ff501dd..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/CompilerTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.tools;
-
-import groovy.util.GroovyTestCase;
-
-import java.io.File;
-
-import org.codehaus.groovy.control.CompilerConfiguration;
-
-/**
- * A handy unit test case for dumping the output of the compiler
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class CompilerTest extends GroovyTestCase {
-
-    Compiler compiler  = null;
-    boolean  dumpClass = true;
-
-    public void testMethodCall() throws Exception {
-        //runTest("ClosureMethodTest.groovy");
-        //runTest("tree/VerboseTreeTest.groovy");
-        //runTest("tree/NestedClosureBugTest.groovy");
-        runTest("tree/SmallTreeTest.groovy");
-        //runTest("LittleClosureTest.groovy");
-    }
-
-    protected void runTest(String name) throws Exception {
-        File file = new File("src/test/groovy/" + name);
-        
-        assertTrue("Could not find source file: " + file, file.exists());
-
-        compiler.compile(file);
-    }
-
-    protected void setUp() throws Exception {
-        File dir = new File("target/test-generated-classes");
-        dir.mkdirs();
-        
-        CompilerConfiguration config = new CompilerConfiguration();
-        config.setDebug( dumpClass );
-        
-        compiler = new Compiler( config );
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java
deleted file mode 100644
index b28baa0..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/DocGeneratorMain.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.codehaus.groovy.tools;
-
-import groovy.lang.GroovyShell;
-
-import java.io.File;
-
-public class DocGeneratorMain {
-
-    public static void main(String[] args) {
-        try {
-            GroovyShell shell = new GroovyShell();
-            //shell.run("src/main/org/codehaus/groovy/tools/DocGenerator.groovy", "org.codehaus.groovy.tools.DocGenerator.groovy", args);
-            shell.run(new File("src/main/org/codehaus/groovy/tools/DocGenerator.groovy"), args);
-        }
-        catch (Exception e) {
-            System.out.println("Failed: " + e);
-            e.printStackTrace();
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java
deleted file mode 100644
index 8afef40..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package org.codehaus.groovy.tools;
-
-import groovy.util.GroovyTestCase;
-
-import java.io.File;
-
-import org.codehaus.groovy.control.CompilerConfiguration;
-
-/**
- * Tests the compiling & running of GroovyTestCases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class FileSystemCompilerTest extends GroovyTestCase {
-
-    FileSystemCompiler compiler = null;
-    boolean dumpClass = true;
-
-    public void testMethodCall() throws Exception {
-        //runTest("ClosureMethodTest.groovy");
-        //runTest("tree/VerboseTreeTest.groovy");
-        //runTest("tree/NestedClosureBugTest.groovy");
-        runTest("tree/SmallTreeTest.groovy");
-        //runTest("LittleClosureTest.groovy");
-    }
-
-    protected void runTest(String name) throws Exception {
-        File file = new File("src/test/groovy/" + name);
-        
-        assertTrue("Could not find source file: " + file, file.exists());
-
-        compiler.compile(new File[] { file });
-    }
-
-    protected void setUp() throws Exception {
-        File dir = new File("target/test-generated-classes");
-        dir.mkdirs();
-        
-        CompilerConfiguration configuration = new CompilerConfiguration();
-        configuration.setTargetDirectory(dir);
-        configuration.setVerbose(dumpClass);
-        
-        compiler = new FileSystemCompiler( configuration );
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FindAllTestsSuite.java b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FindAllTestsSuite.java
deleted file mode 100644
index 61631ef..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/FindAllTestsSuite.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-package org.codehaus.groovy.tools;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A TestSuite which will run a Groovy unit test case inside any Java IDE
- * either as a unit test case or as an application.
- * <p/>
- * You can specify the GroovyUnitTest to run by running this class as an appplication
- * and specifying the script to run on the command line.
- * <p/>
- * <code>
- * java groovy.util.GroovyTestSuite src/test/Foo.groovy
- * </code>
- * <p/>
- * Or to run the test suite as a unit test suite in an IDE you can use
- * the 'test' system property to define the test script to run.
- * e.g. pass this into the JVM when the unit test plugin runs...
- * <p/>
- * <code>
- * -Dtest=src/test/Foo.groovy
- * </code>
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class FindAllTestsSuite extends TestSuite {
-
-    protected static String testDirectory = "target/test-classes";
-
-    public static void main(String[] args) {
-        TestRunner.run(suite());
-    }
-
-    public static Test suite() {
-        FindAllTestsSuite suite = new FindAllTestsSuite();
-        try {
-            suite.loadTestSuite();
-        } catch (Exception e) {
-            throw new RuntimeException("Could not create the test suite: " + e, e);
-        }
-        return suite;
-    }
-
-    public void loadTestSuite() throws Exception {
-        recurseDirectory(new File(testDirectory));
-    }
-
-    protected void recurseDirectory(File dir) throws Exception {
-        File[] files = dir.listFiles();
-        List traverseList = new ArrayList();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (file.isDirectory()) {
-                traverseList.add(file);
-            } else {
-                String name = file.getName();
-                if (name.endsWith("Test.class") || name.endsWith("Bug.class")) {
-                    addTest(file);
-                }
-            }
-        }
-        for (Iterator iter = traverseList.iterator(); iter.hasNext();) {
-            recurseDirectory((File) iter.next());
-        }
-    }
-
-    protected void addTest(File file) throws Exception {
-        String name = file.getPath();
-
-        name = name.substring(testDirectory.length() + 1, name.length() - ".class".length());
-        name = name.replace(File.separatorChar, '.');
-        
-        //System.out.println("Found: " + name);
-        Class type = loadClass(name);
-        addTestSuite(type);
-    }
-
-    protected Class loadClass(String name) throws ClassNotFoundException {
-        try {
-            return Thread.currentThread().getContextClassLoader().loadClass(name);
-        } catch (ClassNotFoundException e) {
-            try {
-                return getClass().getClassLoader().loadClass(name);
-            } catch (ClassNotFoundException e1) {
-                return Class.forName(name);
-            }
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/DomToGroovyTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/DomToGroovyTest.java
deleted file mode 100644
index 58e2204..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/DomToGroovyTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.tools.xml;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.URL;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import junit.framework.TestCase;
-
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class DomToGroovyTest extends TestCase {
-
-    protected DocumentBuilder builder;
-    protected DomToGroovy converter;
-    protected File dir = new File("target/generated-groovyxml");
-
-    public void testConversion() throws Exception {
-        convert("test1.xml", "test1.groovy");
-        convert("po.xsd", "poSchema.groovy");
-        convert("swing.xml", "swing.groovy");
-    }
-
-    protected void convert(String name, String output) throws Exception {
-        Document document = parse(name);
-
-        PrintWriter writer = new PrintWriter(new FileWriter(new File(dir, output)));
-        converter = new DomToGroovy(writer);
-
-        writer.println("#!/bin/groovy");
-        writer.println();
-        writer.println("// generated from " + name);
-        writer.println();
-        converter.print(document);
-        writer.close();
-    }
-
-    protected Document parse(String name) throws SAXException, IOException {
-        URL resource = getClass().getResource(name);
-        assertTrue("Could not find resource: " + name, resource != null);
-        return builder.parse(new InputSource(resource.toString()));
-    }
-
-    protected void setUp() throws Exception {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        builder = factory.newDocumentBuilder();
-
-        dir.mkdirs();
-    }
-
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/po.xsd b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/po.xsd
deleted file mode 100644
index 399f959..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/po.xsd
+++ /dev/null
@@ -1,66 +0,0 @@
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-
- <xsd:annotation>
-  <xsd:documentation xml:lang="en">
-   Purchase order schema for Example.com.
-   Copyright 2000 Example.com. All rights reserved.
-  </xsd:documentation>
- </xsd:annotation>
-
- <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
-
- <xsd:element name="comment" type="xsd:string"/>
-
- <xsd:complexType name="PurchaseOrderType">
-  <xsd:sequence>
-   <xsd:element name="shipTo" type="USAddress"/>
-   <xsd:element name="billTo" type="USAddress"/>
-   <xsd:element ref="comment" minOccurs="0"/>
-   <xsd:element name="items"  type="Items"/>
-  </xsd:sequence>
-  <xsd:attribute name="orderDate" type="xsd:date"/>
- </xsd:complexType>
-
- <xsd:complexType name="USAddress">
-  <xsd:sequence>
-   <xsd:element name="name"   type="xsd:string"/>
-   <xsd:element name="street" type="xsd:string"/>
-   <xsd:element name="city"   type="xsd:string"/>
-   <xsd:element name="state"  type="xsd:string"/>
-   <xsd:element name="zip"    type="xsd:decimal"/>
-  </xsd:sequence>
-  <xsd:attribute name="country" type="xsd:NMTOKEN"
-     fixed="US"/>
- </xsd:complexType>
-
- <xsd:complexType name="Items">
-  <xsd:sequence>
-   <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">
-    <xsd:complexType>
-     <xsd:sequence>
-      <xsd:element name="productName" type="xsd:string"/>
-      <xsd:element name="quantity">
-       <xsd:simpleType>
-        <xsd:restriction base="xsd:positiveInteger">
-         <xsd:maxExclusive value="100"/>
-        </xsd:restriction>
-       </xsd:simpleType>
-      </xsd:element>
-      <xsd:element name="USPrice"  type="xsd:decimal"/>
-      <xsd:element ref="comment"   minOccurs="0"/>
-      <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
-     </xsd:sequence>
-     <xsd:attribute name="partNum" type="SKU" use="required"/>
-    </xsd:complexType>
-   </xsd:element>
-  </xsd:sequence>
- </xsd:complexType>
-
- <!-- Stock Keeping Unit, a code for identifying products -->
- <xsd:simpleType name="SKU">
-  <xsd:restriction base="xsd:string">
-   <xsd:pattern value="\d{3}-[A-Z]{2}"/>
-  </xsd:restriction>
- </xsd:simpleType>
-
-</xsd:schema> 
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing.xml b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing.xml
deleted file mode 100644
index 2a64c7e..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<!-- this example demonstrates using markup to specify a rich user interface -->
-<frame text="My Window" size="[300,300]">
-  <label text="Save changes" bounds="[10,10,290,30]"/>
-  <panel bounds="[10,40,290,290]">
-    <button text="OK" action="save()"/>
-    <button text="Cancel" action="close()"/>
-  </panel>
-</frame>
- 
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing2.xml b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing2.xml
deleted file mode 100644
index 2a64c7e..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/swing2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?>
-<!-- this example demonstrates using markup to specify a rich user interface -->
-<frame text="My Window" size="[300,300]">
-  <label text="Save changes" bounds="[10,10,290,30]"/>
-  <panel bounds="[10,40,290,290]">
-    <button text="OK" action="save()"/>
-    <button text="Cancel" action="close()"/>
-  </panel>
-</frame>
- 
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/test1.xml b/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/test1.xml
deleted file mode 100644
index 31c81de..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/tools/xml/test1.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<html>
-  <head>
-	<title>XML encoding with Groovy</title>
-  </head>
-  <body>
-    <h1>XML encoding with Groovy</h1>
-    <p>this format can be used as an alternative markup to XML</p>
-    <!-- an element with attributes and text content -->
-    <a href="http://groovy.codehaus.org">Groovy</a>
-    <!-- mixed content -->
-    <p>This is some <b>mixed</b> text. For more see the
-    <a href="http://groovy.codehaus.org">Groovy</a> project
-    </p>
-    <p>some text</p>
-  </body>
-</html>
\ No newline at end of file
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/Html2Wiki.groovy b/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/Html2Wiki.groovy
deleted file mode 100644
index d82eb58..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/Html2Wiki.groovy
+++ /dev/null
@@ -1,104 +0,0 @@
-import groovy.util.XmlParser
-
-import java.io.File
-
-import org.cyberneko.html.parsers.SAXParser
-
-class Html2Wiki {
-    
-    protected out
-    
-    static void main(args) {
-        gen = new Html2Wiki()
-        for (arg in args) {
-            gen.createWiki(arg)
-        }
-    }
-    
-    void createWiki(fileName) {
-        htmlParser = new SAXParser()
-        htmlParser.setProperty("http://cyberneko.org/html/properties/names/elems", "lower")
-        htmlParser.setProperty("http://cyberneko.org/html/properties/names/attrs", "lower")
-        parser = new XmlParser(htmlParser)
-        println "Parsing ${fileName}"
-        node = parser.parse(fileName)
-        
-        outputName = getOutputName(fileName)
-        new File(outputName).eachPrintWriter { out = it; makeWikiPage(node) }
-    }
-
-    getOutputName(fileName) {
-	    lastIdx = fileName.lastIndexOf(".")
-	    if (lastIdx > 0) {
-	        fileName = fileName.substring(0, lastIdx)
-	    }
-	    return fileName + ".wiki"
-	}
-    
-    void makeWikiPage(node) {
-        body = node.html.body
-        if (body == null) {
-            println "Warning empty document, no <html><body> section"
-        }
-        else {
-            applyTemplatesForChildren(node)
-        }
-    }
-    
-    void applyTemplates(node) {
-        switch (node.name()) {
-            case "h1":
-                out.println "1 " + node.text() 
-                out.println()
-                break
-            case "h2":
-                out.println "1.1 " + node.text()
-                out.println()
-                break
-            case "h3":
-                out.println "1.1.1 " + node.text()
-                out.println()
-                break
-            case "h4":
-                out.println "1.1.1.1 " + node.text()
-                out.println()
-                break
-            case "a":
-                out.print "{link:${node.text()}|${node.attribute('href')}} "
-                break
-            case "b":
-                out.print "__${node.text()}__ "
-                break
-            case "i":
-                out.print "~~${node.text()}~~ "
-                break
-            case "source":
-                out.println "{code:groovysh}
-${node.text()}
-{code}
-"
-               break
-            case "li":
-                out.print "* "
-                applyTemplatesForChildren(node)
-                out.println()
-                break
-            case "p":
-            default:
-                applyTemplatesForChildren(node)
-                out.println()
-                out.println()
-        }
-    }
-    
-    void applyTemplatesForChildren(node) {
-        for (c in node.children()) {
-            if (c instanceof String) {
-                out.print c + " "
-            }
-            else {
-                applyTemplates(c)
-            }
-        }
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunHtml2WikiTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunHtml2WikiTest.java
deleted file mode 100644
index 24c0484..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunHtml2WikiTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.wiki;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import groovy.lang.GroovyObject;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-/**
- * A helper class for running the Html2Wiki script as a JUnit test in an IDE
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class RunHtml2WikiTest extends TestSupport {
-
-    public void testRun() throws Exception {
-        List list = new ArrayList();
-        File dir = new File("xdocs");
-        File[] files = dir.listFiles();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            String name = file.getName();
-            if (name.endsWith(".html")) {
-                list.add("xdocs/" + file.getName());
-            }
-        }
-        String[] args = new String[list.size()];
-        list.toArray(args);
-
-        GroovyObject object = compile("src/test/org/codehaus/groovy/wiki/Html2Wiki.groovy");
-        object.invokeMethod("main", new Object[] { args });
-    }
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunWikiTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunWikiTest.java
deleted file mode 100644
index e371cb6..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/RunWikiTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * $Id$
- * 
- * Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package org.codehaus.groovy.wiki;
-
-import java.io.File;
-
-import org.codehaus.groovy.classgen.TestSupport;
-
-import groovy.util.GroovyTestSuite;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-/**
- * Tests the execution of wiki-generated test cases
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @version $Revision$
- */
-public class RunWikiTest extends TestSupport {
-
-    public static Test suite() {
-        TestSuite suite = new TestSuite();
-        File dir = new File("xdocs");
-        File[] files = dir.listFiles();
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            String name = file.getName();
-            if (name.endsWith(".wiki")) {
-                name = "target/test-classes/wiki/" + name.replaceAll(".wiki", "Test.groovy");
-                System.setProperty("test", name);
-                suite.addTest(GroovyTestSuite.suite());
-            }
-        }
-        return suite; 
-    }    
-}
diff --git a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/TestCaseRenderEngineTest.java b/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/TestCaseRenderEngineTest.java
deleted file mode 100644
index b293d4b..0000000
--- a/groovy/modules/classic/src/test/org/codehaus/groovy/wiki/TestCaseRenderEngineTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-package org.codehaus.groovy.wiki;
-
-import junit.framework.TestCase;
-
-import org.radeox.engine.context.BaseRenderContext;
-
-/**
- * @author James Strachan
- * @version $Revision$
- */
-public class TestCaseRenderEngineTest extends TestCase {
-
-    private BaseRenderContext context = new BaseRenderContext();
-
-    public void testRender() {
-        assertRender(
-            "blah blah {code:groovy}x = 1; assert x == 1{code} whatnot",
-            "package wiki\nclass someFileTest extends GroovyTestCase {\n\n/*\nblah blah */ \n\n  void testCase1() {\nx = 1; assert x == 1\n}\n\n /* whatnot\n*/\n\nvoid testDummy() {\n// this is a dummy test case\n}\n\n}\n");		
-    }
-
-    public void testRenderWithScript() {
-        assertRender(
-            "blah blah {code:groovysh}x = 1; println 'hello ${x}'{code} whatnot",
-             "package wiki\nclass someFileTest extends GroovyTestCase {\n\n/*\nblah blah */ \n\n  void testScript1() {\n    assertScript( <<<SCRIPT_EOF1\nx = 1; println 'hello \\${x}'\nSCRIPT_EOF1 )\n}    \n\n /* whatnot\n*/\n\nvoid testDummy() {\n// this is a dummy test case\n}\n\n}\n");
-    }
-
-    protected void assertRender(String input, String expected) {
-        TestCaseRenderEngine test = new TestCaseRenderEngine();
-        context.set("name", "someFile.wiki");
-        String answer = test.render(input, context);
-
-        System.out.println("Converted: " + input);
-        System.out.println("Into: " + answer);
-
-        // lets convert the output to a String we can cut-n-paste
-        System.out.println(answer.replaceAll("\n", "\\\\n"));
-        
-        assertEquals("Rendering", expected, answer);
-    }
-
-}
diff --git a/groovy/modules/gdata/.classpath b/groovy/modules/gdata/.classpath
deleted file mode 100644
index 6b26cd2..0000000
--- a/groovy/modules/gdata/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/demo"/>
-	<classpathentry kind="src" path="src/main"/>
-	<classpathentry kind="src" path="src/test"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.5.0"/>
-	<classpathentry kind="lib" path="lib/gdata-client-1.0.jar"/>
-	<classpathentry kind="lib" path="lib/gdata-calendar-1.0.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/groovy-core"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/groovy/modules/gdata/.project b/groovy/modules/gdata/.project
deleted file mode 100644
index fdc5f6e..0000000
--- a/groovy/modules/gdata/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>gdata</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/groovy/modules/gdata/.settings/org.eclipse.jdt.core.prefs b/groovy/modules/gdata/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0e8bc2b..0000000
--- a/groovy/modules/gdata/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sat Apr 22 11:07:52 BST 2006
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
diff --git a/groovy/modules/gdata/lib/gdata-calendar-1.0.jar b/groovy/modules/gdata/lib/gdata-calendar-1.0.jar
deleted file mode 100644
index 15c2563..0000000
--- a/groovy/modules/gdata/lib/gdata-calendar-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/gdata/lib/gdata-client-1.0.jar b/groovy/modules/gdata/lib/gdata-client-1.0.jar
deleted file mode 100644
index 311a546..0000000
--- a/groovy/modules/gdata/lib/gdata-client-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/gdata/src/demo/demo.groovy b/groovy/modules/gdata/src/demo/demo.groovy
deleted file mode 100644
index 789168f..0000000
--- a/groovy/modules/gdata/src/demo/demo.groovy
+++ /dev/null
@@ -1,66 +0,0 @@
-import com.google.gdata.client.*
-import com.google.gdata.client.calendar.*
-import com.google.gdata.data.*
-import com.google.gdata.data.extensions.*
-import com.google.gdata.util.*
-
-import groovy.google.gdata.GDataCategory
-import org.codehaus.groovy.runtime.TimeCategory
-
-def myId = System.properties.id
-def myPassword = System.properties.pass
-def feedUrl = "http://www.google.com/calendar/feeds/$myId/private/full"
-
-use (TimeCategory, GDataCategory) {
-    def myService = new CalendarService("codehausGroovy-groovyExampleApp-1")
-
-    myService.userCredentials = [myId, myPassword]
-    
-    //
-    // List existing entries
-    //
-
-    //
-    //  Get at most 20 events in the period starting 1 week ago and ending 4 weeks in the future
-    //
-    myService.getFeed(feedUrl, 1.week.ago, 4.weeks.from.today, 20).entries.each {entry ->
-        entry.times.each {time ->
-             println "${entry.title.text} From: ${time.startTime.toUiString()} To: ${(time.endTime.toUiString())}"
-        }
-    }
-
-    //
-    //  Get at most 20 events in the period starting 1 year ago lasting 2 years
-    //
-    myService.getFeed(feedUrl, 1.year.ago, 2.years, 20).entries.each {entry ->
-        entry.times.each {time ->
-            println "${entry.title.text} From: ${time.startTime.toUiString()} To: ${(time.endTime.toUiString())}"
-        }
-    }
-  
-    
-    //
-    // Add an entry
-    //
-    
-    // Use standard groovy magic to set the properties after construction
-    def me = new Person(name: "John Wilson", email: "tugwilson@gmail.com", uri: "http://eek.ook.org")
-    
-    //
-    // Need special magic in the GDataCategory to do this
-    //
-    // title and content are treated as plain text. If you want XHTML or XML then pass a closure or a
-    // Buildable object and it will run it in a builder context
-    //
-    // Note that we can't use title and content in the Catagory as they are already properties of the class. 
-    // Later I'll create a custom MetaClass for EventEntry which will let us use these names. Until then we'll mangle them
-    //
-    // author can be a single Person or a list of Person
-    //
-    // time can be a single When or a list of them
-    //
-    def newEntry = new EventEntry(title1: "This is a test event", content1: "this is some content", author: me,
-                                  time: new When(start: 1.hour.from.now, end: 2.hours.from.now))
-                                  
-    myService.insert(feedUrl, newEntry)
-}
diff --git a/groovy/modules/gdata/src/main/groovy/google/gdata/GDataCategory.java b/groovy/modules/gdata/src/main/groovy/google/gdata/GDataCategory.java
deleted file mode 100644
index f2831bd..0000000
--- a/groovy/modules/gdata/src/main/groovy/google/gdata/GDataCategory.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Created on Apr 21, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.google.gdata;
-
-import groovy.lang.Buildable;
-import groovy.lang.Closure;
-import groovy.time.DatumDependentDuration;
-import groovy.time.Duration;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-
-import com.google.gdata.client.GoogleService;
-import com.google.gdata.client.calendar.CalendarService;
-import com.google.gdata.data.DateTime;
-import com.google.gdata.data.Person;
-import com.google.gdata.data.PlainTextConstruct;
-import com.google.gdata.data.extensions.EventEntry;
-import com.google.gdata.data.extensions.EventFeed;
-import com.google.gdata.data.extensions.When;
-import com.google.gdata.util.AuthenticationException;
-import com.google.gdata.util.ServiceException;
-
-public class GDataCategory {
-    
-    //
-    // Extra CalendarService methods
-    //
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url) throws IOException, ServiceException {
-        return self.getFeed(url, EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final Date to, int maxEntries) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, to, maxEntries);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final Date to) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, to);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final DatumDependentDuration duration, int maxEntries) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, duration, maxEntries);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final DatumDependentDuration duration) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, duration);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final Duration duration, int maxEntries) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, duration, maxEntries);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final URL url, final Date from, final Duration duration) throws IOException, ServiceException {
-        return getFeed(self, url.toExternalForm(), from, duration);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url) throws IOException, ServiceException {
-        return self.getFeed(new URL(url), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final Date to, int maxEntries) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = new DateTime(to.getTime());
-
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1+ "&max-results=" + maxEntries), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final Date to) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = new DateTime(to.getTime());
-        
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final DatumDependentDuration duration, int maxEntries) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = plus(from1, duration);
-
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1 + "&max-results=" + maxEntries), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final DatumDependentDuration duration) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = plus(from1, duration);
-        
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final Duration duration, int maxEntries) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = plus(from1, duration);
-
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1 + "&max-results=" + maxEntries), EventFeed.class);
-    }
-    
-    public static EventFeed getFeed(final CalendarService self, final String url, final Date from, final Duration duration) throws IOException, ServiceException {
-    final DateTime from1 = new DateTime(from.getTime());
-    final DateTime to1 = plus(from1, duration);
-        
-        return self.getFeed(new URL(url + "?start-min=" + from1 + "&start-max=" + to1), EventFeed.class);
-    }
-    
-    public static EventEntry insert(final CalendarService self, final String url, EventEntry entry) throws IOException, ServiceException {
-        return self.insert(new URL(url), entry);
-    }
-    
-    public static void setUserCredentials(final GoogleService self, final List<String> creds) throws AuthenticationException {
-        self.setUserCredentials(creds.get(0), creds.get(1));
-    }
-    
-    public static String toUiString(final Duration self) {
-        // TODO: make this format more user friendly
-        return Long.toString(self.getMillis()) + " Milliseconds";
-    }
-    
-    public static String toUiString(final DatumDependentDuration self) {
-        // TODO: make this format more user friendly
-        return Integer.toString(self.getYears()) + " Years " + Integer.toString(self.getMonths()) + " Months " + Long.toString(self.getMillis()) + " Milliseconds";
-    }
-    
-    //
-    // Extra EventEntry methods
-    //
-    
-    public static void setTitle1(final EventEntry self, final String title) {
-        self.setTitle(new PlainTextConstruct(title));
-    }
-    
-    public static void setTitle(final EventEntry self, final Closure titleBuilder) {
-        // TODO: implement this
-    }
-    
-    public static void setTitle(final EventEntry self, final Buildable titleBuilder) {
-        // TODO: implement this
-    }
-    
-    public static void setContent1(final EventEntry self, final String content) {
-        self.setTitle(new PlainTextConstruct(content));
-    }
-    
-    public static void setContent(final EventEntry self, final Closure contentBuilder) {
-        // TODO: implement this
-    }
-    
-    public static void setContent(final EventEntry self, final Buildable contentBuilder) {
-        // TODO: implement this
-    }
-    
-    public static void setAuthor(final EventEntry self, final Person author) {
-        self.getAuthors().add(author);
-    }
-    
-    public static void setAuthor(final EventEntry self, final List<Person> authors) {
-        self.getAuthors().addAll(authors);
-    }
-    
-    public static void setTime(final EventEntry self, final When when) {
-        self.addTime(when);
-    }
-    
-    public static void setTime(final EventEntry self, final List<When> whens) {
-        self.getTimes().addAll(whens);
-    }
-    
-    //
-    // Extra When methods
-    //
-    
-    public static void setStart(final When self, final Date start) {
-        self.setStartTime(new DateTime(start));
-    }
-    
-    public static void setEnd(final When self, final Date end) {
-        self.setEndTime(new DateTime(end));
-    }
-    
-    /*
-     * Methods to support date and time arithmetic
-     * These are in the Category to avoid putting Google related methods on Duration
-     */
-    
-    public static DateTime plus (final DateTime self, final Duration rhs) {
-    // TODO: handle TIMEZONE
-    final Calendar cal = Calendar.getInstance();
-    
-        cal.setTimeInMillis(self.getValue());
-        cal.add(Calendar.DAY_OF_YEAR, rhs.getDays());
-        cal.add(Calendar.HOUR_OF_DAY, rhs.getHours());
-        cal.add(Calendar.MINUTE, rhs.getMinutes());
-        cal.add(Calendar.SECOND, rhs.getSeconds());
-        cal.add(Calendar.MILLISECOND, rhs.getMillis());
-        
-        return new DateTime(cal.getTimeInMillis());
-    }
-    
-    public static DateTime plus (final DateTime self, final DatumDependentDuration rhs) {
-    // TODO: handle TIMEZONE
-    final Calendar cal = Calendar.getInstance();
-    
-        cal.setTimeInMillis(self.getValue());
-        cal.add(Calendar.YEAR, rhs.getYears());
-        cal.add(Calendar.MONTH, rhs.getMonths());
-        cal.add(Calendar.DAY_OF_YEAR, rhs.getDays());
-        cal.add(Calendar.HOUR_OF_DAY, rhs.getHours());
-        cal.add(Calendar.MINUTE, rhs.getMinutes());
-        cal.add(Calendar.SECOND, rhs.getSeconds());
-        cal.add(Calendar.MILLISECOND, rhs.getMillis());
-        
-        return new DateTime(cal.getTimeInMillis());
-    }
-    
-    public static DateTime plus (final Duration self, final DateTime rhs) {
-        return plus(rhs, self);
-    }
-    
-    public static DateTime plus (final DatumDependentDuration self, final DateTime rhs) {
-        return plus(rhs, self);
-    }
-    
-    public static DateTime minus (final DateTime self, final Duration rhs) {
-        return new DateTime(self.getValue() - rhs.getMillis());
-    }
-    
-    public static DateTime minus (final DateTime self, final DatumDependentDuration rhs) {
-        // TODO: handle TIMEZONE
-        final Calendar cal = Calendar.getInstance();
-        
-            cal.add(Calendar.YEAR, -rhs.getYears());
-            cal.add(Calendar.MONTH, -rhs.getMonths());
-            cal.add(Calendar.DAY_OF_YEAR, -rhs.getDays());
-            cal.add(Calendar.HOUR_OF_DAY, -rhs.getHours());
-            cal.add(Calendar.MINUTE, -rhs.getMinutes());
-            cal.add(Calendar.SECOND, -rhs.getSeconds());
-            cal.add(Calendar.MILLISECOND, -rhs.getMillis());
-           
-            return new DateTime(cal.getTimeInMillis());
-    }
-}
diff --git a/groovy/modules/gdata/src/main/groovy/time/BaseDuration.java b/groovy/modules/gdata/src/main/groovy/time/BaseDuration.java
deleted file mode 100644
index 366d7ed..0000000
--- a/groovy/modules/gdata/src/main/groovy/time/BaseDuration.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Created on Apr 22, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.time;
-
-import java.util.Calendar;
-import java.util.Date;
-
-public abstract class BaseDuration {
-    protected final int years;
-    protected final int months;    
-    protected final int days;
-    protected final int hours;
-    protected final int minutes;
-    protected final int seconds;    
-    protected final int millis;
-
-    protected BaseDuration(final int years, final int months, final int days, final int hours, final int minutes, final int seconds, final int millis) {
-        this.years = years;
-        this.months = months;
-        this.days = days;
-        this.hours = hours;
-        this.minutes = minutes;
-        this.seconds = seconds;
-        this.millis = millis;
-    }
-
-    protected BaseDuration(final int days, final int hours, final int minutes, final int seconds, final int millis) {
-        this(0, 0, days, hours, minutes, seconds, millis);
-    }
-    
-    public int getYears() {
-        return this.years;
-    }
-    
-    public int getMonths() {
-        return this.months;
-    }
-    
-    public int getDays() {
-        return this.days;
-    }
-    
-    public int getHours() {
-        return this.hours;
-    }
-    
-    public int getMinutes() {
-        return this.minutes;
-    }
-    
-    public int getSeconds() {
-        return this.seconds;
-    }
-    
-    public int getMillis() {
-        return this.millis;
-    }
-    
-    public Date plus(final Date date) {
-    final Calendar cal = Calendar.getInstance();
-    
-        cal.setTime(date);
-        cal.add(Calendar.YEAR, this.years);
-        cal.add(Calendar.MONTH, this.months);
-        cal.add(Calendar.DAY_OF_YEAR, this.days);
-        cal.add(Calendar.HOUR_OF_DAY, this.hours);
-        cal.add(Calendar.MINUTE, this.minutes);
-        cal.add(Calendar.SECOND, this.seconds);
-        cal.add(Calendar.MILLISECOND, this.millis);
-        
-        return cal.getTime();
-    }
-    
-    public abstract long toMilliseconds();
-    
-    public abstract Date getAgo();
-    
-    public abstract From getFrom();
-
-    public static abstract class From {
-        public abstract Date getNow();
-        
-        public Date getToday() {
-            return getNow();
-        }
-    }
-}
diff --git a/groovy/modules/gdata/src/main/groovy/time/DatumDependentDuration.java b/groovy/modules/gdata/src/main/groovy/time/DatumDependentDuration.java
deleted file mode 100644
index fcfd56c..0000000
--- a/groovy/modules/gdata/src/main/groovy/time/DatumDependentDuration.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Created on Apr 21, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.time;
-
-import java.util.Calendar;
-import java.util.Date;
-
-import org.codehaus.groovy.runtime.TimeCategory;
-
-/**
- * @author John Wilson tug@wilson.co.uk
- *
- * DatumDependentDuration represents durations whose length in milliseconds cannot be determined withou knowing the datum point.
- *
- * I don't know how many days in a year unless I know if it's a leap year or not.
- * 
- * I don't know how many days in a month unless I know the name of the month (and if it's a leap yaer if the month is February)
- * 
- */
-public class DatumDependentDuration extends BaseDuration {
-    public DatumDependentDuration(final int years, final int months, final int days, final int hours, final int minutes, final int seconds, final int millis) {
-        super(years, months, days, hours, minutes, seconds, millis);
-    }
-
-    public int getMonths() {
-        return this.months;
-    }
-
-    public int getYears() {
-        return this.years;
-    }
-    
-    public DatumDependentDuration plus(final DatumDependentDuration rhs) {
-        return new DatumDependentDuration(this.getYears() + rhs.getYears(), this.getMonths() + rhs.getMonths(),
-                                          this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                          this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                          this.getMillis() + rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration plus(final TimeDatumDependentDuration rhs) {
-        return rhs.plus(this);
-    }
-    
-    public DatumDependentDuration plus(final Duration rhs) {
-        return new DatumDependentDuration(this.getYears(), this.getMonths(),
-                                          this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                          this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                          this.getMillis() + rhs.getMillis());
-
-    }
-    
-    public DatumDependentDuration plus(final TimeDuration rhs) {
-        return rhs.plus(this);
-
-    }
-    
-    public DatumDependentDuration minus(final DatumDependentDuration rhs) {
-        return new DatumDependentDuration(this.getYears() - rhs.getYears(), this.getMonths() - rhs.getMonths(),
-                                          this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                          this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                          this.getMillis() - rhs.getMillis());
-
-    }
-    
-    public DatumDependentDuration minus(final Duration rhs) {
-        return new DatumDependentDuration(this.getYears(), this.getMonths(),
-                                          this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                          this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                          this.getMillis() - rhs.getMillis());
-
-    }
-    
-    /* (non-Javadoc)
-     * @see groovy.time.BaseDuration#toMilliseconds()
-     * 
-     * Do our best to change the duration into milliseconds
-     * We calculate the duartion relative to now
-     */
-    public long toMilliseconds() {
-    final Date now = new Date();
-    
-        return TimeCategory.minus(plus(now), now).toMilliseconds();
-    }
-    
-    public Date getAgo() {
-    final Calendar cal = Calendar.getInstance();
-
-        cal.add(Calendar.YEAR, -this.getYears());
-        cal.add(Calendar.MONTH, -this.getMonths());
-        cal.add(Calendar.DAY_OF_YEAR, -this.getDays());
-        cal.add(Calendar.HOUR_OF_DAY, -this.getHours());
-        cal.add(Calendar.MINUTE, -this.getMinutes());
-        cal.add(Calendar.SECOND, -this.getSeconds());
-        cal.add(Calendar.MILLISECOND, -this.getMillis());
-        
-        //
-        // SqlDate should not really care about these values but it seems to "remember" them
-        // so we clear them.
-        // We do the adds first incase we get carry into the day field
-        //
-        cal.set(Calendar.HOUR_OF_DAY, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-
-        return new java.sql.Date(cal.getTimeInMillis());
-    }
-    
-    public From getFrom() {
-        return new From() {
-            public Date getNow() {
-            final Calendar cal = Calendar.getInstance();
-
-                cal.add(Calendar.YEAR, DatumDependentDuration.this.getYears());
-                cal.add(Calendar.MONTH, DatumDependentDuration.this.getMonths());
-                cal.add(Calendar.DAY_OF_YEAR, DatumDependentDuration.this.getDays());
-                cal.add(Calendar.HOUR_OF_DAY, DatumDependentDuration.this.getHours());
-                cal.add(Calendar.MINUTE, DatumDependentDuration.this.getMinutes());
-                cal.add(Calendar.SECOND, DatumDependentDuration.this.getSeconds());
-                cal.add(Calendar.MILLISECOND, DatumDependentDuration.this.getMillis());
-                
-                //
-                // SqlDate should not really care about these values but it seems to "remember" them
-                // so we clear them.
-                // We do the adds first incase we get carry into the day field
-                //
-                cal.set(Calendar.HOUR_OF_DAY, 0);
-                cal.set(Calendar.MINUTE, 0);
-                cal.set(Calendar.SECOND, 0);
-                cal.set(Calendar.MILLISECOND, 0);
-                
-                return new java.sql.Date(cal.getTimeInMillis());
-             }
-        };
-    }
-}
diff --git a/groovy/modules/gdata/src/main/groovy/time/Duration.java b/groovy/modules/gdata/src/main/groovy/time/Duration.java
deleted file mode 100644
index 3b75754..0000000
--- a/groovy/modules/gdata/src/main/groovy/time/Duration.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Created on Apr 21, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.time;
-
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * @author John Wilson tug@wilson.co.uk
- * 
- * Duration represents time periods which have values independant of the context.
- * So, whilst we can't say how long a month is without knowing the year and the name of the month,
- * we know how long a day is independant of the date.
- * 
- * This is not 100% true for days.
- * Days can actually be 23, 24 or 25 hours long (due to daylight saving adjustments)
- * 
- * If you ask Duration to convert itself to milliseconds then it will work on the basis of 24 hours
- * in a day. If you add or subtract it from a date it will take daylight saving into account.
- *
- */
-public class Duration extends BaseDuration {
-    public Duration(final int days, final int hours, final int minutes, final int seconds, final int millis) {
-        super(days, hours, minutes, seconds, millis);
-    }
-    
-    public Duration plus(final Duration rhs) {
-        return new Duration(this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                            this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                            this.getMillis() + rhs.getMillis());
-    }
-
-    public TimeDuration plus(final TimeDuration rhs) {
-        return rhs.plus(this);
-    }
-    
-    public DatumDependentDuration plus(final DatumDependentDuration rhs) {
-        return rhs.plus(this);
-    }
-    
-    public Duration minus(final Duration rhs) {
-        return new Duration(this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                            this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                            this.getMillis() - rhs.getMillis());
-    }
-    
-    public TimeDuration minus(final TimeDuration rhs) {
-        return new TimeDuration(this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                this.getMillis() - rhs.getMillis());
-    }
-    
-    public DatumDependentDuration minus(final DatumDependentDuration rhs) {
-        return new DatumDependentDuration(-rhs.getYears(), -rhs.getMonths(),
-                                          this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                          this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                          this.getMillis() - rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration minus(final TimeDatumDependentDuration rhs) {
-        return new TimeDatumDependentDuration(-rhs.getYears(), -rhs.getMonths(),
-                                              this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                              this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                              this.getMillis() - rhs.getMillis());
-    }
-    
-    public long toMilliseconds() {
-        return ((((((long)(this.getDays() * 24 ) + this.getHours()) * 60 + this.getMinutes()) * 60) + this.getSeconds()) * 1000) + this.getMillis();
-    }
-    
-    public Date getAgo() {
-    final Calendar cal = Calendar.getInstance();
-
-        cal.add(Calendar.DAY_OF_YEAR, -this.getDays());
-        cal.add(Calendar.HOUR_OF_DAY, -this.getHours());
-        cal.add(Calendar.MINUTE, -this.getMinutes());
-        cal.add(Calendar.SECOND, -this.getSeconds());
-        cal.add(Calendar.MILLISECOND, -this.getMillis());
-        
-        return cal.getTime();
-    }
-     
-    public From getFrom() {
-        return new From() {
-            public Date getNow() {
-            final Calendar cal = Calendar.getInstance();
-
-                cal.add(Calendar.DAY_OF_YEAR, Duration.this.getDays());
-                
-                return new java.sql.Date(cal.getTimeInMillis());
-            }
-        };
-    }
-}
diff --git a/groovy/modules/gdata/src/main/groovy/time/TimeDatumDependentDuration.java b/groovy/modules/gdata/src/main/groovy/time/TimeDatumDependentDuration.java
deleted file mode 100644
index 2b88712..0000000
--- a/groovy/modules/gdata/src/main/groovy/time/TimeDatumDependentDuration.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Created on Jun 6, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.time;
-
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * @author John Wilson tug@wilson.co.uk
- * 
- * TimeDatumDuration represents a time perid which results from an
- * arithmetic operation between a TimeDuration object and a DatumDuration object
- * 
- */
-public class TimeDatumDependentDuration extends DatumDependentDuration {
-    public TimeDatumDependentDuration(int years, int months, int days, int hours, int minutes, int seconds, int millis) {
-        super(years, months, days, hours, minutes, seconds, millis);
-    }
-    
-    public TimeDatumDependentDuration plus(final Duration rhs) {
-        return new TimeDatumDependentDuration(this.getYears(), this.getMonths(),
-                                              this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                              this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                              this.getMillis() + rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration plus(final DatumDependentDuration rhs) {
-        return new TimeDatumDependentDuration(this.getYears() + rhs.getYears(), this.getMonths() + rhs.getMonths(),
-                                              this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                              this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                              this.getMillis() + rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration minus(final Duration rhs) {
-        return new TimeDatumDependentDuration(this.getYears(), this.getMonths(),
-                                              this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                              this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                              this.getMillis() - rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration minus(final DatumDependentDuration rhs) {
-        return new TimeDatumDependentDuration(this.getYears() - rhs.getYears(), this.getMonths() - rhs.getMonths(),
-                                              this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                              this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                              this.getMillis() - rhs.getMillis());
-    }
-    
-    public From getFrom() {
-        return new From() {
-            public Date getNow() {
-            final Calendar cal = Calendar.getInstance();
-
-                cal.add(Calendar.YEAR, TimeDatumDependentDuration.this.getYears());
-                cal.add(Calendar.MONTH, TimeDatumDependentDuration.this.getMonths());
-                cal.add(Calendar.DAY_OF_YEAR, TimeDatumDependentDuration.this.getDays());
-                cal.add(Calendar.HOUR_OF_DAY, TimeDatumDependentDuration.this.getHours());
-                cal.add(Calendar.MINUTE, TimeDatumDependentDuration.this.getMinutes());
-                cal.add(Calendar.SECOND, TimeDatumDependentDuration.this.getSeconds());
-                cal.add(Calendar.MILLISECOND, TimeDatumDependentDuration.this.getMillis());
-                
-                return cal.getTime();
-            }
-        };
-    }
-
-}
diff --git a/groovy/modules/gdata/src/main/groovy/time/TimeDuration.java b/groovy/modules/gdata/src/main/groovy/time/TimeDuration.java
deleted file mode 100644
index b976744..0000000
--- a/groovy/modules/gdata/src/main/groovy/time/TimeDuration.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Created on Jun 6, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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 groovy.time;
-
-import java.util.Calendar;
-import java.util.Date;
-
-/**
- * @author John Wilson tug@wilson.co.uk
- * 
- * TimeDuration represents time periods expressed in units of hours, minutes, seconds and milliseconds.
- * 
- * Whilst we can't say how long a month is without knowing the year and the name of the month,
- * we know how long a second is independant of the date.
- * 
- * This is not 100% true for minutes.
- * Minutes can be 59, 60 or 61 seconds long (due to leap seconds)
- * 
- * If you ask Duration to convert itself to milliseconds then it will work on the basis of 60 seconds in a minute.
- * If you add or subtract it from a date it will take leap seconds into account
- *
- */
-
-public class TimeDuration extends Duration {
-    public TimeDuration(final int hours, final int minutes, final int seconds, final int millis) {
-        super(0, hours, minutes, seconds, millis);
-     }
-    
-    public TimeDuration(final int days, final int hours, final int minutes, final int seconds, final int millis) {
-        super(days, hours, minutes, seconds, millis);
-     }
-    
-    public TimeDuration plus(final Duration rhs) {
-        return new TimeDuration(this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                this.getMillis() + rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration plus(final DatumDependentDuration rhs) {
-        return new TimeDatumDependentDuration(rhs.getYears(), rhs.getMonths(),
-                                              this.getDays() + rhs.getDays(), this.getHours() + rhs.getHours(),
-                                              this.getMinutes() + rhs.getMinutes(), this.getSeconds() + rhs.getSeconds(),
-                                              this.getMillis() + rhs.getMillis());
-    }
-    
-    public TimeDuration minus(final Duration rhs) {
-        return new TimeDuration(this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                this.getMillis() - rhs.getMillis());
-    }
-    
-    public TimeDatumDependentDuration minus(final DatumDependentDuration rhs) {
-        return new TimeDatumDependentDuration(-rhs.getYears(), -rhs.getMonths(),
-                                              this.getDays() - rhs.getDays(), this.getHours() - rhs.getHours(),
-                                              this.getMinutes() - rhs.getMinutes(), this.getSeconds() - rhs.getSeconds(),
-                                              this.getMillis() - rhs.getMillis());
-    }
-    
-    public From getFrom() {
-        return new From() {
-            public Date getNow() {
-            final Calendar cal = Calendar.getInstance();
-
-                cal.add(Calendar.DAY_OF_YEAR, TimeDuration.this.getDays());
-                cal.add(Calendar.HOUR_OF_DAY, TimeDuration.this.getHours());
-                cal.add(Calendar.MINUTE, TimeDuration.this.getMinutes());
-                cal.add(Calendar.SECOND, TimeDuration.this.getSeconds());
-                cal.add(Calendar.MILLISECOND, TimeDuration.this.getMillis());
-                
-                return cal.getTime();
-            }
-        };
-    }
-}
diff --git a/groovy/modules/gdata/src/main/org/codehaus/groovy/runtime/TimeCategory.java b/groovy/modules/gdata/src/main/org/codehaus/groovy/runtime/TimeCategory.java
deleted file mode 100644
index 3f49c78..0000000
--- a/groovy/modules/gdata/src/main/org/codehaus/groovy/runtime/TimeCategory.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Created on Apr 23, 2006
- *
- * Copyright 2006 John G. Wilson
- *
- *   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.codehaus.groovy.runtime;
-
-import groovy.time.BaseDuration;
-import groovy.time.DatumDependentDuration;
-import groovy.time.Duration;
-import groovy.time.TimeDuration;
-
-import java.util.Calendar;
-import java.util.Date;
-
-public class TimeCategory {
-    /*
-     * Mthods to allow Data Duration arithmetic
-     */
-    
-    public static Date plus(final Date date, final BaseDuration duration) {
-        return duration.plus(date);
-    }
-    
-    public static Date minus(final Date date, final BaseDuration duration) {
-    final Calendar cal = Calendar.getInstance();
-        
-        cal.setTime(date);
-        cal.add(Calendar.YEAR, -duration.getYears());
-        cal.add(Calendar.MONTH, -duration.getMonths());
-        cal.add(Calendar.DAY_OF_YEAR, -duration.getDays());
-        cal.add(Calendar.HOUR_OF_DAY, -duration.getMinutes());
-        cal.add(Calendar.MINUTE, -duration.getMinutes());
-        cal.add(Calendar.SECOND, -duration.getSeconds());
-        cal.add(Calendar.MILLISECOND, -duration.getMillis());
-        
-        return cal.getTime();
-    }
-    
-    public static TimeDuration minus(final Date lhs, final Date rhs) {
-        long milliseconds = lhs.getTime() - rhs.getTime();
-        long days = milliseconds / (24 * 60 * 60 * 1000);
-        milliseconds -= days * 24 * 60 * 60 * 1000;
-        int hours = (int)(milliseconds / (60 * 60 * 1000));
-        milliseconds -= hours * 60 * 60 * 1000;
-        int minutes = (int)(milliseconds / (60 * 1000));
-        milliseconds -= minutes * 60 * 1000;
-        int seconds = (int)(milliseconds / 1000);
-        milliseconds -= seconds * 1000;
-        
-        return new TimeDuration((int)days, hours, minutes, seconds, (int)milliseconds);
-    }
-    
-    /*
-     * Methods on Integer to implement 1.month, 4.years etc.
-     */
-    
-    public static DatumDependentDuration getMonths(final Integer self) {
-        return new DatumDependentDuration(0, self.intValue(), 0, 0, 0, 0, 0);
-    }
-    
-    public static DatumDependentDuration getMonth(final Integer self) {
-        return getMonths(self);
-    }
-    
-    public static DatumDependentDuration getYears(final Integer self) {
-        return new DatumDependentDuration(self.intValue(), 0, 0, 0, 0, 0, 0);
-    }
-    
-    public static DatumDependentDuration getYear(final Integer self) {
-        return getYears(self);
-    }
-    
-    /*
-     * Methods on Integer to implement 1.week, 4.days etc.
-     */
-    
-    public static Duration getWeeks(final Integer self) {
-        return new Duration(self.intValue() * 7, 0, 0, 0, 0);
-    }
-    
-    public static Duration getWeek(final Integer self) {
-        return getWeeks(self);
-    }
-    
-    public static Duration getDays(final Integer self) {
-        return new Duration(self.intValue(), 0, 0, 0, 0);
-    }
-    
-    public static Duration getDay(final Integer self) {
-        return getDays(self);
-    }
-    
-    public static TimeDuration getHours(final Integer self) {
-        return new TimeDuration(0, self.intValue(), 0, 0, 0);
-    }
-    
-    public static TimeDuration getHour(final Integer self) {
-        return getHours(self);
-    }
-    
-    public static TimeDuration getMinutes(final Integer self) {
-        return new TimeDuration(0, 0, self.intValue(), 0, 0);
-    }
-    
-    public static TimeDuration getMinute(final Integer self) {
-        return getMinutes(self);
-    }
-    
-    public static TimeDuration getSeconds(final Integer self) {
-        return new TimeDuration(0, 0, 0, self.intValue(), 0);
-    }
-    
-    public static TimeDuration getSecond(final Integer self) {
-        return getSeconds(self);
-    }
-    
-    public static TimeDuration getMilliseconds(final Integer self) {
-        return new TimeDuration(0, 0, 0, 0, self.intValue());
-    }
-    
-    public static TimeDuration getMillisecond(final Integer self) {
-        return getMilliseconds(self);
-    }
-}
diff --git a/groovy/modules/gdata/src/test/groovy/google/gdata/DurationTest.groovy b/groovy/modules/gdata/src/test/groovy/google/gdata/DurationTest.groovy
deleted file mode 100644
index 8846c1d..0000000
--- a/groovy/modules/gdata/src/test/groovy/google/gdata/DurationTest.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-package groovy.google.gdata
-
-import org.codehaus.groovy.runtime.TimeCategory
-import java.util.Date
-
-class DurationTest extends GroovyTestCase {
-    void testFixedDurationArithmetic() {
-        use(TimeCategory) {
-            def oneDay = 2.days - 1.day
-            assert oneDay.toMilliseconds() == (24 * 60 * 60 * 1000)
-            
-            oneDay = 2.days - 1.day + 24.hours - 1440.minutes
-            assert oneDay.toMilliseconds() == (24 * 60 * 60 * 1000)
-        }
-   }
-    
-    void testDatumDependantArithmetic() {
-        use(TimeCategory) {
-            def twoMonths = 1.month + 1.month
-            def twoMonthsFromNow = 2.months.from.now - 0.months.from.now 
-            def oneMonthFromNow = 1.month.from.now - 0.months.from.now
-            
-            assert twoMonths.toMilliseconds() == twoMonthsFromNow.toMilliseconds()
-            
-            def monthAndWeek = 1.month + 1.week
-            
-            assert monthAndWeek.toMilliseconds() == (oneMonthFromNow + 1.week).toMilliseconds()
-            
-            def now = new Date()
-            def then = monthAndWeek + now
-            def week = then - 1.month - now
-            assert week.toMilliseconds() == (7 * 24 * 60 * 60 * 1000)
-            
-            then = now + monthAndWeek
-            week = then - 1.month - now
-            assert week.toMilliseconds() == (7 * 24 * 60 * 60 * 1000)
-            
-            assert (now + monthAndWeek) == (monthAndWeek + now)
-            
-            week = then - (now + 1.month)
-            assert week.toMilliseconds() == (7 * 24 * 60 * 60 * 1000)
-        }
-    }
-}
diff --git a/groovy/modules/grails/.classpath b/groovy/modules/grails/.classpath
deleted file mode 100644
index de26f2e..0000000
--- a/groovy/modules/grails/.classpath
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/commons"/>
-	<classpathentry kind="src" path="src/web"/>
-	<classpathentry kind="src" path="src/persistence"/>
-	<classpathentry kind="src" path="src/scaffolding"/>
-	<classpathentry output="target/test-classes" kind="src" path="test/commons"/>
-	<classpathentry output="target/test-classes" kind="src" path="test/web"/>
-	<classpathentry output="target/test-classes" kind="src" path="test/persistence"/>
-	<classpathentry output="target/test-classes" kind="src" path="test/scaffolding"/>
-	<classpathentry kind="lib" path="lib/junit.jar"/>
-	<classpathentry sourcepath="D:/Downloads/Development/Spring/spring-framework-1.2/src" kind="lib" path="lib/spring.jar"/>
-	<classpathentry kind="lib" path="lib/commons-logging.jar"/>
-	<classpathentry kind="lib" path="lib/servlet-api.jar"/>
-	<classpathentry sourcepath="D:/sandbox_os/spring-projects/spring-beans/src/java" kind="lib" path="lib/springmodules-sandbox.jar"/>
-	<classpathentry kind="lib" path="lib/spring-mock.jar"/>
-	<classpathentry kind="lib" path="lib/commons-lang-2.0.jar"/>
-	<classpathentry kind="lib" path="lib/commons-dbcp-1.2.1.jar"/>
-	<classpathentry kind="lib" path="lib/commons-pool-1.2.jar"/>
-	<classpathentry sourcepath="D:/Downloads/Development/HSQLDB/hsqldb/src" kind="lib" path="lib/hsqldb.jar"/>
-	<classpathentry kind="lib" path="lib/commons-collections-3.0.jar"/>
-	<classpathentry kind="lib" path="lib/dom4j-1.6.jar"/>
-	<classpathentry sourcepath="/Users/stevendevijver/download/spring-projects/spring-webflow" kind="lib" path="lib/spring-webflow.jar"/>
-	<classpathentry kind="lib" path="lib/spring-binding.jar"/>
-	<classpathentry kind="lib" path="lib/log4j-1.2.8.jar"/>
-	<classpathentry kind="lib" path="lib/ognl-2.7.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/antlr-2.7.5H3.jar"/>
-	<classpathentry kind="lib" path="lib/asm.jar"/>
-	<classpathentry kind="lib" path="lib/asm-attrs.jar"/>
-	<classpathentry kind="lib" path="lib/cglib-2.1.jar"/>
-	<classpathentry kind="lib" path="lib/ehcache-1.1.jar"/>
-	<classpathentry kind="lib" path="lib/ejb-3.0-edr2.jar"/>
-	<classpathentry sourcepath="D:/Downloads/Development/Hibernate/hibernate-3.0.5/hibernate-3.0/src" kind="lib" path="lib/hibernate3.jar"/>
-	<classpathentry sourcepath="D:/Downloads/Development/Hibernate/hibernate-annotations-3.0beta2/hibernate-annotations-3.0beta2/src/java" kind="lib" path="lib/hibernate-annotations.jar"/>
-	<classpathentry kind="lib" path="lib/jdbc2_0-stdext.jar"/>
-	<classpathentry kind="lib" path="lib/jta.jar"/>
-	<classpathentry sourcepath="D:/Downloads/Development/SiteMesh/src/java" kind="lib" path="lib/sitemesh-2.2.1.jar"/>
-	<classpathentry kind="lib" path="lib/jakarta-oro-2.0.8.jar"/>
-	<classpathentry kind="lib" path="lib/commons-validator.jar"/>
-	<classpathentry sourcepath="/groovy/src/main" kind="lib" path="lib/groovy-all-1.0-jsr-05-SNAPSHOT.jar"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/groovy/modules/grails/.cvsignore b/groovy/modules/grails/.cvsignore
deleted file mode 100644
index 99e4899..0000000
--- a/groovy/modules/grails/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-dist
-target
-classes
-test-classes
-etc
\ No newline at end of file
diff --git a/groovy/modules/grails/.project b/groovy/modules/grails/.project
deleted file mode 100644
index 4d9a95c..0000000
--- a/groovy/modules/grails/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>grails</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/groovy/modules/grails/Grails Module.iml b/groovy/modules/grails/Grails Module.iml
deleted file mode 100644
index 6978c48..0000000
--- a/groovy/modules/grails/Grails Module.iml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4" relativePaths="true" type="JAVA_MODULE">
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/classes" />
-    <exclude-output />
-    <output-test url="file://$MODULE_DIR$/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/commons" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/persistence" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/scaffolding" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/web" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/test/commons" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/persistence" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/scaffolding" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/web" isTestSource="true" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Apache Commons" level="application" />
-    <orderEntry type="library" name="Hibernate 3" level="application" />
-    <orderEntry type="library" name="SiteMesh" level="application" />
-    <orderEntry type="library" name="Spring" level="application" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/junit.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/ognl-2.7.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/javax.servlet.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/src/persistence" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/src/commons" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/src/scaffolding" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/src/web" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/test/commons" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/test/persistence" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/test/scaffolding" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="file://$MODULE_DIR$/test/web" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="Xerces" level="application" />
-    <orderEntry type="library" name="HSQLDB" level="application" />
-    <orderEntry type="library" name="Groovy" level="application" />
-    <orderEntryProperties />
-  </component>
-  <component name="VcsManagerConfiguration">
-    <option name="ACTIVE_VCS_NAME" value="CVS" />
-    <option name="USE_PROJECT_VCS" value="false" />
-  </component>
-</module>
-
diff --git a/groovy/modules/grails/Grails.iml b/groovy/modules/grails/Grails.iml
deleted file mode 100644
index 80f091b..0000000
--- a/groovy/modules/grails/Grails.iml
+++ /dev/null
@@ -1,294 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4" relativePaths="true" type="JAVA_MODULE">
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <exclude-output />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/commons" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/persistence" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/web" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/test/commons" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/persistence" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/web" isTestSource="true" />
-      <excludeFolder url="file://$MODULE_DIR$/dist" />
-      <excludeFolder url="file://$MODULE_DIR$/lib" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/groovy-all-1.0-jsr-03-SNAPSHOT.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/dom4j-1.6.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/asm-attrs.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/hibernate3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hsqldb.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/xml-apis.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/ehcache-1.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/asm.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/spring.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/commons-logging.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/cglib-2.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/commons-dbcp-1.2.1.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/servlet-api.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/standard-2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/springmodules-sandbox.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/spring-mock.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/spring-binding.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/commons-collections-3.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/spring-webflow.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/commons-lang-2.0.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/log4j-1.2.8.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/jdbc2_0-stdext.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/junit.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/ognl-2.7.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/jstl-2.3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/ejb-3.0-edr2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/hibernate-annotations.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/antlr-2.7.5H3.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/hibernate/jta.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/commons-pool-1.2.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES />
-      </library>
-    </orderEntry>
-    <orderEntry type="library" name="groovy" level="application" />
-    <orderEntryProperties />
-  </component>
-</module>
-
diff --git a/groovy/modules/grails/ant/bin/ant b/groovy/modules/grails/ant/bin/ant
deleted file mode 100644
index cf336db..0000000
--- a/groovy/modules/grails/ant/bin/ant
+++ /dev/null
@@ -1,299 +0,0 @@
-#! /bin/sh
-
-#   Copyright 2001-2005 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.
-
-# Extract launch and ant arguments, (see details below).
-ant_exec_args=
-no_config=false
-use_jikes_default=false
-ant_exec_debug=false
-show_help=false
-for arg in "$@" ; do
-  if [ "$arg" = "--noconfig" ] ; then
-    no_config=true
-  elif [ "$arg" = "--usejikes" ] ; then
-    use_jikes_default=true
-  elif [ "$arg" = "--execdebug" ] ; then
-    ant_exec_debug=true
-  elif [ my"$arg" = my"--h"  -o my"$arg" = my"--help"  ] ; then
-    show_help=true
-    ant_exec_args="$ant_exec_args -h"
-  else
-    if [  my"$arg" = my"-h"  -o  my"$arg" = my"-help" ] ; then
-      show_help=true
-    fi
-    ant_exec_args="$ant_exec_args \"$arg\""
-  fi
-done
-
-# Source/default ant configuration
-if $no_config ; then
-  rpm_mode=false
-  usejikes=$use_jikes_default
-else
-  # load system-wide ant configuration
-  if [ -f "/etc/ant.conf" ] ; then
-    . /etc/ant.conf
-  fi
-
-  # load user ant configuration
-  if [ -f "$HOME/.ant/ant.conf" ] ; then
-    . $HOME/.ant/ant.conf
-  fi
-  if [ -f "$HOME/.antrc" ] ; then
-    . "$HOME/.antrc"
-  fi
-
-  # provide default configuration values
-  if [ -z "$rpm_mode" ] ; then
-    rpm_mode=false
-  fi
-  if [ -z "$usejikes" ] ; then
-    usejikes=$use_jikes_default
-  fi
-fi
-
-# Setup Java environment in rpm mode
-if $rpm_mode ; then
-  if [ -f /usr/share/java-utils/java-functions ] ; then
-    . /usr/share/java-utils/java-functions
-    set_jvm
-    set_javacmd
-  fi
-fi
-
-# OS specific support.  $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-case "`uname`" in
-  CYGWIN*) cygwin=true ;;
-  Darwin*) darwin=true
-           if [ -z "$JAVA_HOME" ] ; then
-             JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
-           fi
-           ;;
-esac
-
-if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
-  ## resolve links - $0 may be a link to ant's home
-  PRG="$0"
-  progname=`basename "$0"`
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-    PRG="$link"
-    else
-    PRG=`dirname "$PRG"`"/$link"
-    fi
-  done
-
-  ANT_HOME=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  ANT_HOME=`cd "$ANT_HOME" && pwd`
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-  [ -n "$ANT_HOME" ] &&
-    ANT_HOME=`cygpath --unix "$ANT_HOME"`
-  [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-fi
-
-# set ANT_LIB location
-ANT_LIB="${ANT_HOME}/lib"
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD=`which java 2> /dev/null `
-    if [ -z "$JAVACMD" ] ; then
-        JAVACMD=java
-    fi
-  fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly."
-  echo "  We cannot execute $JAVACMD"
-  exit 1
-fi
-
-# Build local classpath using just the launcher in non-rpm mode or
-# use the Jpackage helper in rpm mode with basic and default jars
-# specified in the ant.conf configuration. Because the launcher is
-# used, libraries linked in ANT_HOME will also be include, but this
-# is discouraged as it is not java-version safe. A user should
-# request optional jars and their dependencies via the OPT_JAR_LIST
-# variable
-if $rpm_mode && [ -f /usr/bin/build-classpath ] ; then
-  LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
-  # If the user requested to try to add some other jars to the classpath
-  if [ -n "$OPT_JAR_LIST" ] ; then
-    _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
-    if [ -n "$_OPTCLASSPATH" ] ; then 
-      LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
-    fi
-  fi
-
-  # Explicitly add javac path to classpath, assume JAVA_HOME set
-  # properly in rpm mode
-  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
-  fi
-  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
-    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
-  fi
-
-  # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
-  # user CLASSPATH first and ant-found jars after.
-  # In that case, the user CLASSPATH will override ant-found jars
-  #
-  # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
-  # with ant-found jars first and user CLASSPATH after
-  if [ -n "$CLASSPATH" ] ; then
-    # merge local and specified classpath 
-    if [ -z "$LOCALCLASSPATH" ] ; then 
-      LOCALCLASSPATH="$CLASSPATH"
-    elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
-      LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
-    else
-      LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
-    fi
-
-    # remove class path from launcher -cp option
-    CLASSPATH=""
-  fi
-else
-  # not using rpm_mode; use launcher to determine classpaths
-  if [ -z "$LOCALCLASSPATH" ] ; then
-      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
-  else
-      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
-  fi
-fi
-
-if [ -n "$JAVA_HOME" ] ; then
-  # OSX hack to make Ant work with jikes
-  if $darwin ; then
-    OSXHACK="${JAVA_HOME}/../Classes"
-    if [ -d "${OSXHACK}" ] ; then
-      for i in "${OSXHACK}"/*.jar
-      do
-        JIKESPATH="$JIKESPATH:$i"
-      done
-    fi
-  fi
-fi
-
-# Allow Jikes support (off by default)
-if $usejikes; then
-  ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
-fi
-
-# For Cygwin, switch paths to appropriate format before running java
-# For PATHs convert to unix format first, then to windows format to ensure
-# both formats are supported. Probably this will fail on directories with ;
-# in the name in the path. Let's assume that paths containing ; are more
-# rare than windows style paths on cygwin.
-if $cygwin; then
-  if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
-    format=mixed
-  else
-    format=windows
-  fi
-  ANT_HOME=`cygpath --$format "$ANT_HOME"`
-  ANT_LIB=`cygpath --$format "$ANT_LIB"`
-  JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
-  LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
-  LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
-  if [ -n "$CLASSPATH" ] ; then
-    CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
-    CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
-  fi
-  CYGHOME=`cygpath --$format "$HOME"`
-fi
-
-# Show script help if requested
-if $show_help ; then
-  echo $0 '[script options] [options] [target [target2 [target3] ..]]'
-  echo 'Script Options:'
-  echo '  --help, --h            print this message and ant help'
-  echo '  --noconfig             suppress sourcing of /etc/ant.conf,'
-  echo '                         $HOME/.ant/ant.conf, and $HOME/.antrc'
-  echo '                         configuration files'
-  echo '  --usejikes             enable use of jikes by default, unless'
-  echo '                         set explicitly in configuration files'
-  echo '  --execdebug            print ant exec line generated by this'
-  echo '                         launch script'
-  echo '  '
-fi
-# add a second backslash to variables terminated by a backslash under cygwin
-if $cygwin; then
-  case "$ANT_HOME" in
-    *\\ )
-    ANT_HOME="$ANT_HOME\\"
-    ;;
-  esac
-  case "$CYGHOME" in
-    *\\ )
-    CYGHOME="$CYGHOME\\"
-    ;;
-  esac
-  case "$JIKESPATH" in
-    *\\ )
-    JIKESPATH="$JIKESPATH\\"
-    ;;
-  esac
-  case "$LOCALCLASSPATH" in
-    *\\ )
-    LOCALCLASSPATH="$LOCALCLASSPATH\\"
-    ;;
-  esac
-  case "$CLASSPATH" in
-    *\\ )
-    CLASSPATH="$CLASSPATH\\"
-    ;;
-  esac
-fi
-# Execute ant using eval/exec to preserve spaces in paths,
-# java options, and ant args
-ant_sys_opts=
-if [ -n "$CYGHOME" ]; then
-  if [ -n "$JIKESPATH" ]; then
-    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
-  else
-    ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
-  fi
-else
-  if [ -n "$JIKESPATH" ]; then
-    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
-  fi
-fi
-ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
-if $ant_exec_debug ; then
-    echo $ant_exec_command
-fi
-eval $ant_exec_command
diff --git a/groovy/modules/grails/ant/bin/ant.bat b/groovy/modules/grails/ant/bin/ant.bat
deleted file mode 100644
index e2dafab..0000000
--- a/groovy/modules/grails/ant/bin/ant.bat
+++ /dev/null
@@ -1,126 +0,0 @@
-@echo off
-
-REM  Copyright 2001,2004-2005 The Apache Software Foundation
-REM
-REM  Licensed under the Apache License, Version 2.0 (the "License");
-REM  you may not use this file except in compliance with the License.
-REM  You may obtain a copy of the License at
-REM
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-
-if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-rem %~dp0 is expanded pathname of the current script under NT
-set DEFAULT_ANT_HOME=%~dp0..
-
-if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
-set DEFAULT_ANT_HOME=
-
-set _USE_CLASSPATH=yes
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of arguments (up to the command line limit, anyway).
-set ANT_CMD_LINE_ARGS=%1
-if ""%1""=="""" goto doneStart
-shift
-:setupArgs
-if ""%1""=="""" goto doneStart
-if ""%1""==""-noclasspath"" goto clearclasspath
-set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
-shift
-goto setupArgs
-
-rem here is there is a -noclasspath in the options
-:clearclasspath
-set _USE_CLASSPATH=no
-shift
-goto setupArgs
-
-rem This label provides a place for the argument list loop to break out
-rem and for NT handling to skip to.
-
-:doneStart
-rem find ANT_HOME if it does not exist due to either an invalid value passed
-rem by the user or the %0 problem on Windows 9x
-if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
-
-rem check for ant in Program Files
-if not exist "%ProgramFiles%\ant" goto checkSystemDrive
-set ANT_HOME=%ProgramFiles%\ant
-goto checkJava
-
-:checkSystemDrive
-rem check for ant in root directory of system drive
-if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
-set ANT_HOME=%SystemDrive%\ant
-goto checkJava
-
-:checkCDrive
-rem check for ant in C:\ant for Win9X users
-if not exist C:\ant\lib\ant.jar goto noAntHome
-set ANT_HOME=C:\ant
-goto checkJava
-
-:noAntHome
-echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
-goto end
-
-:checkJava
-set _JAVACMD=%JAVACMD%
-
-if "%JAVA_HOME%" == "" goto noJavaHome
-if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
-goto checkJikes
-
-:noJavaHome
-if "%_JAVACMD%" == "" set _JAVACMD=java.exe
-
-:checkJikes
-if not "%JIKESPATH%"=="" goto runAntWithJikes
-
-:runAnt
-if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
-if not "%CLASSPATH%"=="" goto runAntWithClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntWithClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntWithJikes
-if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
-if not "%CLASSPATH%"=="" goto runAntWithJikesAndClasspath
-
-:runAntWithJikesNoClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
-goto end
-
-:runAntWithJikesAndClasspath
-"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS%  -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
-goto end
-
-:end
-set _JAVACMD=
-set ANT_CMD_LINE_ARGS=
-
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
-:mainEnd
-if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
-
diff --git a/groovy/modules/grails/ant/bin/ant.cmd b/groovy/modules/grails/ant/bin/ant.cmd
deleted file mode 100644
index 4bb903f..0000000
--- a/groovy/modules/grails/ant/bin/ant.cmd
+++ /dev/null
@@ -1,92 +0,0 @@
-/* 
-    Copyright 2003-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.
- 
-    Run ant
-*/
-
-'@echo off'
-parse arg mode envarg '::' antarg
-
-if mode\='.' & mode\='..' & mode\='/' then do
-  envarg = mode envarg
-  mode = ''
-end
-
-if antarg = '' then do
-  antarg = envarg
-  envarg = ''
-end
-
-x = setlocal()
-
-env="OS2ENVIRONMENT"
-antenv = _getenv_('antenv')
-if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
-
-if mode = '' then mode = _getenv_('ANT_MODE' '..')
-if mode \= '/' then do
-  runrc = _getenv_('runrc')
-  antrc = _getenv_('antrc' 'antrc.cmd')
-  if mode = '..' then mode = '-r'
-  else mode = ''
-  interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
-end
-
-if _testenv_() = 0 then do
-  say 'Ant environment is not set properly'
-  x = endlocal()
-  exit 16
-end
-
-settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
-
-java = _getenv_('javacmd' 'java')
-opts = value('ANT_OPTS',,env)
-args = value('ANT_ARGS',,env)
-lcp = value('LOCALCLASSPATH',,env)
-cp = value('CLASSPATH',,env)
-if value('ANT_USE_CP',,env) \= '' then do
-  if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
-  lcp = lcp || cp
-  'SET CLASSPATH='
-end
-if lcp\='' then lcp = '-classpath' lcp
-
-cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
-launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
-if launcher = '' then entry = 'org.apache.tools.ant.Main'
-else entry = 'org.apache.tools.ant.launch.Launcher'
-java opts lcp entry settings args antarg
-
-x = endlocal()
-
-return rc
-
-_testenv_: procedure expose env ANT_HOME JAVA_HOME
-ANT_HOME = value('ANT_HOME',,env)
-if ANT_HOME = '' then return 0
-JAVA_HOME = value('JAVA_HOME',,env)
-if JAVA_HOME = '' then return 0
-cp = translate(value('CLASSPATH',,env))
-if pos(translate(ANT_HOME), cp) = 0 then return 0
-if pos(translate(JAVA_HOME), cp) = 0 then return 0
-return 1
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
diff --git a/groovy/modules/grails/ant/bin/antRun b/groovy/modules/grails/ant/bin/antRun
deleted file mode 100644
index baddd71..0000000
--- a/groovy/modules/grails/ant/bin/antRun
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-
-#
-#  Copyright  2001-2002,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.
-# 
-#
-
-# Args: DIR command
-cd "$1"
-CMD="$2"
-shift
-shift
-
-exec "$CMD" "$@"
diff --git a/groovy/modules/grails/ant/bin/antRun.bat b/groovy/modules/grails/ant/bin/antRun.bat
deleted file mode 100644
index 289e19b..0000000
--- a/groovy/modules/grails/ant/bin/antRun.bat
+++ /dev/null
@@ -1,47 +0,0 @@
-@echo off
-
-REM
-REM Copyright  2001-2002,2004-2005 The Apache Software Foundation
-REM
-REM  Licensed under the Apache License, Version 2.0 (the "License");
-REM  you may not use this file except in compliance with the License.
-REM  You may obtain a copy of the License at
-REM
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-REM
-REM
-
-if "%OS%"=="Windows_NT" @setlocal
-if "%OS%"=="WINNT" @setlocal
-
-if ""%1""=="""" goto runCommand
-
-rem Change drive and directory to %1
-if "%OS%"=="Windows_NT" cd /d ""%1""
-if not "%OS%"=="Windows_NT" cd ""%1""
-shift
-
-rem Slurp the command line arguments. This loop allows for an unlimited number
-rem of agruments (up to the command line limit, anyway).
-set ANT_RUN_CMD=%1
-if ""%1""=="""" goto runCommand
-shift
-:loop
-if ""%1""=="""" goto runCommand
-set ANT_RUN_CMD=%ANT_RUN_CMD% %1
-shift
-goto loop
-
-:runCommand
-rem echo %ANT_RUN_CMD%
-%ANT_RUN_CMD%
-
-if "%OS%"=="Windows_NT" @endlocal
-if "%OS%"=="WINNT" @endlocal
-
diff --git a/groovy/modules/grails/ant/bin/antRun.pl b/groovy/modules/grails/ant/bin/antRun.pl
deleted file mode 100644
index 7cdd868..0000000
--- a/groovy/modules/grails/ant/bin/antRun.pl
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright 2001,2003-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.
-#
-#######################################################################
-#
-# antRun.pl
-#
-# wrapper script for invoking commands on a platform with Perl installed
-# this is akin to antRun.bat, and antRun the SH script 
-#
-# created:         2001-10-18
-# author:          Jeff Tulley jtulley@novell.com 
-#######################################################################
-#be fussy about variables
-use strict;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info (currently unused)
-my $debug=1;
-
-#######################################################################
-# change drive and directory to "%1"
-my $ANT_RUN_CMD = @ARGV[0];
-
-# assign current run command to "%2"
-chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
-if ($^O eq "NetWare") {
-    # There is a bug in Perl 5 on NetWare, where chdir does not
-    # do anything.  On NetWare, the following path-prefixed form should 
-    # always work. (afaict)
-    $ANT_RUN_CMD .= "/".@ARGV[1];
-}
-else {
-    $ANT_RUN_CMD = @ARGV[1];
-}
-
-# dispose of the first two arguments, leaving only the command's args.
-shift;
-shift;
-
-# run the command
-my $returnValue = system $ANT_RUN_CMD, @ARGV;
-if ($returnValue eq 0) {
-    exit 0;
-}
-else {
-    # only 0 and 1 are widely recognized as exit values
-    # so change the exit value to 1
-    exit 1;
-}
diff --git a/groovy/modules/grails/ant/bin/antenv.cmd b/groovy/modules/grails/ant/bin/antenv.cmd
deleted file mode 100644
index b9b0db4..0000000
--- a/groovy/modules/grails/ant/bin/antenv.cmd
+++ /dev/null
@@ -1,99 +0,0 @@
-/* 
-    Copyright 2003-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.
-
-    Ant environment
-*/
-
-'@echo off'
-call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
-call SysLoadFuncs
-
-/* Prepare the parameters for later use */
-parse arg argv
-mode = ''
-args = ''
-opts = ''
-cp = ''
-lcp = ''
-
-do i = 1 to words(argv)
-  param = word(argv, i)
-  select
-    when param='-lcp' then mode = 'l'
-    when param='-cp' | param='-classpath' then mode = 'c'
-    when abbrev('-opts', param, 4) then mode = 'o'
-    when abbrev('-args', param, 4) then mode = 'a'
-  otherwise
-    select
-      when mode = 'a' then args = space(args param, 1)
-      when mode = 'c' then cp = space(cp param, 1)
-      when mode = 'l' then lcp = space(lcp param, 1)
-      when mode = 'o' then opts = space(opts param, 1)
-    otherwise
-      say 'Option' param 'ignored'
-    end
-  end
-end
-
-env="OS2ENVIRONMENT"
-antconf = _getenv_('antconf' 'antconf.cmd')
-runrc = _getenv_('runrc')
-interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
-ANT_HOME = value('ANT_HOME',,env)
-JAVA_HOME = value('JAVA_HOME',,env)
-classpath = value('CLASSPATH',,env)
-classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
-if classes \= '' then classpath = prepend(classpath classes)
-
-classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
-'SET CLASSPATH=' || classpath
-
-/* Setting classpathes, options and arguments */
-envset = _getenv_('envset')
-if cp\=''   then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
-if lcp\=''  then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
-if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
-if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
-
-exit 0
-
-addpath: procedure
-parse arg path elem
-if elem = '' then do
-  if path\='' & right(path, 1)\=';' then path = path || ';'
-  return path
-end
-if substr(path, length(path)) = ';' then glue = ''
-else glue = ';'
-if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
-return path
-
-prepend: procedure
-parse arg path elem
-if elem = '' then do
-  if path\='' & right(path, 1)\=';' then path = path || ';'
-  return path
-end
-if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
-return path
-
-_getenv_: procedure expose env
-parse arg envar default
-if default = '' then default = envar
-var = value(translate(envar),,env)
-if var = '' then var = default
-return var
diff --git a/groovy/modules/grails/ant/bin/complete-ant-cmd.pl b/groovy/modules/grails/ant/bin/complete-ant-cmd.pl
deleted file mode 100644
index 20dd476..0000000
--- a/groovy/modules/grails/ant/bin/complete-ant-cmd.pl
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright 2001,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.
-#
-# A script to allow Bash or Z-Shell to complete an Ant command-line.  
-#
-# To install for Bash 2.0 or better, add the following to ~/.bashrc:
-# 
-#     $ complete -C complete-ant-cmd ant build.sh
-#
-# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
-#
-#     function ant_complete () {
-#         local args_line args
-#         read -l args_line
-#         set -A args $args_line
-#         set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
-#     }
-#     compctl -K ant_complete ant build.sh
-#     
-# @author Mike Williams <mikew@cortexebusiness.com.au>
-
-my $cmdLine = $ENV{'COMP_LINE'};
-my $antCmd = $ARGV[0];
-my $word = $ARGV[1];
-
-my @completions;
-if ($word =~ /^-/) {
-    list( restrict( $word, getArguments() ));
-} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
-    list( getBuildFiles($word) );
-} else {
-    list( restrict( $word, getTargets() ));
-}
-
-exit(0);
-
-sub list {
-    for (@_) {
-        print "$_\n";
-    }
-}
-
-sub restrict {
-    my ($word, @completions) = @_;
-    grep( /^\Q$word\E/, @completions );
-}
-
-sub getArguments {
-    qw(-buildfile -debug -emacs -f -find -help -listener -logfile 
-       -logger -projecthelp -quiet -verbose -version); 
-}
-
-
-sub getBuildFiles {
-    my ($word) = @_;
-    grep( /\.xml$/, glob( "$word*" ));
-}
-
-sub getTargets {
-
-    # Look for build-file
-    my $buildFile = 'build.xml';
-    if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
-        $buildFile = $2;
-    }
-    return () unless (-f $buildFile);
-
-    # Run "ant -projecthelp" to list targets.  Keep a cache of results in a
-    # cache-file.
-    my $cacheFile = $buildFile;
-    $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
-    if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
-        open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
-        open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return(); 
-        my %targets;
-        while( <HELP> ) {
-            if (/^\s+(\S+)/) {
-                $targets{$1}++;
-            }
-        }
-        my @targets = sort keys %targets;
-        for (@targets) { print CACHE "$_\n"; }
-        return @targets;
-    }
-    
-    # Read the target-cache
-    open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
-    my @targets;
-    while (<CACHE>) {
-        chop;
-        s/\r$//;  # for Cygwin
-        push( @targets, $_ );
-    }
-    close( CACHE );
-    @targets;
-
-}
-
-
-
diff --git a/groovy/modules/grails/ant/bin/envset.cmd b/groovy/modules/grails/ant/bin/envset.cmd
deleted file mode 100644
index cb91d87..0000000
--- a/groovy/modules/grails/ant/bin/envset.cmd
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-
-    Copyright 2003-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.
-
-SET environment variables
-First optional parameter:
-   ;     parameters are considered parts of a path variable, semicolons are
-         appended to each element if not already present
-   -D    parameters are properties for Java or Makefile etc., -D will be
-         prepended and the parameters will be separated by a space
-   =D    the same as above but equal sign is not required
-   ,     parameters should be comma separated in the environment variable
-   -     parameters should be separated by the next parameter
-   Other values mean that the first parameter is missing and the environment
-   variable will be set to the space separated parameters
-
-Second parameter: name of the environment variable
-
-Next parameters: values
-; implies that the equal sign is considered a part of the parameter and is
-not interpreted
-
--D requires parameters in the form name=value. If the equal sign is not found,
-the parameters are changed to name=expanded_name
-
-Other options have optional equal sign. If it is found, only the part after
-the equal sign will be oprionally expanded.
-
-If the parameter is the minus sign, the next parameter will not be expanded.
-If the parameter is a single dot, it will be replaced with the value of the
-environment variable as it existed before envset was invoked.
-
-For other parameters the batch looks for the environment variable with the
-same name (in uppercase). If it is found, it forms the expanded_name. If
-the environment variable with such a name does not exist, the expanded_name
-will hold the parameter name without case conversion.
-*/
-
-parse arg mode envar args
-
-equal = 0
-sep = ' '
-
-/* Parse command line parameters */
-select
-  when mode='-' then do
-    sep = envar
-    parse var args envar args
-  end
-  when mode=';' then do
-    sep = ''
-    equal = -1
-  end
-  when mode='-D' then equal = 1
-  when mode='=D' then mode = '-D'
-  when mode=',' then sep = ','
-otherwise
-  args = envar args
-  envar = mode
-  mode = ''
-end
-
-env = 'OS2ENVIRONMENT'
-envar = translate(envar)
-orig = value(envar,,env)
-newval = ''
-expand = 1
-
-/* for each parameter... */
-do i = 1 to words(args)
-  if expand > 0 & word(args, i) = '-' then expand = 0
-  else call addval word(args, i)
-end
-
-/* Optionally enclose path variable by quotes */
-if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
-
-/* Set the new value, 'SET' cannot be used since it does not allow '=' */
-x = value(envar, newval, env)
-exit 0
-
-addval: procedure expose sep equal orig expand newval mode env
-parse arg var
-
-if var = '.' then expvar = orig
-else do
-  if equal >= 0 then do
-    parse var var name '=' val
-    if val = '' then var = name
-    else var = val
-  end
-  if expand = 0 then expvar = var
-  else expvar = value(translate(var),,env)
-  if expvar = '' then expvar = var
-  if equal >= 0 then do
-    if val = '' then do
-      parse var expvar key '=' val
-      if val <> '' then name = key
-      else do
-        if equal > 0 then val = key
-        else name = key
-      end
-    end
-    else val = expvar
-    if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
-    if val = '' then expvar = name
-    else expvar = name || '=' || val
-  end
-  if mode = '-D' then expvar = '-D' || expvar
-  if mode = ';' then do
-    if right(expvar, 1) <> ';' then expvar = expvar || ';'
-  end
-end
-
-if newval = '' then newval = expvar
-else newval = newval || sep || expvar
-expand = 1
-return
diff --git a/groovy/modules/grails/ant/bin/lcp.bat b/groovy/modules/grails/ant/bin/lcp.bat
deleted file mode 100644
index eed6a82..0000000
--- a/groovy/modules/grails/ant/bin/lcp.bat
+++ /dev/null
@@ -1,30 +0,0 @@
-REM
-REM Copyright  2001-2004 The Apache Software Foundation
-REM
-REM  Licensed under the Apache License, Version 2.0 (the "License");
-REM  you may not use this file except in compliance with the License.
-REM  You may obtain a copy of the License at
-REM
-REM      http://www.apache.org/licenses/LICENSE-2.0
-REM
-REM  Unless required by applicable law or agreed to in writing, software
-REM  distributed under the License is distributed on an "AS IS" BASIS,
-REM  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM  See the License for the specific language governing permissions and
-REM  limitations under the License.
-REM
-REM
-
-set _CLASSPATHCOMPONENT=%1
-if ""%1""=="""" goto gotAllArgs
-shift
-
-:argCheck
-if ""%1""=="""" goto gotAllArgs
-set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
-shift
-goto argCheck
-
-:gotAllArgs
-set LOCALCLASSPATH=%_CLASSPATHCOMPONENT%;%LOCALCLASSPATH%
-
diff --git a/groovy/modules/grails/ant/bin/runant.pl b/groovy/modules/grails/ant/bin/runant.pl
deleted file mode 100644
index eca4708..0000000
--- a/groovy/modules/grails/ant/bin/runant.pl
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/perl
-#
-# 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.
-#
-#######################################################################
-#
-# runant.pl
-#
-# wrapper script for invoking ant in a platform with Perl installed
-# this may include cgi-bin invocation, which is considered somewhat daft.
-# (slo: that should be a separate file which can be derived from this
-# and returns the XML formatted output)
-#
-# the code is not totally portable due to classpath and directory splitting
-# issues. oops. (NB, use File::Spec::Functions  will help and the code is
-# structured for the catfile() call, but because of perl version funnies
-# the code is not included. 
-#
-# created:         2000-8-24
-# author:          Steve Loughran steve_l@sourceforge.net
-#######################################################################
-#
-# Assumptions:
-#
-# - the "java" executable/script is on the command path
-# - ANT_HOME has been set
-# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
-# - target platform uses "/" as directory separator.
-
-#be fussy about variables
-use strict;
-
-#platform specifics (disabled)
-#use File::Spec::Functions;
-
-#turn warnings on during dev; generates a few spurious uninitialised var access warnings
-#use warnings;
-
-#and set $debug to 1 to turn on trace info
-my $debug=1;
-
-#######################################################################
-#
-# check to make sure environment is setup
-#
-
-my $HOME = $ENV{ANT_HOME};
-if ($HOME eq "")
-        {
-    die "\n\nANT_HOME *MUST* be set!\n\n";
-        }
-
-my $JAVACMD = $ENV{JAVACMD};
-$JAVACMD = "java" if $JAVACMD eq "";
-
-my $onnetware = 0;
-if ($^O eq "NetWare")
-{
-  $onnetware = 1;
-}
-
-my $oncygwin = ($^O eq "cygwin");
-
-#ISSUE: what java wants to split up classpath varies from platform to platform 
-#and perl is not too hot at hinting which box it is on.
-#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
-my $s=":";
-if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
-   ($onnetware == 1))
-        {
-        $s=";";
-        }
-
-#build up standard classpath
-my $localpath = "$HOME/lib/ant-launcher.jar";
-#set JVM options and Ant arguments, if any
-my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
-my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
-
-#jikes
-if($ENV{JIKESPATH} ne "")
-        {
-        push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
-        }
-
-#construct arguments to java
-my @ARGS;
-push @ARGS, @ANT_OPTS;
-
-my $CYGHOME = "";
-
-my $classpath=$ENV{CLASSPATH};
-if ($oncygwin == 1) {
-  $localpath = `cygpath --path --windows $localpath`;
-  chomp ($localpath);
-  if (! $classpath eq "")
-  {
-    $classpath = `cygpath --path --windows "$classpath"`;
-    chomp ($classpath);
-  }
-  $HOME = `cygpath --path --windows $HOME`;
-  chomp ($HOME);
-  $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
-  chomp ($CYGHOME);
-}
-push @ARGS, "-classpath", "$localpath";
-push @ARGS, "-Dant.home=$HOME";
-if ( ! $CYGHOME eq "" )
-{
-  push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
-}
-push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
-push @ARGS, @ARGV;
-if (! $classpath eq "")
-{
-  if ($onnetware == 1)
-  {
-    # make classpath literally $CLASSPATH
-    # this is to avoid pushing us over the 512 character limit
-    # even skip the ; - that is already in $localpath
-    push @ARGS, "-lib", "\$CLASSPATH";
-  }
-  else
-  {
-    push @ARGS, "-lib", "$classpath";
-  }
-}
-print "\n $JAVACMD @ARGS\n\n" if ($debug);
-
-my $returnValue = system $JAVACMD, @ARGS;
-if ($returnValue eq 0)
-        {
-        exit 0;
-        }
-else
-        {
-        # only 0 and 1 are widely recognized as exit values
-        # so change the exit value to 1
-        exit 1;
-        }
diff --git a/groovy/modules/grails/ant/bin/runant.py b/groovy/modules/grails/ant/bin/runant.py
deleted file mode 100644
index c7b53b6..0000000
--- a/groovy/modules/grails/ant/bin/runant.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/python
-# Copyright 2001,2003-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.
-#
-
-"""
-
- runant.py
-
-    This script is a translation of the runant.pl written by Steve Loughran.
-    It runs ant with/out arguments, it should be quite portable (thanks to
-    the python os library)
-    This script has been tested with Python2.0/Win2K
-
- created:         2001-04-11
- author:          Pierre Dittgen pierre.dittgen@criltelecom.com
-
- Assumptions:
-
- - the "java" executable/script is on the command path
-"""
-import os, os.path, string, sys
-
-# Change it to 1 to get extra debug information
-debug = 0
-
-#######################################################################
-
-# If ANT_HOME is not set default to script's parent directory
-if os.environ.has_key('ANT_HOME'):
-    ANT_HOME = os.environ['ANT_HOME']
-else:
-    ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
-
-# set ANT_LIB location
-ANT_LIB = os.path.join(ANT_HOME, 'lib')
-
-# set JAVACMD (check variables JAVACMD and JAVA_HOME)
-JAVACMD = None
-if not os.environ.has_key('JAVACMD'):
-    if os.environ.has_key('JAVA_HOME'):
-        if not os.path.exists(os.environ['JAVA_HOME']):
-            print "Warning: JAVA_HOME is not defined correctly."
-        else:
-            JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
-    else:
-        print "Warning: JAVA_HOME not set."
-else:
-    JAVACMD = os.environ['JAVACMD']
-if not JAVACMD:
-    JAVACMD = 'java'
-
-launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
-if not os.path.exists(launcher_jar):
-    print 'Unable to locate ant-launcher.jar. Expected to find it in %s' % \
-        ANT_LIB
-
-# Build up standard classpath (LOCALCLASSPATH)
-LOCALCLASSPATH = launcher_jar
-if os.environ.has_key('LOCALCLASSPATH'):
-    LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
-
-ANT_OPTS = ""
-if os.environ.has_key('ANT_OPTS'):
-    ANT_OPTS = os.environ['ANT_OPTS']
-
-OPTS = ""
-if os.environ.has_key('JIKESPATH'):
-    OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
-
-ANT_ARGS = ""
-if os.environ.has_key('ANT_ARGS'):
-    ANT_ARGS = os.environ['ANT_ARGS']
-
-CLASSPATH = ""
-if os.environ.has_key('CLASSPATH'):
-    CLASSPATH = os.environ['CLASSPATH']
-
-# Builds the commandline
-cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
-    'org.apache.tools.ant.launch.Launcher %s -lib %s %s') \
-     % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
-        CLASSPATH, string.join(sys.argv[1:], ' '))
-
-if debug:
-    print '\n%s\n\n' % (cmdline)
-
-# Run the biniou!
-os.system(cmdline)
diff --git a/groovy/modules/grails/ant/bin/runrc.cmd b/groovy/modules/grails/ant/bin/runrc.cmd
deleted file mode 100644
index 0337a80..0000000
--- a/groovy/modules/grails/ant/bin/runrc.cmd
+++ /dev/null
@@ -1,59 +0,0 @@
-/* 
-    Copyright 2003-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.
-
-    Run RC file, name is in the first arg, second arg is either PATH
-    ENV  or -r or nothing 
-*/
-
-parse arg name path rest
-
-if name = '' then do
-  say 'RC file name is missing'
-  exit 1
-end
-
-if rest \= '' then do
-  say 'Too many parameters'
-  exit 1
-end
-
-call runit name path
-exit 0
-
-runit: procedure
-parse arg name path dir
-
-if path \= '' & path \= '-r' then do
-  dir = value(translate(path),,'OS2ENVIRONMENT')
-  if dir = '' then return
-  dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
-end
-
-if dir = '' then dir = directory()
-
-if path = '-r' then do /* recursive call */
-  subdir = filespec('path', dir)
-  if subdir \= '\' then do
-    subdir = left(subdir, length(subdir)-1)
-    call runit name path filespec('drive', dir) || subdir
-  end
-end
-
-/* Look for the file and run it */
-if right(dir, 1) \= '\' then dir = dir || '\'
-rcfile = stream(dir || name, 'c', 'query exists')
-if rcfile \= '' then interpret 'call "' || rcfile || '"'
-
-return
diff --git a/groovy/modules/grails/ant/lib/ant-apache-bsf.jar b/groovy/modules/grails/ant/lib/ant-apache-bsf.jar
deleted file mode 100644
index c2dca5e..0000000
--- a/groovy/modules/grails/ant/lib/ant-apache-bsf.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/ant/lib/ant-junit.jar b/groovy/modules/grails/ant/lib/ant-junit.jar
deleted file mode 100644
index 5ee4f7f..0000000
--- a/groovy/modules/grails/ant/lib/ant-junit.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/ant/lib/ant-launcher.jar b/groovy/modules/grails/ant/lib/ant-launcher.jar
deleted file mode 100644
index 1a71612..0000000
--- a/groovy/modules/grails/ant/lib/ant-launcher.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/ant/lib/ant.jar b/groovy/modules/grails/ant/lib/ant.jar
deleted file mode 100644
index 3beb3b8..0000000
--- a/groovy/modules/grails/ant/lib/ant.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/bin/cygrails b/groovy/modules/grails/bin/cygrails
deleted file mode 100644
index 52ec88b..0000000
--- a/groovy/modules/grails/bin/cygrails
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-# This is the cygwin version of the grails script.
-# It doesn't use the -Dbasedir setting and uses Ant's default
-
-${ANT_HOME}/bin/ant -lib ${GRAILS_ANT_CLASSPATH} -f ${GRAILS_HOME}/src/grails/build.xml $@
diff --git a/groovy/modules/grails/bin/grails b/groovy/modules/grails/bin/grails
deleted file mode 100644
index d298b4f..0000000
--- a/groovy/modules/grails/bin/grails
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Error: JAVA_HOME is not defined"
-  echo "Please set the JAVA_HOME environment variable and start Grails again"
-  exit 1
-fi
-
-if [ -z "$GRAILS_HOME" ] ; then
-  echo "Error: GRAILS_HOME is not defined"
-  echo "Please define GRAIL_HOME and start Grails again"
-  exit 1
-fi
-
-ANT_HOME=${GRAILS_HOME}/ant
-GRAILS_ANT_CLASSPATH=$GRAILS_HOME/lib/bsf.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/groovy-all-1.0-jsr-05-SNAPSHOT.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/org.mortbay.jetty.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/commons-logging.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/commons-el.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/javax.servlet.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/log4j-1.2.8.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/jasper-compiler.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/jasper-runtime.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/xml-apis.jar
-GRAILS_ANT_CLASSPATH=$GRAILS_ANT_CLASSPATH:$GRAILS_HOME/lib/xercesImpl.jar
-GRAILS_BUILD_FILE=${GRAILS_HOME}/src/grails/build.xml
-ANT_BIN=${ANT_HOME}/bin/ant
-BASEDIR=`pwd`
-
-case "`uname`" in
-  CYGWIN*)
-    GRAILS_BUILD_FILE=`cygpath --windows "$GRAILS_BUILD_FILE"`;
-    GRAILS_ANT_CLASSPATH=`cygpath --windows -p "$GRAILS_ANT_CLASSPATH"`
-    BASEDIR=`cygpath --windows "$BASEDIR"`
-    ;;
-esac
-
-${ANT_BIN} -lib "${GRAILS_ANT_CLASSPATH}" -f ${GRAILS_BUILD_FILE} -Dbasedir=${BASEDIR} $@
diff --git a/groovy/modules/grails/bin/grails.bat b/groovy/modules/grails/bin/grails.bat
deleted file mode 100644
index 0f95819..0000000
--- a/groovy/modules/grails/bin/grails.bat
+++ /dev/null
@@ -1,36 +0,0 @@
-@echo off
-
-if "%JAVA_HOME%"=="" goto javaHomeNotSet
-if "%GRAILS_HOME"=="" goto grailsHomeNotSet
-goto getArguments
-
-:javaHomeNotSet
-echo Error: JAVA_HOME is not defined
-echo Please set the JAVA_HOME environment variable and start Grails again
-goto errorExit
-
-:grailsHomeNotSet
-echo Error: GRAILS_HOME is not defined
-echo Please set the GRAILS_HOME environment variable and start Grails again
-goto errorExit
-
-:getArguments
-set GRAILS_ARGUMENTS=%1
-if ""%1""=="""" goto getClasspath
-shift
-:loopArguments
-if ""%1""=="""" goto getClasspath
-set GRAILS_ARGUMENTS=%GRAILS_ARGUMENTS% %1
-shift
-goto loopArguments
-
-:getClasspath
-set GRAILS_ANT_CLASSPATH="%GRAILS_HOME%\lib\bsf.jar;%GRAILS_HOME%\lib\groovy-all-1.0-jsr-05-SNAPSHOT.jar;%GRAILS_HOME%\lib\org.mortbay.jetty.jar;%GRAILS_HOME%\lib\commons-logging.jar;%GRAILS_HOME%\lib\commons-el.jar;%GRAILS_HOME%\lib\javax.servlet.jar;%GRAILS_HOME%\lib\log4j-1.2.8.jar;%GRAILS_HOME%\lib\jasper-compiler.jar;%GRAILS_HOME%\lib\jasper-runtime.jar;%GRAILS_HOME%\lib\xml-apis.jar;%GRAILS_HOME%\lib\xercesImpl.jar"
-goto startGrails
-
-:startGrails
-set ANT_HOME=%GRAILS_HOME%\ant
-call %ANT_HOME%\bin\ant.bat -lib %GRAILS_ANT_CLASSPATH% -f %GRAILS_HOME%\src\grails\build.xml -Dbasedir="%CD%" %GRAILS_ARGUMENTS%
-
-:errorExit
-
diff --git a/groovy/modules/grails/build.properties b/groovy/modules/grails/build.properties
deleted file mode 100644
index 2eeefeb..0000000
--- a/groovy/modules/grails/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-grails.version=0.1a-alpha
-grails.src.commons=src/commons
-grails.src.web=src/web
-grails.src.war=src/war
-grails.src.persistence=src/persistence
-grails.src.scaffolding=src/scaffolding
-grails.src.tiger=src/tiger
-grails.build=target/classes
-grails.lib=lib
-grails.lib.hibernate=lib/hibernate
-grails.test.src.commons=test/commons
-grails.test.src.web=test/web
-grails.test.src.persistence=test/persistence
-grails.test.src.scaffolding=test/scaffolding
-grails.test.build=target/test-classes
-grails.test.reports=target/test-reports
-grails.dist=dist
-grails.dist.jar=grails-${grails.version}-SNAPSHOT.jar
-grails.javadoc=doc/api
\ No newline at end of file
diff --git a/groovy/modules/grails/build.xml b/groovy/modules/grails/build.xml
deleted file mode 100644
index 84d157b..0000000
--- a/groovy/modules/grails/build.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<project name="grails-build" default="jar">
-
-	<property file="build.properties"/>
-
-
-    <path id="classpath">
-        <fileset dir="${grails.lib}">
-            <include name="*.jar"/>
-        </fileset>
-        <pathelement location="${grails.src.war}/WEB-INF"/>
-    </path>
-
-    <taskdef name="groovyc"  classname="org.codehaus.groovy.ant.Groovyc" classpathref="classpath" />
-
-	<target name="clean">
-		<delete dir="${grails.build}"/>
-		<delete dir="${grails.test.build}"/>
-	</target>
-			
-	<target name="build-init" depends="clean">
-		<mkdir dir="${grails.build}"/>
-		<mkdir dir="${grails.test.build}"/>
-		<mkdir dir="${grails.test.reports}"/>
-		<mkdir dir="${grails.dist}"/>
-	</target>
-	
-	<target name="build" depends="build-init">
-		<javac debug="on" deprecation="on" destdir="${grails.build}" source="1.3" target="1.3">
-			<src path="${grails.src.commons}"/>
-			<src path="${grails.src.web}"/>
-			<src path="${grails.src.persistence}"/>
-			<src path="${grails.src.scaffolding}"/>			
-			<classpath refid="classpath"/>
-		</javac>
-        <groovyc destdir="${grails.build}" >
-			<src path="${grails.src.commons}"/>
-			<classpath refid="classpath"/>
-		</groovyc>
-		<copy todir="${grails.build}">
-			<fileset dir="${grails.src.commons}" excludes="**/*.java" />
-			<fileset dir="${grails.src.web}" excludes="**/*.java" />
-			<fileset dir="${grails.src.persistence}" excludes="**/*.java"/>
-			<fileset dir="${grails.src.scaffolding}" excludes="**/*.java"/>							
-		</copy>
-        <antcall target="build:java5" />
-    </target>
-
-    <target name="build:checkj5">
-        <condition property="is.java.5">
-              <equals arg1="${ant.java.version}" arg2="1.5"/>
-        </condition>
-    </target>
-
-    <target name="build:java5" depends="build:checkj5" if="is.java.5">
-        <!--build java 5 sources-->
-        <javac srcdir="${grails.src.tiger}" destdir="${grails.build}" classpathref="classpath" debug="on" deprecation="on" optimize="off"/>
-    </target>
-
-	<target name="build-test" depends="build">
-		<javac debug="on" deprecation="on" destdir="${grails.test.build}" source="1.3" target="1.3" includes="**/*">			
-			<src path="${grails.test.src.commons}"/>
-			<src path="${grails.test.src.web}"/>
-			<src path="${grails.test.src.persistence}"/>
-			<src path="${grails.test.src.scaffolding}"/>				
-			<classpath refid="classpath"/>
-			<classpath location="${grails.build}"/>
-		</javac>
-	</target>
-	
-	<target name="test" depends="build-test">
-        <delete dir="${grails.test.reports}"/>
-        <mkdir dir="${grails.test.reports}"/>
-        <junit>
-			<classpath refid="classpath"/>
-			<classpath location="${grails.build}"/>
-			<classpath location="${grails.test.build}"/>
-			<classpath location="${grails.test.src.web}"/>
-			<classpath location="${grails.test.src.commons}"/>
-			<classpath location="${grails.test.src.persistence}"/>
-			<classpath location="${grails.test.src.scaffolding}"/>
-				
-			<formatter type="brief" />
-			<batchtest todir="${grails.test.reports}" fork="yes" failureproperty="grails.test.failure">
-				<fileset dir="${grails.test.build}" includes="**/*Tests.class" excludes="**/Abstract*"/>
-			</batchtest>
-			
-		</junit>
-        <fail if="grails.test.failure">The tests failed. Have a look at ${grails.test.reports}</fail>
-    </target>
-	
-	<target name="jar" depends="build-test">
-		<delete file="${grails.dist}/${grails.dist.jar}"/>
-		<jar destfile="${grails.dist}/${grails.dist.jar}" basedir="${grails.build}"/>
-	</target>
-	
-	<target name="javadoc">
-		<delete dir="${grails.javadoc}"/>
-		<mkdir dir="${grails.javadoc}"/>
-		
-		<javadoc sourcepath="${grails.src.commons},${grails.src.web}" destdir="${grails.javadoc}" windowtitle="Grails ${grails.version}" source="1.3" access="package" author="true" version="true" use="true" defaultexcludes="true">
-			<doctitle><![CDATA[<h1>Grails</h1>]]></doctitle>
-			<bottom><![CDATA[<i>Copyright (c) 2005 The Grails project</i>]]></bottom>
-			<classpath refid="classpath"/>
-			<packageset dir="${grails.src.commons}">
-				<include name="org/codehaus/groovy/grails/**"/>
-			</packageset>
-			<packageset dir="${grails.src.web}">
-				<include name="org/codehaus/groovy/grails/**"/>
-			</packageset>
-			<link href="http://java.sun.com/j2ee/1.4/docs/api"/>
-			<link href="http://java.sun.com/j2se/1.4.2/docs/api"/>
-			<link href="http://static.springframework.org/spring/docs/1.2.x/api"/>						
-		</javadoc>
-	</target>
-	
-	<target name="dist">
-		<antcall target="clean"/>
-		<delete file="../grails-${grails.version}.tar.gz"/>
-		<tar compression="gzip" destfile="../grails-${grails.version}.tar.gz" basedir="." excludes="**/CVS/**/*"/>
-	</target>	
-	
-</project>
\ No newline at end of file
diff --git a/groovy/modules/grails/commons.iml b/groovy/modules/grails/commons.iml
deleted file mode 100644
index c6ef5f7..0000000
--- a/groovy/modules/grails/commons.iml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4" relativePaths="true" type="JAVA_MODULE">
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/src/commons">
-      <sourceFolder url="file://$MODULE_DIR$/src/commons" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Groovy from GroovyJ 0.1.6 (Irida)" level="application" />
-    <orderEntryProperties />
-  </component>
-</module>
-
diff --git a/groovy/modules/grails/grails.ipr b/groovy/modules/grails/grails.ipr
deleted file mode 100644
index 5674726..0000000
--- a/groovy/modules/grails/grails.ipr
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4" relativePaths="false">
-  <component name="AntConfiguration">
-    <defaultAnt bundledAnt="true" />
-    <buildFile url="file://$PROJECT_DIR$/build.xml">
-      <additionalClassPath />
-      <antReference projectDefault="true" />
-      <customJdkName value="" />
-      <maximumHeapSize value="128" />
-      <properties />
-    </buildFile>
-  </component>
-  <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS" />
-    <option name="USE_PER_PROJECT_SETTINGS" value="false" />
-  </component>
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <option name="CLEAR_OUTPUT_DIRECTORY" value="false" />
-    <option name="DEPLOY_AFTER_MAKE" value="2" />
-    <resourceExtensions>
-      <entry name=".+\.(properties|xml|html|dtd|tld)" />
-      <entry name=".+\.(gif|png|jpeg|jpg)" />
-    </resourceExtensions>
-    <wildcardResourcePatterns>
-      <entry name="?*.properties" />
-      <entry name="?*.xml" />
-      <entry name="?*.gif" />
-      <entry name="?*.png" />
-      <entry name="?*.jpeg" />
-      <entry name="?*.jpg" />
-      <entry name="?*.html" />
-      <entry name="?*.dtd" />
-      <entry name="?*.tld" />
-    </wildcardResourcePatterns>
-  </component>
-  <component name="DataSourceManagerImpl" />
-  <component name="DependenciesAnalyzeManager">
-    <option name="myForwardDirection" value="false" />
-  </component>
-  <component name="DependencyValidationManager" />
-  <component name="EntryPointsManager">
-    <entry_points />
-  </component>
-  <component name="ExportToHTMLSettings">
-    <option name="PRINT_LINE_NUMBERS" value="false" />
-    <option name="OPEN_IN_BROWSER" value="false" />
-    <option name="OUTPUT_DIRECTORY" />
-  </component>
-  <component name="GUI Designer component loader factory" />
-  <component name="JavacSettings">
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="DEPRECATION" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-    <option name="MAXIMUM_HEAP_SIZE" value="128" />
-  </component>
-  <component name="JavadocGenerationManager">
-    <option name="OUTPUT_DIRECTORY" />
-    <option name="OPTION_SCOPE" value="protected" />
-    <option name="OPTION_HIERARCHY" value="true" />
-    <option name="OPTION_NAVIGATOR" value="true" />
-    <option name="OPTION_INDEX" value="true" />
-    <option name="OPTION_SEPARATE_INDEX" value="true" />
-    <option name="OPTION_DOCUMENT_TAG_USE" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
-    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
-    <option name="OPTION_DEPRECATED_LIST" value="true" />
-    <option name="OTHER_OPTIONS" value="" />
-    <option name="HEAP_SIZE" />
-    <option name="OPEN_IN_BROWSER" value="true" />
-  </component>
-  <component name="JikesSettings">
-    <option name="JIKES_PATH" value="" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="DEPRECATION" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="IS_EMACS_ERRORS_MODE" value="true" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="Palette2">
-    <group name="Swing">
-      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false">
-        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
-      </item>
-      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
-      </item>
-      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false">
-        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
-      </item>
-      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
-        <initial-values>
-          <property name="text" value="Button" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="RadioButton" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="CheckBox" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
-        <initial-values>
-          <property name="text" value="Label" />
-        </initial-values>
-      </item>
-      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
-          <preferred-size width="150" height="-1" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false">
-        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
-          <preferred-size width="150" height="50" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false">
-        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
-          <preferred-size width="200" height="200" />
-        </default-constraints>
-      </item>
-      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false">
-        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
-      </item>
-    </group>
-  </component>
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/Grails Module.iml" filepath="$PROJECT_DIR$/Grails Module.iml" />
-      <module fileurl="file://$PROJECT_DIR$/samples/test/Grails Test App.iml" filepath="$PROJECT_DIR$/samples/test/Grails Test App.iml" />
-    </modules>
-  </component>
-  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="false" project-jdk-name="1.4" />
-  <component name="RmicSettings">
-    <option name="IS_EANABLED" value="false" />
-    <option name="DEBUGGING_INFO" value="true" />
-    <option name="GENERATE_NO_WARNINGS" value="false" />
-    <option name="GENERATE_IIOP_STUBS" value="false" />
-    <option name="ADDITIONAL_OPTIONS_STRING" value="" />
-  </component>
-  <component name="libraryTable" />
-  <component name="uidesigner-configuration">
-    <option name="INSTRUMENT_CLASSES" value="true" />
-    <option name="COPY_FORMS_RUNTIME_TO_OUTPUT" value="true" />
-  </component>
-  <UsedPathMacros />
-</project>
-
diff --git a/groovy/modules/grails/grails.iws b/groovy/modules/grails/grails.iws
deleted file mode 100644
index 829d6c2..0000000
--- a/groovy/modules/grails/grails.iws
+++ /dev/null
@@ -1,1304 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4" relativePaths="false">
-  <component name="AspectsView" />
-  <component name="BookmarkManager" />
-  <component name="ChangeBrowserSettings">
-    <option name="MAIN_SPLITTER_PROPORTION" value="0.3" />
-    <option name="MESSAGES_SPLITTER_PROPORTION" value="0.8" />
-    <option name="USE_DATE_BEFORE_FILTER" value="false" />
-    <option name="USE_DATE_AFTER_FILTER" value="false" />
-    <option name="USE_CHANGE_BEFORE_FILTER" value="false" />
-    <option name="USE_CHANGE_AFTER_FILTER" value="false" />
-    <option name="DATE_BEFORE" value="" />
-    <option name="DATE_AFTER" value="" />
-    <option name="CHANGE_BEFORE" value="" />
-    <option name="CHANGE_AFTER" value="" />
-    <option name="USE_USER_FILTER" value="false" />
-    <option name="USER" value="" />
-  </component>
-  <component name="CheckinPanelState" />
-  <component name="Commander">
-    <leftPanel />
-    <rightPanel />
-    <splitter proportion="0.5" />
-  </component>
-  <component name="CompilerWorkspaceConfiguration">
-    <option name="COMPILE_IN_BACKGROUND" value="true" />
-    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true" />
-    <option name="CLOSE_MESSAGE_VIEW_IF_SUCCESS" value="true" />
-    <option name="COMPILE_DEPENDENT_FILES" value="false" />
-  </component>
-  <component name="Cvs2Configuration">
-    <option name="PRUNE_EMPTY_DIRECTORIES" value="true" />
-    <option name="MERGING_MODE" value="0" />
-    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD" />
-    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD" />
-    <option name="RESET_STICKY" value="false" />
-    <option name="CREATE_NEW_DIRECTORIES" value="true" />
-    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv" />
-    <option name="PROCESS_UNKNOWN_FILES" value="false" />
-    <option name="PROCESS_DELETED_FILES" value="false" />
-    <option name="PROCESS_IGNORED_FILES" value="false" />
-    <option name="RESERVED_EDIT" value="false" />
-    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
-      <value>
-        <option name="BRANCH" value="" />
-        <option name="DATE" value="" />
-        <option name="USE_BRANCH" value="false" />
-        <option name="USE_DATE" value="false" />
-      </value>
-    </option>
-    <option name="UPDATE_DATE_OR_REVISION_SETTINGS">
-      <value>
-        <option name="BRANCH" value="" />
-        <option name="DATE" value="" />
-        <option name="USE_BRANCH" value="false" />
-        <option name="USE_DATE" value="false" />
-      </value>
-    </option>
-    <option name="SHOW_CHANGES_REVISION_SETTINGS">
-      <value>
-        <option name="BRANCH" value="" />
-        <option name="DATE" value="" />
-        <option name="USE_BRANCH" value="false" />
-        <option name="USE_DATE" value="false" />
-      </value>
-    </option>
-    <option name="SHOW_OUTPUT" value="false" />
-    <option name="ADD_WATCH_INDEX" value="0" />
-    <option name="REMOVE_WATCH_INDEX" value="0" />
-    <option name="UPDATE_KEYWORD_SUBSTITUTION" value="NONE" />
-    <option name="MAKE_NEW_FILES_READONLY" value="false" />
-    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0" />
-    <option name="TAG_AFTER_PROJECT_COMMIT" value="false" />
-    <option name="OVERRIDE_EXISTING_TAG_FOR_PROJECT" value="true" />
-    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value="" />
-    <option name="CLEAN_COPY" value="false" />
-  </component>
-  <component name="DaemonCodeAnalyzer">
-    <disable_hints />
-  </component>
-  <component name="DebuggerManager">
-    <line_breakpoints>
-      <breakpoint url="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/metaclass/GenericDynamicProperty.java" line="17" class="Class at GenericDynamicProperty.java:17" package="">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java" line="250" class="org.codehaus.groovy.grails.commons.DefaultGrailsApplication" package="org.codehaus.groovy.grails.commons">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://$PROJECT_DIR$/test/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScopeTests.java" line="40" class="org.codehaus.groovy.grails.web.servlet.GrailsFlashScopeTests" package="org.codehaus.groovy.grails.web.servlet">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Spring/spring-framework-1.2.6/mock/org/springframework/mock/web/MockHttpServletResponse.java" line="181" class="org.springframework.mock.web.MockHttpServletResponse" package="org.springframework.mock.web">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/metaclass/ChainDynamicMethod.java" line="71" class="org.codehaus.groovy.grails.web.metaclass.ChainDynamicMethod" package="org.codehaus.groovy.grails.web.metaclass">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Hibernate/hibernate-3.1/src/org/hibernate/event/def/DefaultUpdateEventListener.java" line="22" class="org.hibernate.event.def.DefaultUpdateEventListener" package="org.hibernate.event.def">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Spring/spring-framework-1.2.6/src/org/springframework/orm/hibernate3/HibernateTemplate.java" line="762" class="Class at HibernateTemplate.java:762" package="org.springframework.orm.hibernate3">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Spring/spring-framework-1.2.6/src/org/springframework/orm/hibernate3/HibernateTemplate.java" line="688" class="Class at HibernateTemplate.java:688" package="org.springframework.orm.hibernate3">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Hibernate/hibernate-3.1/src/org/hibernate/impl/SessionImpl.java" line="530" class="org.hibernate.impl.SessionImpl" package="org.hibernate.impl">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://D:/Downloads/Development/Hibernate/hibernate-3.1/src/org/hibernate/engine/Cascade.java" line="104" class="org.hibernate.engine.Cascade" package="org.hibernate.engine">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/pages/GroovyPage.java" line="217" class="org.codehaus.groovy.grails.web.pages.GroovyPage" package="org.codehaus.groovy.grails.web.pages">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint url="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java" line="316" class="org.codehaus.groovy.grails.commons.DefaultGrailsApplication" package="org.codehaus.groovy.grails.commons">
-        <option name="ENABLED" value="true" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-    </line_breakpoints>
-    <breakpoint_any>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-      <breakpoint>
-        <option name="NOTIFY_CAUGHT" value="true" />
-        <option name="NOTIFY_UNCAUGHT" value="true" />
-        <option name="ENABLED" value="false" />
-        <option name="SUSPEND_POLICY" value="SuspendAll" />
-        <option name="LOG_ENABLED" value="false" />
-        <option name="LOG_EXPRESSION_ENABLED" value="false" />
-        <option name="COUNT_FILTER_ENABLED" value="false" />
-        <option name="COUNT_FILTER" value="0" />
-        <option name="CONDITION_ENABLED" value="false" />
-        <option name="CLASS_FILTERS_ENABLED" value="false" />
-        <option name="INSTANCE_FILTERS_ENABLED" value="false" />
-        <option name="CONDITION" value="" />
-        <option name="LOG_MESSAGE" value="" />
-      </breakpoint>
-    </breakpoint_any>
-    <breakpoint_rules />
-    <ui_properties />
-  </component>
-  <component name="ErrorTreeViewConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="HIDE_WARNINGS" value="false" />
-  </component>
-  <component name="FavoritesViewImpl">
-    <favorites_list name="grails">
-      <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-      <option name="IS_SHOW_MEMBERS" value="false" />
-      <option name="IS_STRUCTURE_VIEW" value="false" />
-      <option name="IS_SHOW_MODULES" value="true" />
-      <option name="IS_FLATTEN_PACKAGES" value="false" />
-      <option name="IS_ABBREVIATION_PACKAGE_NAMES" value="false" />
-      <option name="IS_HIDE_EMPTY_MIDDLE_PACKAGES" value="false" />
-      <option name="IS_SHOW_LIBRARY_CONTENTS" value="true" />
-    </favorites_list>
-    <option name="myCurrentFavoritesList" value="grails" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf />
-  </component>
-  <component name="FindManager">
-    <FindUsagesManager>
-      <setting name="OPEN_NEW_TAB" value="false" />
-    </FindUsagesManager>
-  </component>
-  <component name="HierarchyBrowserManager">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="SORT_ALPHABETICALLY" value="false" />
-    <option name="HIDE_CLASSES_WHERE_METHOD_NOT_IMPLEMENTED" value="false" />
-  </component>
-  <component name="InspectionManager">
-    <option name="AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="SPLITTER_PROPORTION" value="0.5" />
-    <option name="GROUP_BY_SEVERITY" value="false" />
-    <option name="ANALYZE_TEST_SOURCES" value="true" />
-    <option name="SCOPE_TYPE" value="1" />
-    <option name="CUSTOM_SCOPE_NAME" value="" />
-    <profile name="Default" />
-  </component>
-  <component name="J2EEProjectPane">
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.j2ee.module.view.nodes.J2EEProjectNodeDescriptor" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Web Modules" />
-        <option name="myItemType" value="com.intellij.j2ee.module.view.web.nodes.WebModuleHolderNodeDescriptor" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.j2ee.module.view.web.nodes.WebModuleNodeDescriptor" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.j2ee.module.view.nodes.J2EEProjectNodeDescriptor" />
-      </PATH_ELEMENT>
-    </PATH>
-    <setting name="SHOW_AS_DEPLOYMENT_VIEW" value="false" />
-  </component>
-  <component name="ModuleEditorState">
-    <option name="LAST_EDITED_MODULE_NAME" value="Grails Module" />
-    <option name="LAST_EDITED_TAB_NAME" value="Libraries (Classpath)" />
-  </component>
-  <component name="NamedScopeManager" />
-  <component name="PackagesPane">
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="views" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="views" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="user" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="domain" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="controllers" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageElementNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PackageViewProjectNode" />
-      </PATH_ELEMENT>
-    </PATH>
-  </component>
-  <component name="PerforceChangeBrowserSettings">
-    <option name="USE_CLIENT_FILTER" value="true" />
-    <option name="CLIENT" value="" />
-  </component>
-  <component name="PerforceDirect.Settings">
-    <option name="useP4CONFIG" value="true" />
-    <option name="port" value="&lt;perforce_server&gt;:1666" />
-    <option name="client" value="" />
-    <option name="user" value="" />
-    <option name="passwd" value="" />
-    <option name="showCmds" value="false" />
-    <option name="useNativeApi" value="true" />
-    <option name="pathToExec" value="p4" />
-    <option name="useCustomPathToExec" value="false" />
-    <option name="SYNC_FORCE" value="false" />
-    <option name="SYNC_RUN_RESOLVE" value="true" />
-    <option name="REVERT_UNCHANGED_FILES" value="true" />
-    <option name="CHARSET" value="none" />
-    <option name="SHOW_BRANCHES_HISTORY" value="true" />
-    <option name="ENABLED" value="true" />
-    <option name="USE_LOGIN" value="false" />
-    <option name="LOGIN_SILENTLY" value="false" />
-    <option name="INTEGRATE_BRANCH_NAME" />
-    <option name="INTEGRATE_CHANGELIST_NUM" value="-1" />
-    <option name="INTEGRATE_RUN_RESOLVE" value="true" />
-    <option name="INTEGRATE_REVERT_UNCHANGED" value="true" />
-    <option name="INTEGRATE_CHANGE_LIST_NUMBER" value="" />
-    <option name="INTEGRATE_CHANGE_LIST" value="false" />
-    <option name="INTEGRATE_REVERSE" value="false" />
-  </component>
-  <component name="ProjectLevelVcsManager">
-    <OptionsSetting value="true" id="Add" />
-    <OptionsSetting value="true" id="Remove" />
-    <OptionsSetting value="true" id="Checkin" />
-    <OptionsSetting value="true" id="Checkout" />
-    <OptionsSetting value="true" id="Update" />
-    <OptionsSetting value="true" id="Status" />
-    <OptionsSetting value="true" id="Edit" />
-    <OptionsSetting value="true" id="Undo Check Out" />
-    <OptionsSetting value="true" id="Compare with SourceSafe Version" />
-    <OptionsSetting value="true" id="Get Latest Version" />
-    <ConfirmationsSetting value="0" id="Add" />
-    <ConfirmationsSetting value="0" id="Remove" />
-  </component>
-  <component name="ProjectPane">
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\tmp" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\tmp\war" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\grails-app" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\grails-app" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\grails-app\domain" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Test App" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\grails-app" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\samples\test\grails-app\controllers" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Module" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Module" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-    <PATH>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="grails.ipr" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="Grails Module" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-      <PATH_ELEMENT>
-        <option name="myItemId" value="PsiDirectory:D:\sandbox_os\groovy\modules\grails\src" />
-        <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-      </PATH_ELEMENT>
-    </PATH>
-  </component>
-  <component name="ProjectReloadState">
-    <option name="STATE" value="0" />
-  </component>
-  <component name="ProjectView">
-    <navigator currentView="PackagesPane" splitterProportion="0.5">
-      <flattenPackages />
-      <showMembers />
-      <showModules />
-      <showLibraryContents />
-      <hideEmptyPackages />
-      <abbreviatePackageNames />
-      <showStructure PackagesPane="false" ProjectPane="false" J2EEPane="false" />
-      <autoscrollToSource />
-      <autoscrollFromSource />
-      <sortByType />
-    </navigator>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="vcs_file_view_treeWidth2" value="33" />
-    <property name="GoToClass.includeJavaFiles" value="false" />
-    <property name="vcs_file_view_flatOrder1" value="1" />
-    <property name="MemberChooser.copyJavadoc" value="false" />
-    <property name="vcs_file_view_treeOrder4" value="4" />
-    <property name="Web Module Deployment Descriptor Default Version" value="2.3" />
-    <property name="GoToFile.includeJavaFiles" value="false" />
-    <property name="vcs_file_view_flatWidth2" value="84" />
-    <property name="vcs_file_view_flatWidth5" value="83" />
-    <property name="GoToClass.includeLibraries" value="false" />
-    <property name="MemberChooser.showClasses" value="true" />
-    <property name="vcs_file_view_flatOrder3" value="3" />
-    <property name="vcs_file_view_treeWidth0" value="369" />
-    <property name="GoToClass.toSaveIncludeLibraries" value="false" />
-    <property name="vcs_file_view_treeOrder0" value="0" />
-    <property name="RunManagerConfig.showSettingsBeforeRunnig" value="true" />
-    <property name="vcs_file_view_flatOrder4" value="4" />
-    <property name="MemberChooser.sorted" value="false" />
-    <property name="RunManagerConfig.compileBeforeRunning" value="true" />
-    <property name="vcs_file_view_flatOrder5" value="5" />
-    <property name="vcs_file_view_treeOrder3" value="3" />
-    <property name="vcs_file_view_flatWidth4" value="84" />
-    <property name="vcs_file_view_treeWidth1" value="34" />
-    <property name="vcs_file_view_flatOrder2" value="2" />
-    <property name="vcs_file_view_treeWidth4" value="33" />
-    <property name="vcs_file_view_treeOrder2" value="2" />
-    <property name="vcs_file_view_flatWidth3" value="84" />
-    <property name="vcs_file_view_treeWidth3" value="34" />
-    <property name="vcs_file_view_flatOrder0" value="0" />
-    <property name="vcs_file_view_flatWidth0" value="84" />
-    <property name="vcs_file_view_treeOrder1" value="1" />
-    <property name="vcs_file_view_flatWidth1" value="84" />
-    <property name="Tomcat Context Descriptor Default Version" value="5.x" />
-  </component>
-  <component name="ReadonlyStatusHandler">
-    <option name="SHOW_DIALOG" value="true" />
-  </component>
-  <component name="RecentsManager">
-    <key name="CopyClassDialog.RECENTS_KEY">
-      <recent name="org.codehaus.groovy.grails.commons.metaclass" />
-      <recent name="org.codehaus.groovy.grails.web.taglib" />
-    </key>
-    <key name="IntroduceConstantDialog.RECENTS_KEY">
-      <recent name="" />
-    </key>
-    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
-      <recent name="org.codehaus.groovy.grails.scaffolding" />
-      <recent name="org.codehaus.groovy.grails.commons.spring" />
-      <recent name="org.codehaus.groovy.grails.web.taglib.jsp" />
-      <recent name="org.codehaus.groovy.grails.web.pages" />
-    </key>
-  </component>
-  <component name="RestoreUpdateTree">
-    <UpdateInfo date="17/02/06 10:50" ActionInfo="Check Status">
-      <UpdatedFiles>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Updated from server" />
-          <option name="myStatusName" value="Changed on server" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="CHANGED_ON_SERVER" />
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Updated" />
-            <option name="myStatusName" value="Changed" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="UPDATED" />
-            <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\BooksTest.groovy</PATH>
-            <PATH>D:\sandbox_os\groovy\modules\grails\lib\org.mortbay.jetty.jar</PATH>
-            <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\WebTest.groovy</PATH>
-            <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\build.groovy</PATH>
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Created" />
-            <option name="myStatusName" value="Created" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="CREATED" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Deleted" />
-            <option name="myStatusName" value="Deleted" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="true" />
-            <option name="myId" value="REMOVED_FROM_REPOSITORY" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Restored" />
-            <option name="myStatusName" value="Will be restored" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="RESTORED" />
-          </FILE-GROUP>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Modified" />
-          <option name="myStatusName" value="Modified" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MODIFIED" />
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\binding\GrailsDataBinder.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsClassUtils.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\cfg\GrailsDomainBinder.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\DefaultGrailsTagLibClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\metaclass\AbstractDynamicMethods.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\pages\Scan.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\Grails Module.iml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\support\GrailsOpenSessionInViewFilter.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\grails\util\RunTests.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\grails.iws</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\DefaultGrailsApplication.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsApplication.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\filter\GrailsReloadServletFilter.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\metaclass\SavePersistentMethod.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\war\WEB-INF\web2.4.template.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\war\WEB-INF\web2.3.template.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\DefaultGrailsApplicationAttributes.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\AbstractGrailsClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsDomainClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\filter\GrailsResourceCopier.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\metaclass\DomainClassMethods.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\metaclass\DeletePersistentMethod.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsTagLibClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\pages\GroovyPagesTemplateEngine.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\build.properties</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\taglib\jsp\JspInvokeGrailsTagLibTag.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\grails.ipr</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsDomainClassProperty.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\taglib\ApplicationTagLib.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\DefaultGrailsControllerClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\mvc\SimpleGrailsControllerHelper.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\GrailsApplicationAttributes.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\DefaultGrailsDomainClass.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\pages\GroovyPage.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\metaclass\GetPersistentMethod.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\DefaultGrailsDomainClassProperty.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\build.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\org\codehaus\groovy\grails\commons\GrailsControllerClass.java</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged with conflicts" />
-          <option name="myStatusName" value="Will be merged with conflicts" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED_WITH_CONFLICTS" />
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\build.xml</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged" />
-          <option name="myStatusName" value="Will be merged" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Not in repository" />
-          <option name="myStatusName" value="Not in repository" />
-          <option name="mySupportsDeletion" value="true" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="UNKNOWN" />
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\blog\grails-app\views\layouts\main.jsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\taglib\JavascriptTagLib.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\books.war</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\ivy.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\taglib\TemplateTag.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\taglib\ValidationTagLib.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\pages\test</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\scaffolding\org\codehaus\groovy\grails\scaffolding\DomainClassPropertyComparator.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\metaclass\CountPersistentMethod.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\taglib\FormTagLib.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\test\scaffolding\org\codehaus\groovy\grails\scaffolding\GrailsTemplateGeneratorsTests.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\web-app\WEB-INF\web.xml.template</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\commons\grails\util\GenerateUtils.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\web-app\WEB-INF\applicationContext.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\servlet\filter\ResourceCopier.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\books\web-app\WEB-INF\sitemesh.xml</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\web\org\codehaus\groovy\grails\web\binding\CurrencyEditor.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\test\TestController.groovy</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\war\css\main.css</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\persistence\org\codehaus\groovy\grails\orm\hibernate\metaclass\ExistsPersistentMethod.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\test\commons\org\codehaus\groovy\grails\commons\GrailsClassUtilsTests.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\scaffolding\org\codehaus\groovy\grails\scaffolding\GrailsTemplateGenerator.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\samples\blog\grails-app\i18n\messages_en_GB.properties</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\scaffolding\org\codehaus\groovy\grails\scaffolding\DomainClassPropertyComparatorTests.java</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\scaffolding\org\codehaus\groovy\grails\scaffolding\DefaultGrailsTemplateGenerator.groovy</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally added" />
-          <option name="myStatusName" value="Locally added" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_ADDED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally removed" />
-          <option name="myStatusName" value="Locally removed" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_REMOVED" />
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\groovy.lang.GroovyObject.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.Currency.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.Boolean.yesno.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.String.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.Set.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.Date.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.Byte[].gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.TimeZone.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.Byte.template.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.Calendar.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\lib\gvtags.jar</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.Boolean.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.lang.Number.gsp</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\war\WEB-INF\tld\gvtags.tld</PATH>
-          <PATH>D:\sandbox_os\groovy\modules\grails\src\grails\grails-app\views\scaffolding\java.util.Locale.gsp</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Unknown" />
-          <option name="myStatusName" value="Unknown" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="UNKNOWN_TYPE" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally modified removed from server" />
-          <option name="myStatusName" value="Locally modified removed from server" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MOD_REMOVED_FROM_SERVER" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally removed modified on server" />
-          <option name="myStatusName" value="Locally removed modified on server" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_REMOVED_MODIFIED_ON_SERVER" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Created by second party" />
-          <option name="myStatusName" value="Created by second party" />
-          <option name="mySupportsDeletion" value="true" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="CREATED_BY_SECOND_PARTY" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Binary file has to be merged" />
-          <option name="myStatusName" value="Binary file has to be merged" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="BINARY_MERGED" />
-        </FILE-GROUP>
-      </UpdatedFiles>
-    </UpdateInfo>
-  </component>
-  <component name="RunManager">
-    <activeType name="JUnit" />
-    <tempConfiguration selected="true" default="false" name="PersistentMethodTests" type="JUnit" factoryName="JUnit">
-      <module name="Grails Module" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" value="org.codehaus.groovy.grails.orm.hibernate" />
-      <option name="MAIN_CLASS_NAME" value="org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTests" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="wholeProject" />
-      </option>
-      <RunnerSettings RunnerId="Run" />
-      <ConfigurationWrapper RunnerId="Run" />
-    </tempConfiguration>
-    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="wholeProject" />
-      </option>
-    </configuration>
-    <configuration selected="false" default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration selected="false" default="true" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local">
-      <option name="WORKING_DIRECTORY" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="8080" />
-      <option name="LOCAL" value="true" />
-      <option name="OPEN_IN_BROWSER" value="true" />
-      <option name="OPEN_IN_BROWSER_URL" value="/" />
-      <option name="COMMON_VM_ARGUMENTS" value="" />
-    </configuration>
-    <configuration selected="false" default="true" type="Applet" factoryName="Applet">
-      <module name="" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="HTML_FILE_NAME" />
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <option name="VM_PARAMETERS" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-    </configuration>
-    <configuration selected="false" default="true" type="Application" factoryName="Application">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <module name="" />
-    </configuration>
-    <configuration selected="true" default="false" name="Tomcat 5 Server" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local" APPLICATION_SERVER_NAME="Tomcat 5">
-      <option name="WORKING_DIRECTORY" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="8080" />
-      <option name="LOCAL" value="true" />
-      <option name="OPEN_IN_BROWSER" value="true" />
-      <option name="OPEN_IN_BROWSER_URL" value="http://localhost:8080/" />
-      <option name="COMMON_VM_ARGUMENTS" value="" />
-      <J2EE_MODULE DEPLOYMENT_SOURCE_NAME="exploded">
-        <option name="CONTEXT_PATH" value="/test" />
-        <option name="MODULE_NAME" value="Grails Test App" />
-        <option name="DEPLOY" value="true" />
-      </J2EE_MODULE>
-      <RunnerSettings RunnerId="Run" />
-      <RunnerSettings RunnerId="Debug">
-        <option name="DEBUG_PORT" value="1349" />
-        <option name="TRANSPORT" value="0" />
-        <option name="LOCAL" value="true" />
-      </RunnerSettings>
-      <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Run">
-        <option name="USE_ENV_VARIABLES" value="true" />
-        <STARTUP>
-          <option name="USE_DEFAULT" value="true" />
-          <option name="SCRIPT" value="D:\java\tomcat5.5\bin\tomcat5.exe" />
-          <option name="VM_PARAMETERS" value="" />
-          <option name="PROGRAM_PARAMETERS" value="" />
-        </STARTUP>
-        <SHUTDOWN>
-          <option name="USE_DEFAULT" value="true" />
-          <option name="SCRIPT" value="D:\java\tomcat5.5\bin\catalina.bat" />
-          <option name="VM_PARAMETERS" value="" />
-          <option name="PROGRAM_PARAMETERS" value=" stop" />
-        </SHUTDOWN>
-      </ConfigurationWrapper>
-      <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Debug">
-        <option name="USE_ENV_VARIABLES" value="true" />
-        <STARTUP>
-          <option name="USE_DEFAULT" value="true" />
-          <option name="SCRIPT" value="D:\java\tomcat5.5\bin\catalina.bat" />
-          <option name="VM_PARAMETERS" value="" />
-          <option name="PROGRAM_PARAMETERS" value=" run" />
-        </STARTUP>
-        <SHUTDOWN>
-          <option name="USE_DEFAULT" value="true" />
-          <option name="SCRIPT" value="D:\java\tomcat5.5\bin\catalina.bat" />
-          <option name="VM_PARAMETERS" value="" />
-          <option name="PROGRAM_PARAMETERS" value=" stop" />
-        </SHUTDOWN>
-      </ConfigurationWrapper>
-    </configuration>
-    <configuration selected="false" default="false" name="DefaultGrailsDomainClassTest" type="JUnit" factoryName="JUnit">
-      <module name="Grails Module" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" value="" />
-      <option name="PACKAGE_NAME" value="org.codehaus.groovy.grails.domain" />
-      <option name="MAIN_CLASS_NAME" value="org.codehaus.groovy.grails.domain.DefaultGrailsDomainClassTest" />
-      <option name="METHOD_NAME" value="" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" value="" />
-      <option name="PARAMETERS" value="" />
-      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="wholeProject" />
-      </option>
-      <RunnerSettings RunnerId="Run" />
-      <RunnerSettings RunnerId="Debug">
-        <option name="DEBUG_PORT" value="1264" />
-        <option name="TRANSPORT" value="0" />
-        <option name="LOCAL" value="true" />
-      </RunnerSettings>
-      <ConfigurationWrapper RunnerId="Run" />
-      <ConfigurationWrapper RunnerId="Debug" />
-    </configuration>
-  </component>
-  <component name="SelectInManager" />
-  <component name="StarteamConfiguration">
-    <option name="SERVER" value="" />
-    <option name="PORT" value="49201" />
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="PROJECT" value="" />
-    <option name="VIEW" value="" />
-    <option name="ALTERNATIVE_WORKING_PATH" value="" />
-  </component>
-  <component name="StructuralSearchPlugin" />
-  <component name="StructureViewFactory">
-    <option name="AUTOSCROLL_MODE" value="true" />
-    <option name="AUTOSCROLL_FROM_SOURCE" value="false" />
-    <option name="ACTIVE_ACTIONS" value="ALPHA_COMPARATOR" />
-  </component>
-  <component name="SvnChangesBrowserSettings">
-    <option name="USE_AUTHOR_FIELD" value="true" />
-    <option name="AUTHOR" value="" />
-    <option name="LOCATION" value="" />
-    <option name="USE_PROJECT_SETTINGS" value="true" />
-    <option name="USE_ALTERNATE_LOCATION" value="false" />
-  </component>
-  <component name="SvnConfiguration">
-    <option name="USER" value="" />
-    <option name="PASSWORD" value="" />
-    <option name="PROCESS_UNRESOLVED" value="false" />
-  </component>
-  <component name="TodoView" selected-index="0">
-    <todo-panel id="selected-file">
-      <are-packages-shown value="false" />
-      <are-modules-shown value="false" />
-      <flatten-packages value="false" />
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-    <todo-panel id="all">
-      <are-packages-shown value="true" />
-      <are-modules-shown value="false" />
-      <flatten-packages value="false" />
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="-4" y="-4" width="1608" height="1174" extended-state="6" />
-    <editor active="false" />
-    <layout>
-      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="8" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.22211538" order="7" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.25449872" order="0" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33557692" order="1" />
-      <window_info id="Structure" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.18123393" order="6" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3298077" order="11" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6" />
-      <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
-      <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3298077" order="9" />
-      <window_info id="Favorites" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.13560411" order="1" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.12724936" order="4" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3298077" order="2" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="floating" visible="false" weight="0.24951768" order="5" x="606" y="188" width="388" height="789" />
-      <window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32969153" order="2" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.3394231" order="4" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.19344473" order="3" />
-      <window_info id="Version Control" active="true" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.39807692" order="10" />
-      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
-      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5" />
-    </layout>
-  </component>
-  <component name="VCS.FileViewConfiguration">
-    <option name="SELECTED_STATUSES" value="Added;Deleted;Merged;Modified;Deleted from file system;Merged with conflicts" />
-    <option name="SELECTED_COLUMNS" value="DEFAULT" />
-    <option name="SHOW_FILTERS" value="true" />
-    <option name="CUSTOMIZE_VIEW" value="true" />
-    <option name="SHOW_FILE_HISTORY_AS_TREE" value="true" />
-  </component>
-  <component name="VcsManagerConfiguration">
-    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
-    <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
-    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="removed redundant class" />
-    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
-    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
-    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
-    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false" />
-    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
-    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
-    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
-    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
-    <option name="ERROR_OCCURED" value="false" />
-    <option name="ACTIVE_VCS_NAME" value="" />
-    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
-    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
-    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="updated GSP engine to use grails class loader instance" />
-    <MESSAGE value="reworked model response handling to return a CompositeMap of the controller bean and chain model if no explicity model is specified" />
-    <MESSAGE value="updated to catch MPE and return null when a property is not available in the binding, this is more in line with the way modern view technologies work by gracefully ignoring no existant properties and using the Groovy Truth when they evaluate to null. A message is written to the log when a property is not found." />
-    <MESSAGE value="bundled ant with grails to avoid conflicts with existing ant installations and removing one step of the install process" />
-    <MESSAGE value="moved ant to a separate folder with its own lib directory as it was causing class loader illegal access errors" />
-    <MESSAGE value="allowed scaffolding of a specific domain class by a grail controller" />
-    <MESSAGE value="upgraded to latest hibernate 3.1" />
-    <MESSAGE value="upgraded to latest hibernate 3.1 and fixed test cases as they were broken after class reloading change" />
-    <MESSAGE value="changed to flush all pending updates to the db before calling update to avoid the &quot;ignoring pesistent instance&quot; problem" />
-    <MESSAGE value="removed redundant class" />
-  </component>
-  <component name="VssConfiguration">
-    <option name="CLIENT_PATH" value="" />
-    <option name="SRCSAFEINI_PATH" value="" />
-    <option name="USER_NAME" value="" />
-    <option name="PWD" value="" />
-    <option name="VSS_IS_INITIALIZED" value="true" />
-    <CheckoutOptions>
-      <option name="COMMENT" value="" />
-      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
-      <option name="REPLACE_WRITABLE" value="false" />
-      <option name="RECURSIVE" value="false" />
-    </CheckoutOptions>
-    <CheckinOptions>
-      <option name="COMMENT" value="" />
-      <option name="KEEP_CHECKED_OUT" value="false" />
-      <option name="RECURSIVE" value="false" />
-    </CheckinOptions>
-    <AddOptions>
-      <option name="COMMENT" value="" />
-      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
-      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
-      <option name="FILE_TYPE" value="0" />
-    </AddOptions>
-    <UndocheckoutOptions>
-      <option name="MAKE_WRITABLE" value="false" />
-      <option name="REPLACE_LOCAL_COPY" value="0" />
-      <option name="RECURSIVE" value="false" />
-    </UndocheckoutOptions>
-    <GetOptions>
-      <option name="REPLACE_WRITABLE" value="0" />
-      <option name="MAKE_WRITABLE" value="false" />
-      <option name="RECURSIVE" value="false" />
-    </GetOptions>
-  </component>
-  <component name="antWorkspaceConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="FILTER_TARGETS" value="false" />
-    <buildFile url="file://$PROJECT_DIR$/build.xml">
-      <antCommandLine value="" />
-      <runInBackground value="false" />
-      <targetFilters>
-        <filter targetName="javadoc" isVisible="false" />
-        <filter targetName="jar" isVisible="false" />
-        <filter targetName="build-init" isVisible="false" />
-        <filter targetName="build" isVisible="false" />
-        <filter targetName="clean" isVisible="false" />
-        <filter targetName="test" isVisible="false" />
-        <filter targetName="dist" isVisible="false" />
-        <filter targetName="build-test" isVisible="false" />
-      </targetFilters>
-      <treeView value="true" />
-      <verbose value="true" />
-      <viewClosedWhenNoErrors value="false" />
-    </buildFile>
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/commons/grails/util/GenerateUtils.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="62" column="185" selection-start="2641" selection-end="2717" vertical-scroll-proportion="1.169463">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffoldViewResolver.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="26" column="13" selection-start="1006" selection-end="1006" vertical-scroll-proportion="0.17223911">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="473" column="44" selection-start="18759" selection-end="18759" vertical-scroll-proportion="0.63255036">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/servlet/filter/ResourceCopier.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="36" column="47" selection-start="1090" selection-end="1090" vertical-scroll-proportion="0.3867632">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClass.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="31" column="13" selection-start="993" selection-end="993" vertical-scroll-proportion="-0.17857143">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/samples/test/grails-app/domain/User.groovy">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="9" column="4" selection-start="196" selection-end="196" vertical-scroll-proportion="0.24247226">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsReloadServletFilter.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="96" column="42" selection-start="4323" selection-end="4323" vertical-scroll-proportion="-3.6915584">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/samples/test/grails-app/views/user/list.gsp">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="0" column="27" selection-start="27" selection-end="27" vertical-scroll-proportion="0.0">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/servlet/DefaultGrailsApplicationAttributes.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="109" column="34" selection-start="4142" selection-end="4142" vertical-scroll-proportion="0.72402596">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspInvokeGrailsTagLibTag.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="132" column="51" selection-start="5693" selection-end="5693" vertical-scroll-proportion="0.15584415">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/web/org/codehaus/groovy/grails/web/pages/GroovyPage.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="206" column="29" selection-start="7454" selection-end="7454" vertical-scroll-proportion="0.31132075">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/samples/test/grails-app/controllers/UserController.groovy">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="1" column="29" selection-start="52" selection-end="52" vertical-scroll-proportion="0.026113672">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/GrailsApplication.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="177" column="51" selection-start="5613" selection-end="5613" vertical-scroll-proportion="1.4213836">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="302" column="69" selection-start="13882" selection-end="13882" vertical-scroll-proportion="0.6320755">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGenerator.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="80" selection-start="1372" selection-end="1372" vertical-scroll-proportion="0.67895544">
-          <folding />
-        </state>
-      </provider>
-    </entry>
-  </component>
-</project>
-
diff --git a/groovy/modules/grails/lib/antlr-2.7.6rc1.jar b/groovy/modules/grails/lib/antlr-2.7.6rc1.jar
deleted file mode 100644
index f83e310..0000000
--- a/groovy/modules/grails/lib/antlr-2.7.6rc1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/asm-attrs.jar b/groovy/modules/grails/lib/asm-attrs.jar
deleted file mode 100644
index f07bcb2..0000000
--- a/groovy/modules/grails/lib/asm-attrs.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/asm.jar b/groovy/modules/grails/lib/asm.jar
deleted file mode 100644
index ee0c7cc..0000000
--- a/groovy/modules/grails/lib/asm.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/bsf.jar b/groovy/modules/grails/lib/bsf.jar
deleted file mode 100644
index caa4dea..0000000
--- a/groovy/modules/grails/lib/bsf.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/cglib-2.1.3.jar b/groovy/modules/grails/lib/cglib-2.1.3.jar
deleted file mode 100644
index ddfbdb0..0000000
--- a/groovy/modules/grails/lib/cglib-2.1.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-cli-1.0.jar b/groovy/modules/grails/lib/commons-cli-1.0.jar
deleted file mode 100644
index 6b15e9f..0000000
--- a/groovy/modules/grails/lib/commons-cli-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-collections-3.0.jar b/groovy/modules/grails/lib/commons-collections-3.0.jar
deleted file mode 100644
index 5cc4f90..0000000
--- a/groovy/modules/grails/lib/commons-collections-3.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-dbcp-1.2.1.jar b/groovy/modules/grails/lib/commons-dbcp-1.2.1.jar
deleted file mode 100644
index 08440c0..0000000
--- a/groovy/modules/grails/lib/commons-dbcp-1.2.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-el.jar b/groovy/modules/grails/lib/commons-el.jar
deleted file mode 100644
index 608ed79..0000000
--- a/groovy/modules/grails/lib/commons-el.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-fileupload.jar b/groovy/modules/grails/lib/commons-fileupload.jar
deleted file mode 100644
index 1ca4a9c..0000000
--- a/groovy/modules/grails/lib/commons-fileupload.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-lang-2.0.jar b/groovy/modules/grails/lib/commons-lang-2.0.jar
deleted file mode 100644
index c8a2870..0000000
--- a/groovy/modules/grails/lib/commons-lang-2.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-logging.jar b/groovy/modules/grails/lib/commons-logging.jar
deleted file mode 100644
index b73a80f..0000000
--- a/groovy/modules/grails/lib/commons-logging.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-pool-1.2.jar b/groovy/modules/grails/lib/commons-pool-1.2.jar
deleted file mode 100644
index 4ba534c..0000000
--- a/groovy/modules/grails/lib/commons-pool-1.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/commons-validator.jar b/groovy/modules/grails/lib/commons-validator.jar
deleted file mode 100644
index 65ecf29..0000000
--- a/groovy/modules/grails/lib/commons-validator.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/dom4j-1.6.1.jar b/groovy/modules/grails/lib/dom4j-1.6.1.jar
deleted file mode 100644
index c8c4dbb..0000000
--- a/groovy/modules/grails/lib/dom4j-1.6.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/ehcache-1.1.jar b/groovy/modules/grails/lib/ehcache-1.1.jar
deleted file mode 100644
index 2bda916..0000000
--- a/groovy/modules/grails/lib/ehcache-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/ejb3-persistence.jar b/groovy/modules/grails/lib/ejb3-persistence.jar
deleted file mode 100644
index 1ec7f40..0000000
--- a/groovy/modules/grails/lib/ejb3-persistence.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/groovy-all-1.0-jsr-05-SNAPSHOT.jar b/groovy/modules/grails/lib/groovy-all-1.0-jsr-05-SNAPSHOT.jar
deleted file mode 100644
index e838166..0000000
--- a/groovy/modules/grails/lib/groovy-all-1.0-jsr-05-SNAPSHOT.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/hibernate-annotations.jar b/groovy/modules/grails/lib/hibernate-annotations.jar
deleted file mode 100644
index 03447a2..0000000
--- a/groovy/modules/grails/lib/hibernate-annotations.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/hibernate3.jar b/groovy/modules/grails/lib/hibernate3.jar
deleted file mode 100644
index c0d963f..0000000
--- a/groovy/modules/grails/lib/hibernate3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/hsqldb.jar b/groovy/modules/grails/lib/hsqldb.jar
deleted file mode 100644
index e333635..0000000
--- a/groovy/modules/grails/lib/hsqldb.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jakarta-oro-2.0.8.jar b/groovy/modules/grails/lib/jakarta-oro-2.0.8.jar
deleted file mode 100644
index 23488d2..0000000
--- a/groovy/modules/grails/lib/jakarta-oro-2.0.8.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jasper-compiler.jar b/groovy/modules/grails/lib/jasper-compiler.jar
deleted file mode 100644
index 96ec538..0000000
--- a/groovy/modules/grails/lib/jasper-compiler.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jasper-runtime.jar b/groovy/modules/grails/lib/jasper-runtime.jar
deleted file mode 100644
index 5c3b4bf..0000000
--- a/groovy/modules/grails/lib/jasper-runtime.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/javax.servlet.jar b/groovy/modules/grails/lib/javax.servlet.jar
deleted file mode 100644
index 77e7a86..0000000
--- a/groovy/modules/grails/lib/javax.servlet.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jdbc2_0-stdext.jar b/groovy/modules/grails/lib/jdbc2_0-stdext.jar
deleted file mode 100644
index ddafa13..0000000
--- a/groovy/modules/grails/lib/jdbc2_0-stdext.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jstl-2.3.jar b/groovy/modules/grails/lib/jstl-2.3.jar
deleted file mode 100644
index 268062d..0000000
--- a/groovy/modules/grails/lib/jstl-2.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jstl-2.4.jar b/groovy/modules/grails/lib/jstl-2.4.jar
deleted file mode 100644
index a02abec..0000000
--- a/groovy/modules/grails/lib/jstl-2.4.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/jta.jar b/groovy/modules/grails/lib/jta.jar
deleted file mode 100644
index e0822a9..0000000
--- a/groovy/modules/grails/lib/jta.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/junit.jar b/groovy/modules/grails/lib/junit.jar
deleted file mode 100644
index 674d71e..0000000
--- a/groovy/modules/grails/lib/junit.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/log4j-1.2.8.jar b/groovy/modules/grails/lib/log4j-1.2.8.jar
deleted file mode 100644
index 493a3cc..0000000
--- a/groovy/modules/grails/lib/log4j-1.2.8.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/ognl-2.7.jar b/groovy/modules/grails/lib/ognl-2.7.jar
deleted file mode 100644
index a1e7443..0000000
--- a/groovy/modules/grails/lib/ognl-2.7.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/org.mortbay.jetty.jar b/groovy/modules/grails/lib/org.mortbay.jetty.jar
deleted file mode 100644
index 0a3e6f7..0000000
--- a/groovy/modules/grails/lib/org.mortbay.jetty.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/servlet-api.jar b/groovy/modules/grails/lib/servlet-api.jar
deleted file mode 100644
index 589aeba..0000000
--- a/groovy/modules/grails/lib/servlet-api.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/sitemesh-2.2.1.jar b/groovy/modules/grails/lib/sitemesh-2.2.1.jar
deleted file mode 100644
index 675c8e7..0000000
--- a/groovy/modules/grails/lib/sitemesh-2.2.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/spring-binding.jar b/groovy/modules/grails/lib/spring-binding.jar
deleted file mode 100644
index afbfa9b..0000000
--- a/groovy/modules/grails/lib/spring-binding.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/spring-mock.jar b/groovy/modules/grails/lib/spring-mock.jar
deleted file mode 100644
index 06bc027..0000000
--- a/groovy/modules/grails/lib/spring-mock.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/spring-webflow.jar b/groovy/modules/grails/lib/spring-webflow.jar
deleted file mode 100644
index 75e7027..0000000
--- a/groovy/modules/grails/lib/spring-webflow.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/spring.jar b/groovy/modules/grails/lib/spring.jar
deleted file mode 100644
index f14370f..0000000
--- a/groovy/modules/grails/lib/spring.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/springmodules-sandbox.jar b/groovy/modules/grails/lib/springmodules-sandbox.jar
deleted file mode 100644
index fc47af5..0000000
--- a/groovy/modules/grails/lib/springmodules-sandbox.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/standard-2.3.jar b/groovy/modules/grails/lib/standard-2.3.jar
deleted file mode 100644
index c74dbad..0000000
--- a/groovy/modules/grails/lib/standard-2.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/standard-2.4.jar b/groovy/modules/grails/lib/standard-2.4.jar
deleted file mode 100644
index bc528ac..0000000
--- a/groovy/modules/grails/lib/standard-2.4.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/xercesImpl.jar b/groovy/modules/grails/lib/xercesImpl.jar
deleted file mode 100644
index 7053631..0000000
--- a/groovy/modules/grails/lib/xercesImpl.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/lib/xml-apis.jar b/groovy/modules/grails/lib/xml-apis.jar
deleted file mode 100644
index 6ba4ff8..0000000
--- a/groovy/modules/grails/lib/xml-apis.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/samples/SampleGenerator.groovy b/groovy/modules/grails/samples/SampleGenerator.groovy
deleted file mode 100644
index 68dd250..0000000
--- a/groovy/modules/grails/samples/SampleGenerator.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-// start from inside samples dir
-
-// consts in binding
-CMD      = 'cmd /c '            // todo: make this os-aware
-APP_NAME = 'myapp'
-BO_NAME  = 'mydomain'
-ANT      = new AntBuilder()
-
-
-ANT.delete(dir:APP_NAME, quiet:true)
-
-console('grails create-app', APP_NAME)
-
-appConsole('grails create-domain-class', BO_NAME)
-
-// do something to domain class here...
-
-appConsole('grails generate-all', BO_NAME)
-
-// unit testing, building etc. here?
-
-appConsole('grails create-webtest', '')
-
-appConsole('grails generate-webtest', BO_NAME)
-
-// start the jetty server as external process
-// or rely on tomcat hot deployment
-
-appConsole('grails run-webtest', BO_NAME)
-
-// --------- implementation methods -----------
-
-void appConsole(String command, String input){
-    console "cd $APP_NAME && " + command , input
-}
-
-void console(String command, String input) {
-    def proc = (CMD + command).execute()
-
-    Thread.start { System.out  << proc.in  }
-    Thread.start { System.err  << proc.err }
-    
-    proc << input  + "\n" 
-    
-    proc.out.close()
-    proc.waitForOrKill(0)
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleController.groovy b/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleController.groovy
deleted file mode 100644
index 47ebb36..0000000
--- a/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleController.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-import com.google.soap.search.*;
-
-class GoogleController {
-	
-	@Property String defaultClosure = "search"
-	
-	@Property Closure search = {
-		def q = this.params["q"]
-		def google = new GoogleSearch()
-		google.key = "/ndZrntQFHIOTUjtA2bCOE5ulMxHovBj"
-		google.queryString = q
-		google.maxResults = 10;
-
-		println "Querying Google with string = ${q}"		
-		def result = google.doSearch();
-		
-		response.contentType = "text/xml"
-		new grails.util.OpenRicoBuilder(this.response).ajax {
-			element(id:"googleUrlResults") {
-				for (re in result.resultElements) {
-					div(class:"googleResult") {
-						a(href:re.URL, re.title)
-					}
-				}
-			}
-		}
-		return null
-	}
-	
-	@Property Closure list = {
-		println "hello!"
-	}
-}
diff --git a/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleControllerTests.groovy b/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleControllerTests.groovy
deleted file mode 100644
index 6ead3f5..0000000
--- a/groovy/modules/grails/samples/ajax/grails-app/controllers/GoogleControllerTests.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-class GoogleControllerTests extends GroovyTestCase {
-   @Property gc = new GoogleController();
-
-   void testSearch() {
-		def request = new MockHttpServletRequest();
-		def response = new MockHttpServletResponse();
-
-		request.addParameter("q","java")
-		gc.search(request,response)
-   }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/ajax/grails-app/views/layouts/default.jsp b/groovy/modules/grails/samples/ajax/grails-app/views/layouts/default.jsp
deleted file mode 100644
index b2fc551..0000000
--- a/groovy/modules/grails/samples/ajax/grails-app/views/layouts/default.jsp
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
-<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
-<html>
-	<head>
-		<title><decorator:title default="Google Example" /></title>
-		<meta HTTP-EQUIV="Pragma" CONTENT="no-cache" /> 
-		<meta HTTP-EQUIV="Expires" CONTENT="-1" />		
-		<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
-		<title>Auto-Complete Google Example</title>
-		<style><!--
-			body,td,a,p,.h{font-family:arial,sans-serif;}
-			.h{font-size: 20px;}
-			.q{color:#0000cc;}
-.autoComplete {
-	font-weight:bold;
-	font-size: 0.95em;	
-	background-color: white;
-	border: 1px solid black;
-	padding: 1px;	
-}
-.autoCompleteResultOver {
-	background-color:#00287A;
-	color:white;
-}
-			//-->
-		</style>
-		<script type="text/javascript" src="js/prototype.js"></script>
-		<script type="text/javascript" src="js/rico.js"></script>
-		<script type="text/javascript" src="js/grails.js"></script>
-		<decorator:head />				
-	</head>
-	<body bgcolor=#ffffff  text=#000000 link=#0000cc vlink=#551a8b alink=#ff0000 topmargin=3 marginheight=3 onload="<decorator:getProperty property='body.onload'/>">
-		<center><img src="http://www.google.com/intl/en_uk/images/logo.gif" width=276 height=110 alt="Google"><br><br>
-		
-		 <div class="body">
-			 <decorator:body />				 	
-		 </div>	
-	</body>
-	
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/ajax/lib/googleapi.jar b/groovy/modules/grails/samples/ajax/lib/googleapi.jar
deleted file mode 100644
index 2aade51..0000000
--- a/groovy/modules/grails/samples/ajax/lib/googleapi.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/samples/ajax/web-app/google.html b/groovy/modules/grails/samples/ajax/web-app/google.html
deleted file mode 100644
index 21bb23b..0000000
--- a/groovy/modules/grails/samples/ajax/web-app/google.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<html>
-<head>
-	<meta http-equiv="content-type" content="text/html; charset=UTF-8"></meta>
-	<meta name="layout" content="default"></meta>
-	<title>Auto-Complete Google Example</title>
-	<script>
-	<!--
-		function bodyOnload() {
-			ajaxEngine.registerAjaxElement("googleUrlResults");
-			ajaxEngine.registerRequest("search", "/ajax/google/search");
-			$("btnG").onclick = function() {
-				ajaxEngine.sendRequest("search", "q=" + $("googleTextField").value);
-			}
-		}
-	// -->
-	</script>
-</head>
-<body onload="bodyOnload();">
-
-	<table border=0 cellspacing=0 cellpadding=4>
-		<table cellspacing=0 cellpadding=0>
-			<tr><td width=25%>&nbsp;</td>
-			<td align=center>
-				<input id="googleTextField" maxLength=256 size=55 name=q value="" autocomplete="off">
-				<input type=button id="btnG" value="Go" name=btnG>
-			</td>
-			</tr>
-		</table>
-		
-		<div id="googleUrlResults">
-		
-		</div>
-</body></html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/conf/BlogBootStrap.groovy b/groovy/modules/grails/samples/blog/grails-app/conf/BlogBootStrap.groovy
deleted file mode 100644
index 6c48994..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/conf/BlogBootStrap.groovy
+++ /dev/null
@@ -1,25 +0,0 @@
-class BlogBootStrap {
-
-     @Property Closure init = { servletContext ->
-     	
-     	println "Loading Blog data"
-     					
-		def entry = new Entry(title:"Test Entry",date:new Date())
-		entry.body = "This is a test entry in this demo blog"							
-				
-
-		entry.save() 
-
-		def comment = new Comment()
-		comment.entry = entry
-		comment.authorName = "Fred Flintstone"
-		comment.authorEmail = "fred@blogs.com"
-		comment.authorBlogURL = "http://www.blogs.com/fred"
-		comment.body = "This is my comment!"
-
-		comment.save()
-  
-     }
-     @Property Closure destroy = {
-     }
-} 
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/controllers/EntryController.groovy b/groovy/modules/grails/samples/blog/grails-app/controllers/EntryController.groovy
deleted file mode 100644
index 49fb56d..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/controllers/EntryController.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-class EntryController {
-	@Property boolean scaffold = true
-	@Property defaultAction = "list"
-	
-	@Property createComment = {
-		def e = Entry.get( this.params["entryId"] )
-		
-		def c = new Comment(entry:e)
-		c.properties = this.params		
-		c.save()
-		
-		redirect(action:this.show,params:[ "id": this.params["entryId"] ] )
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/domain/Comment.groovy b/groovy/modules/grails/samples/blog/grails-app/domain/Comment.groovy
deleted file mode 100644
index d31c393..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/domain/Comment.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-class Comment { 
-	@Property Long id; 
-	@Property Long version; 
-	
-	@Property Entry entry
-	
-	@Property String authorName
-	@Property String authorEmail
-	@Property String authorBlogURL
-	@Property String body
-	
-	@Property constraints = {
-		authorEmail(email:true)
-		authorBlogURL(url:true)
-		body(blank:false)
-	}
-}	
diff --git a/groovy/modules/grails/samples/blog/grails-app/domain/Entry.groovy b/groovy/modules/grails/samples/blog/grails-app/domain/Entry.groovy
deleted file mode 100644
index af4bf21..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/domain/Entry.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-class Entry { 
-	@Property Long id; 
-	@Property Long version; 
-	@Property relationships = [ "comments" : Comment.class ]
-	
-	@Property String title
-	@Property Date date = new Date()
-	@Property String body
-	@Property Set comments = new HashSet()
-	
-	@Property constraints = {
-		title(blank:false,length:1..50)
-		date(nullable:false)
-		body(blank:false)
-	}
-}	
diff --git a/groovy/modules/grails/samples/blog/grails-app/i18n/messages.properties b/groovy/modules/grails/samples/blog/grails-app/i18n/messages.properties
deleted file mode 100644
index e69de29..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/i18n/messages.properties
+++ /dev/null
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/create.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/create.jsp
deleted file mode 100644
index 376a859..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/create.jsp
+++ /dev/null
@@ -1,24 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri='http://www.taobits.net/gvtags' prefix='gv' %>
-<html>	
-	<gv:bean var="errors" scope="request" />		
-    <head>
-      <title>Create Entry</title>
-   </head>
-
-   <body>
-   		<h1>Create Entry</h1>
-   		<form action="save" method="POST">
-   			<input type="hidden" name="date" value="<gv:out expr='new Date()' />" />
-	      <h2>
-	      	<input type="text" name="title"  />      		
-	      </h2>
-		  <p>
-	  		<textarea name="body" ></textarea>
-		  </p>
-		  <p>
-				<input type="submit" value="Save" />
-		  </p>
-	  	</form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/create.test.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/create.test.jsp
deleted file mode 100644
index 79e208c..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/create.test.jsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<html>	
-    <head>
-      <title>Create Entry</title>
-   </head>
-
-   <body>
-   		<h1>Create Entry</h1>
-   		<form action="save" method="POST">
-	      <h2>
-	      	<input type="text" name="title"  />      		
-	      </h2>
-		  <p>
-	  		<textarea name="body" ></textarea>
-		  </p>
-		  <p>
-				<input type="submit" value="Save" />
-		  </p>
-	  	</form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.jsp
deleted file mode 100644
index 2905d8b..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri='http://www.taobits.net/gvtags' prefix='gv' %>
-<html>	
-	<gv:bean var="entry" scope="request" />	
-	<gv:bean var="errors" scope="request" />		
-    <head>
-      <title>Edit Entry</title>
-   </head>
-
-   <body>
-   		<h1>Edit Entry</h1>
-   		<form action="update" method="POST">
-   			<input type="hidden" name="id" value="<gv:out expr='entry.id' />" />
-	      <h2>
-	      	<input type="text" name="title" value="<gv:out expr='entry.title' />" />      		
-	      </h2>
-		  <p>
-	  		<textarea name="body" ><gv:out expr='entry.body' /></textarea>
-		  </p>
-		  <p>
-				<input type="submit" value="Update" />
-		  </p>
-	  	</form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.test.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.test.jsp
deleted file mode 100644
index 0d86f49..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/edit.test.jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<html>	
-    <head>
-      <title>Edit Entry</title>
-   </head>
-
-   <body>
-   		<h1>Edit Entry</h1>
-   		<form action="update" method="POST">
-   			<input type="hidden" name="id" value="<c:out value='${entry.id}' />" />
-	      <h2>
-	      	<input type="text" name="title" value="<c:out value='${entry.title}' />" />      		
-	      </h2>
-		  <p>
-	  		<textarea name="body" ><c:out value='${entry.body}' /></textarea>
-		  </p>
-		  <p>
-				<input type="submit" value="Update" />
-		  </p>
-	  	</form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/list.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/list.jsp
deleted file mode 100644
index 504035e..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/list.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri='http://www.taobits.net/gvtags' prefix='gv' %>
-<html>	
-	<gv:bean var="entryList" scope="request" />	
-    <head>
-      <title>Weblog</title>
-   </head>
-
-   <body>
-   	  <center><h1>Grails Weblog</h1></center>
-   	  
-      <h2>Entries:</h2>
-      <p><a href="create">Add Post</a>
-	  <gv:for var="e" in="entryList">
-	      <h3><gv:out expr="e.title" /> - <gv:out expr="e.date" /></h3>
-		  <p>
-		  		<gv:out expr="e.body" />
-		  </p>
-		  <p>
-				<gv:generic tag='a' hrefExpr='"edit?id=${e.id}"'>Edit Post</gv:generic>
-		  </p>
-		  <p><b><gv:generic tag='a' hrefExpr='"show?id=${e.id}#comments"'>Comments</gv:generic> ( <gv:out expr="e.comments.size()" />  ):</b></p>
-	  </gv:for>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/list.test.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/list.test.jsp
deleted file mode 100644
index 4b643fc..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/list.test.jsp
+++ /dev/null
@@ -1,25 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<html>	
-    <head>
-      <title>Weblog</title>
-   </head>
-
-   <body>
-   	  <center><h1>Grails Weblog</h1></center>
-   	  
-      <h2>Entries:</h2>
-      <p><a href="create">Add Post</a>
-	  <c:forEach var="e" items="${entryList}">
-	      <h3><c:out value="${e.title}" /> - <c:out value="${e.date}" /></h3>
-		  <p>
-		  		<c:out value="${e.body}" />
-		  </p>
-		  <p>
-		  		<a href="edit?id=<c:out value='${e.id}' />">Edit Post</href>
-		  </p>
-		  <p><b>
-		  <a href="show?id=<c:out value='${e.id}' />#comments">Comments</a>:</b></p>
-	  </c:forEach>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/show.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/show.jsp
deleted file mode 100644
index 8face96..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/show.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri='http://www.taobits.net/gvtags' prefix='gv' %>
-<html>	
-	<gv:bean var="entry" scope="request" />	
-    <head>
-      <title>View Entry</title>
-   </head>
-
-   <body>
-      <h2><gv:out expr="entry.title" /> - <gv:out expr="entry.date" /></h2>
-	  <p>
-	  		<gv:out expr="entry.body" />
-	  </p>
-	  <p>
-			<gv:generic tag='a' hrefExpr='"/blog/app/entry/edit?id=${entry.id}"'>Edit Post</gv:generic>
-	  </p>
-	  <p><b><a href="#comments">Comments:</a></b></p>
-	  <gv:for var="c" in="entry.comments">
-	  		<p><b>Left by:</b> <gv:out expr="c.authorName" /></p>
-			<p>
-				<gv:out expr="c.body" />
-			</p>
-	  </gv:for>	  
-	  <p>
-	  		<b>Add Comment:</b>
-	  </p>
-	  <form action="createComment" method="POST">
-	  		<input type="hidden" name="entryId" value="<gv:out expr='entry.id' />" />
-	  		
-	  		<p> Name: <input name="authorName" type="text" /></p>
-	  		<p> Email: <input name="authorEmail" type="text" /></p>
-	  		<p> Homepage: <input name="authorBlogURL" type="text" /></p>	  		
-	  		<p><textarea name="body" ></textarea></p>
-	  		<p><input type="submit" value="Add" /></p>
-	  </form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/blog/grails-app/views/entry/show.test.jsp b/groovy/modules/grails/samples/blog/grails-app/views/entry/show.test.jsp
deleted file mode 100644
index f6e9cce..0000000
--- a/groovy/modules/grails/samples/blog/grails-app/views/entry/show.test.jsp
+++ /dev/null
@@ -1,36 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<html>	
-    <head>
-      <title>View Entry</title>
-   </head>
-
-   <body>
-      <h2><c:out value="${entry.title}" /> - <c:out value="${entry.date}" /></h2>
-	  <p>
-	  		<c:out value="${entry.body}" />
-	  </p>
-	  <p>
-	  		<a href="edit?id=<c:out value='${entry.id}' />">Edit Post</a>
-	  </p>
-	  <p><b><a href="#comments">Comments:</a></b></p>
-	  <c:forEach var="c" items="${entry.comments}">
-	  		<p><b>Left by:</b> <c:out value="${c.authorName}" /></p>
-			<p>
-				<c:out value="${c.body}" />
-			</p>
-	  </c:forEach>	  
-	  <p>
-	  		<b>Add Comment:</b>
-	  </p>
-	  <form action="createComment" method="POST">
-	  		<input type="hidden" name="entryId" value="<c:out value='${entry.id}' />" />
-	  		
-	  		<p> Name: <input name="authorName" type="text" /></p>
-	  		<p> Email: <input name="authorEmail" type="text" /></p>
-	  		<p> Homepage: <input name="authorBlogURL" type="text" /></p>	  		
-	  		<p><textarea name="body" ></textarea></p>
-	  		<p><input type="submit" value="Add" /></p>
-	  </form>
-   </body> 
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/BooksTest.groovy b/groovy/modules/grails/samples/books/BooksTest.groovy
deleted file mode 100644
index 89fae8b..0000000
--- a/groovy/modules/grails/samples/books/BooksTest.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-// to be called by build.groovy
-
-class BooksTest extends WebTest {
-
-    // Unlike unit test, functional tests are often sequence dependent.
-    // Specify that sequence here.
-    void suite() {
-        testInitialBooks()
-        testAddBook()
-     }
-     
-    def testInitialBooks(){
-        def bookTitles = [
-            'The Da Vinci Code',
-            'Deception Point',
-            'Digital Fortress',
-            'Angels And Demons'
-        ]
-        webtest('books: Run through the details of the 4 inital books'){
-            invoke(url:'books')
-            def index = 0
-            bookTitles.each { title -> index++                  // starts at 1
-                ant.group(description:"Test Book No. $index: $title"){
-                    verifyTitle(text:'Book list')
-                    selectForm(index: index)
-                    clickButton(label:'Details')
-                    verifyTitle(text:'Book detail')
-                    verifyXPath(
-                        description:"hidden index id must be $index",
-                        xpath:"//input[@type='hidden'][@name='id'][@value='$index']")
-                    verifyInputField(name:'title', value: title)
-                    verifyText(text:'Dan Brown')
-                    // go into author details here
-                    clickButton(label:'Save')
-                    verifyTitle(text:'Book detail')
-                    clickButton(label:'Close')
-    }   }   }   }
-
-    def addAuthor(name){
-        ant.group(description:"adding a new author to the authors list with name '$name'"){
-            clickButton(label:'Add author ...')
-            setInputField(name:'name', value: name)
-            clickButton(label:'Save')
-        }
-    }
-
-    def addBook(title, author){
-        ant.group(description:"adding a new book with title '$title' and new author '$author'"){
-            clickButton(label:'Add book ...')
-            verifyTitle(text:'Book detail')
-            setInputField(name:'title', value: title)
-            clickButton(label:'...', description:'see the list of authors')
-                addAuthor(author) // todo: also try with ö
-            clickButton(htmlId:'detail2', description: 'choose new author')
-            clickButton(label:'Save')
-        }
-    }
-
-    def testAddBook() {
-        webtest('books: add new book, make sure it\'s there'){
-            invoke(url:'books')
-            verifyTitle(text:'Book list')
-                addBook('Groovy in Action', 'Dierk Koenig et al.')
-            verifyTitle(text:'Book list')
-            verifyText(text:'Groovy in Action.*Dierk Koenig et al.', regex:true)
-            clickButton(label:'End')
-    }   }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/INSTRUCTIONS.txt b/groovy/modules/grails/samples/books/INSTRUCTIONS.txt
deleted file mode 100644
index 45cff51..0000000
--- a/groovy/modules/grails/samples/books/INSTRUCTIONS.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-BOOKS SAMPLE APPLICATION FOR GRAILS
-===================================
-
-This sample application demonstrates a simple page flow application that maintains a list of books.
-
-The directory structure is:
-
-<root>
-  /grails-app
-    /BookFlow.groovy
-  /jsp
-    /listBooks.jsp
-    /bookDetail.jsp
-
-This application clearly demonstrates how compact Grails applications are and how little configuration is required.
-
-BUILDING
-========
-
-If you have obtained Grails from CVS make sure the JAR file is build by running this command in the Grails home directory: 
-
-ant jar
-
-To deploy this application set the GRAILS_HOME environment to the root directory of the Grails distribution or project.
-
-At the command prompt change directory to the project root directory which is ${GRAILS_HOME}/samples/books.
-
-Next run this command to initiate the dictory structure:
-
-${GRAILS_HOME}/bin/grails init
-
-If you get "permission denied", this file is not executable. In that case run the command as follows:
-
-/bin/sh ${GRAILS_HOME}/bin/grails init
-
-Then run this command to create the WAR file:
-
-${GRAILS_HOME}/bin/grails war
-
-This application is written against the Servlet 2.3 specifications so should run in any servlet container.
-
-Deploy grails-app.war in you servlet container (for most containers this mean copying the file in the webapps folder).
-
-Browse to http://<server_address>:<server_port>/books/books to test the application. You can also rename the WAR file to use another context path.
-
-Please post a message on the Grails mailing list if you experience any problems running this sample application.
-
-Steven
-
-ALTERNATIVE
-===========
-
-With a Groovy installation in place, you can build, run, and test the grails book sample by running
- groovy build.groovy
-To make this happen, you need
-- a webserver installation like tomcat (recommended: tomcat 5)
-- a download of Canoo WebTest from http://webtest.canoo.com/webtest/build.zip
-  to a directory that is referred to as WEBTEST_HOME
-Getting the classpath for testing right, requires a bit of work.
-- adapt your GROOVY_HOME/conf/groovy_classworlds.conf to include your
-  ${user.home}/.groovy/lib dir
-- copy all jar files from WEBTEST_HOME/lib and its subdirs to
-  ${user.home}/.groovy/lib (i.e. 'flat')
-- adapt the settings in build.properties to your personal needs
-  when using with tomcat 5 make sure to copy 
-  TOMCAT_HOME/server/catalina_ant.jar to ${user.home}/.groovy/lib
-
-[todo: provide an installer script]
-
-After running 'groovy build.groovy' successfully you find the test reports
-in tmp/webtest/results/WebTestResults.html
-When running on windows, this file will be automatically opened for you
-in your default browser.
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/WebTest.groovy b/groovy/modules/grails/samples/books/WebTest.groovy
deleted file mode 100644
index 4e36397..0000000
--- a/groovy/modules/grails/samples/books/WebTest.groovy
+++ /dev/null
@@ -1,99 +0,0 @@
-// Superclass skeleton for fuctional test like BooksTest.
-// Subclasses must implement the suite() method.
-
-// todo: maybe make a selfrunning psvm
-
-abstract class WebTest {
-
-    @Property grailsHome
-    @Property props
-    @Property ant = new AntBuilder()
-
-    def webtestHome
-    public Map configMap
-  
-
-    abstract void suite()
-
-    void runTests (){
-        initWebTestHome()                
-        initConfigMap()
-        prepare()
-        
-        suite()
-
-        style()
-    }
-
-    void webtest(String name, Closure yield){
-        ant.testSpec(name:name){
-            config(configMap)
-            steps(){
-                yield.delegate = ant
-                yield()
-            }
-        }
-    }
-
-    // try to get from build.properties, environment variable, grailsHome/downloads/webtest
-    def initWebTestHome() {
-        webtestHome = props.webtestHome
-        if (! webtestHome) {
-            webtestHome = props.'env.WEBTEST_HOME'
-        }
-        if (! webtestHome) {
-            webtestHome = grailsHome + '/downloads/webtest'
-        }
-        println "webtestHome is <$webtestHome>"
-    }
-
-   // prepare a configmap based on build.properties
-    def initConfigMap () {
-        def configMap = [:]
-        def prefix = 'webtest_'
-        props.keySet().each{ name ->
-            if (name.startsWith(prefix)) configMap.put(name - prefix, props[name])
-        }
-    }
-
-    // prepare the ant taskdef, classpath and filesystem for reporting
-    void prepare() {        
-        def rootLoader = this.class.classLoader.rootLoader
-        if (rootLoader) {
-            def loadDir = new File("$webtestHome/lib/")
-            rootLoader.addURL(loadDir.toURL())
-            loadDir.eachFileMatch(~/.*\.jar$/){
-                rootLoader.addURL(it.toURL())
-            }
-        } else {
-            println 'No RootLoader, assuming CP set by ANT call.'
-        }
-        ant.taskdef(file:"${webtestHome}/webtestTaskdefs.properties")
-        
-        ant.delete(dir: props.webtest_resultpath)
-        ant.mkdir (dir: props.webtest_resultpath)
-    }
-
-    def style() {
-        ant.style(
-            basedir:    props.webtest_resultpath,
-            destdir:    props.webtest_resultpath,
-            includes:   props.webtest_resultfile,
-            extension:  '.html',
-            style:      webtestHome+'/resources/WebTestReport.xsl'){
-            param(name:'reporttime', expression: new Date().toString())
-            param(name:'title', expression: props.projectName)
-        }
-        // copy resources needed by the html page to the same dir:
-        // the report must be ok too when opened from filesystem (without webserver)
-        ant.copy(todir: props.webtest_resultpath){
-            fileset(dir: webtestHome+'/resources/')
-        }
-        // on windows, start the standard browser on the report file
-        if(! props.'os.name'?.contains('Windows')) return
-        def reportHtml = "$props.webtest_resultpath/$props.webtest_resultfile" - '.xml' + '.html'
-        def filename = new java.io.File(reportHtml).canonicalPath
-        println "opening: $filename"
-        "cmd /c $filename".execute()
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/WebTest.xml b/groovy/modules/grails/samples/books/WebTest.xml
deleted file mode 100644
index 459c788..0000000
--- a/groovy/modules/grails/samples/books/WebTest.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<!--
-Set WEBTEST_HOME to the Canoo WebTest root directory.
-Run this test with this command:
-      ant -f WebTest.xml	
--->
-<project name="TestBooks" default="main">
-	<property environment="env"/>
-	
-	<fail unless="env.WEBTEST_HOME" message="WEBTEST_HOME is not defined"/>
-	
-	<taskdef file="${env.WEBTEST_HOME}/webtestTaskdefs.properties">
-		<classpath>
-			<fileset dir="${env.WEBTEST_HOME}" includes="lib/*.jar"/>
-		</classpath>
-	</taskdef>
-	
-	<target name="main">
-		<testSpec name="testBooks">
-			<config
-				host="localhost"
-				port="8080"
-				protocol="http"
-				basepath="grails-app/app"/>
-				<steps>
-					<invoke url="books"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="detail1" description="button: detail1"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<verifyInputField name="id" value="1" description="book.id=1"/>
-					<verifyInputField name="title" value="The Da Vinci Code" description="book.title=The Da Vinci Code"/>
-					<verifyInputField name="author" value="Dan Brown" description="book.author=Dan Brown"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="detail2" description="button: detail2"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<verifyInputField name="id" value="2" description="book.id=2"/>
-					<verifyInputField name="title" value="Deception Point" description="book.title=Deception Point"/>
-					<verifyInputField name="author" value="Dan Brown" description="book.author=Dan Brown"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="detail3" description="button: detail3"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<verifyInputField name="id" value="3" description="book.id=3"/>
-					<verifyInputField name="title" value="Digital Fortress" description="book.title=Digital Fortress"/>
-					<verifyInputField name="author" value="Dan Brown" description="book.author=Dan Brown"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="detail4" description="button: detail4"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<verifyInputField name="id" value="4" description="book.id=4"/>
-					<verifyInputField name="title" value="Angels And Demons" description="book.title=Angels And Demons"/>
-					<verifyInputField name="author" value="Dan Brown" description="book.author=Dan Brown"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="addbook" description="button: addbook"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<setInputField name="title" value="Expert One-to-One J2EE Development without EJB" description="set title"/>
-					<setInputField name="author" value="Rod Johnson" description="set author"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="detail5" description="button: detail5"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<verifyInputField name="id" value="5" description="book.id=5"/>
-					<verifyInputField name="title" value="Expert One-to-One J2EE Development without EJB" 
-						description="book.title=Expert One-to-One J2EE Development without EJB"/>
-					<verifyInputField name="author" value="Rod Johnson" description="book.author=Rod Johnson"/>
-					<clickButton htmlId="save"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-					<clickButton htmlId="addbook" description="button: addbook"/>
-					<verifyTitle text="Book detail" description="title=Book detail"/>
-					<clickButton htmlId="close" description="button: close"/>
-					<verifyTitle text="Book list" description="title=Book list"/>
-				</steps>
-		</testSpec>
-	</target>
-</project>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/build.groovy b/groovy/modules/grails/samples/books/build.groovy
deleted file mode 100644
index 8dc2f7a..0000000
--- a/groovy/modules/grails/samples/books/build.groovy
+++ /dev/null
@@ -1,110 +0,0 @@
-// General buildfile for the project in that's root this file is located.
-// Obeys the environment variable 'GRAILS_HOME'.
-// Adapt build.properties to you personal needs.
-// Start with argument 'test' to only run the tests without build/deploy/restart
-
-ant = new AntBuilder()
-ant.property(file:          'build.properties')
-ant.property(environment:   'env')
-props = ant.antProject.properties
-
-grailsHome = initGrailsHome()
-
-if (args.toList().contains('test')){
-    startTests()
-    return
-}
-/*
-withJetty { startTests() }
-*/
-
-warApplication()
-deploy()
-
-withServer {
-    startTests()
-}
-
-
-
-
-// method implementations ---------------------------------
-
-String initGrailsHome () {
-    def grailsHome = props.grailsHome
-    if (! grailsHome) {
-        grailsHome = props.'env.GRAILS_HOME'
-    }
-    println "grailsHome is <$grailsHome>"
-    return grailsHome
-}
-
-def startTests(){
-    new BooksTest(grailsHome:grailsHome, props:ant.antProject.properties).runTests()
-}
-
-// call the general 'war' target and 'init' only if needed
-String warApplication () {
-    buildFile = grailsHome + '/src/grails/build.xml'
-
-    if ( ! new java.io.File('tmp').exists()) {
-        ant.ant(antfile: buildFile, target:'init')
-    }
-    ant.ant(antfile:buildFile, target:'war')
-    return grailsHome
-}
-
-def deploy () {
-    targetDir = "$props.serverDir/$props.serverWebappDir"
-    ant.copy(file:'grails-app.war', todir: targetDir)
-}
-
-def withServer (Closure yield) {
-    if (props.serverDir =~ /\b5./) {
-        withTomcat5(yield)
-        return
-    }
-    withUnknownServer(yield)
-}
-
-def unknownServer (String command, boolean doPrint) {
-    def filename = 'server-out.txt'
-    ant.exec(dir: props.serverDir, executable: props.executable, output: filename,
-        searchpath: true ){
-        arg(line: command)
-    }
-    if (doPrint) println new java.io.File(filename).text
-}
-def withUnknownServer (Closure yield) {
-    unknownServer(props.serverStopCommand, false)
-    Thread.start { unknownServer(props.serverStartCommand, true) }
-    sleep 10     // wait for server startup
-    yield()
-    unknownServer(props.serverStopCommand, true)
-}
-
-def tomcat (String command) {
-    ant.ant(antfile:grailsHome + '/tomcat.xml', target:command){
-        property(name:'build', value:'./')
-        property(name:'username', value:props.serverAdminUsername)
-        property(name:'password', value:props.serverAdminPassword)
-    }
-}
-def withTomcat5 (Closure yield) {
-    ant.echo(message:'*** tomcat is assumed to be running')
-    try { tomcat('undeploy') } catch (Exception mayNotYetBeThere){}
-    tomcat('deploy')
-    ant.echo(message:'tomcat deployment done')
-    yield()
-}
-
-def withJetty (Closure yield) {
-    def server   = new org.mortbay.jetty.Server()
-    def listener = new org.mortbay.http.SocketListener()
-    listener.setPort(8080);
-    server.addListener(listener)
-    server.addWebApplication("/.","books.war")
-    server.start()
-        Thread.start { yield() }
-    server.stop()
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/build.properties b/groovy/modules/grails/samples/books/build.properties
deleted file mode 100644
index 82cebc4..0000000
--- a/groovy/modules/grails/samples/books/build.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-projectName                 = The books project
-
-executable                  = cmd.exe
-
-webtest_host                = localhost
-webtest_port                = 8080
-webtest_protocol            = http
-webtest_basepath            = books
-
-webtest_summary             = true
-webtest_saveresponse        = true
-webtest_resultpath          = tmp/webtest/results
-webtest_resultfile          = WebTestResults.xml
-webtest_haltonerror         = false
-webtest_errorproperty       = webTestError
-webtest_haltonfailure       = false
-webtest_failureproperty     = webTestFailure
-webtest_showhtmlparseroutput= true
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/grails-app/controllers/BooksPageFlow.groovy b/groovy/modules/grails/samples/books/grails-app/controllers/BooksPageFlow.groovy
deleted file mode 100644
index 91fc959..0000000
--- a/groovy/modules/grails/samples/books/grails-app/controllers/BooksPageFlow.groovy
+++ /dev/null
@@ -1,270 +0,0 @@
-import grails.pageflow.*;
-import java.util.*;
-
-// todo: class name doesn't match filename (?)
-class BooksPageFlow {
-
-    final String BOOK_DETAIL_KEY        = 'bookDetail'
-    final String BOOK_SEQUENCE_NO_KEY   = 'bookSequence'
-    final String BOOK_COLLECTION_KEY    = 'books'
-    final String AUTHOR_SEQUENCE_NO_KEY = 'authorSequence'
-    final String AUTHOR_COLLECTION_KEY = 'authors'
-    final String SUCCESS_TOKEN          = 'success'
-	final Author DAN_BROWN = new Author(id:1, name:'Dan Brown')
-
-    Map bookDetailFormAction = [
-        class:  BookDetailCommand.class,
-        name:   BOOK_DETAIL_KEY,
-        validator: { target, errors -> }
-    ]
-
-    Map bookDetailFormActionScope = [
-        class:  BookDetailCommand.class,
-        name:   BOOK_DETAIL_KEY,
-        scope: 'flow'
-    ]
-
-
-    Closure loadBooks = { requestContext ->
-        requestContext.flowScope[BOOK_COLLECTION_KEY] = [
-            new Book(id:1, title:'The Da Vinci Code',   author:DAN_BROWN),
-            new Book(id:2, title:'Deception Point',     author:DAN_BROWN),
-            new Book(id:3, title:'Digital Fortress',    author:DAN_BROWN),
-            new Book(id:4, title:'Angels And Demons',   author:DAN_BROWN)
-        ]
-        requestContext.flowScope[BOOK_SEQUENCE_NO_KEY] = 4
-        requestContext.flowScope[AUTHOR_COLLECTION_KEY] = [ DAN_BROWN ]
-        requestContext.flowScope[AUTHOR_SEQUENCE_NO_KEY] = 1
-        return SUCCESS_TOKEN
-    }
-
-// Calling this closure from findBook doesn't work, don't know why
-// groovy.lang.MissingMethodException: No signature of method BooksPageFlow$_closure3.getBooks() is applicable for argument types: [...]
-    Closure getBooks = { requestContext ->
-       return getBooks(requestContext)
-    }
-
-	def getBooks(requestContext) {
-		return requestContext.flowScope[BOOK_COLLECTION_KEY]
-	}
-
-    Closure findBook = { requestContext ->
-        def bookCommand = requestContext.requestScope[BOOK_DETAIL_KEY]
-        def book = getBooks(requestContext).find{it.id == bookCommand.id}
-        if (book) {
-            println('Found book id:' + book.id)
-            bookCommand.title = book.title
-            bookCommand.author = book.author
-        }
-        return SUCCESS_TOKEN
-        // todo: what about error token when no book found?
-    }
-
-    // todo: this is same logic as findBook (?)
-    Closure saveBook = { requestContext ->
-        def bookCommand = requestContext.requestScope[BOOK_DETAIL_KEY]
-    	def book = getBooks(requestContext).find{it.id == bookCommand.id}
-        if (book) {
-            println('Saving book id:' + book.id)
-            book.title = bookCommand.title
-            book.author = bookCommand.author
-        }
-        return SUCCESS_TOKEN
-    }
-
-// Calling this closure from addBook doesn't work, don't know why.
-// groovy.lang.MissingMethodException: No signature of method BooksPageFlow$_closure6.getSequence() is applicable for argument types: [...]
-//	Closure getSequence = { requestContext ->
-//        def sequence = requestContext.flowScope[BOOK_SEQUENCE_NO_KEY]
-//        sequence++
-//        requestContext.flowScope[BOOK_SEQUENCE_NO_KEY] = sequence
-//		return sequence
-//	}
-
-	def getSequence(requestContext) {
-        def sequence = requestContext.flowScope[BOOK_SEQUENCE_NO_KEY]
-        sequence++
-        requestContext.flowScope[BOOK_SEQUENCE_NO_KEY] = sequence
-		return sequence
-	}
-
-    Closure addBook = { requestContext ->
-    	def sequence = getSequence(requestContext)
-        def bookCommand = requestContext.requestScope[BOOK_DETAIL_KEY]
-        def title = bookCommand.title
-        def author = bookCommand.author
-        Book book = new Book(id:sequence, title:title, author:author)
-        requestContext.flowScope[BOOK_COLLECTION_KEY].add(book)
-        return SUCCESS_TOKEN
-    }
-
-    @Property grails.pageflow.Flow flow = new PageFlowBuilder().flow {
-        loadBooks(action:loadBooks) {
-            success('listBooks')
-        }
-        listBooks(view:'listBooks', model:[books:getBooks]) {
-            detail('bookDetailBind')
-            addBook('addBookViewBind')
-            endNoView('endNoView')
-            endView('endView')
-        }
-        bookDetailBind(action:bookDetailFormAction) {
-            success('bookDetailFind')
-        }
-        bookDetailFind(action:findBook) {
-            success('bookDetailView')
-        }
-        bookDetailView(view:'bookDetail') {
-            close('listBooks')
-            save('saveBookDetailBind')
-            select('selectAuthorBind')
-        }
-        saveBookDetailBind(action:bookDetailFormAction) {
-            success('saveBookDetail')
-        }
-        saveBookDetail(action:saveBook) {
-            success('bookDetailView')
-        }
-        addBookViewBind(action:bookDetailFormAction) {
-            success('addBookView')
-        }
-        addBookView(view:'bookDetail') {
-            save('addBookBind')
-            close('listBooks')
-            select('selectAuthorBind')
-        }
-        addBookBind(action:bookDetailFormAction) {
-            success('addBook')
-            error('addBookView')
-        }
-        addBook(action:addBook) {
-            success('listBooks')
-        }
-        selectAuthorBind(action:bookDetailFormActionScope) {
-        	success('selectAuthor')
-        }
-        selectAuthor(
-        	subflow:'authors',
-        	input:{ ctx -> 
-        		[ 
-        			authors:ctx.flowScope[AUTHOR_COLLECTION_KEY],
-        			authorSequence:ctx.flowScope[AUTHOR_SEQUENCE_NO_KEY] 
-        		] 
-        	},
-        	output:{ ctx -> 
-        		[
-        			selectedAuthor:ctx.requestScope['selectedAuthor'],
-        			AUTHOR_SEQUENCE_NO_KEY:ctx.flowScope['authorSequence'],
-        			AUTHOR_COLLECTION_KEY:ctx.flowScope['authors']
-        		] 
-        }) {
-        	end('bindSelectedAuthor')
-        }
-        bindSelectedAuthor(
-        	action:{ ctx -> 
-        		ctx.flowScope[BOOK_DETAIL_KEY].author = ctx.flowScope['selectedAuthor']
-        		ctx.requestScope[BOOK_DETAIL_KEY] = ctx.flowScope[BOOK_DETAIL_KEY]
-        		return SUCCESS_TOKEN 
-        }) {
-        	success('returnToDetailView')
-        }
-        returnToDetailView(action:{ ctx -> if (ctx.requestScope[BOOK_DETAIL_KEY].id > 0) { return 'edit' } else { return 'add' } }) {
-        	edit('bookDetailView')
-        	add('addBookView')
-        }
-        endNoView()
-        endView(view:'end',end:true)
-    }
-}
-
-class Book {
-    @Property int id
-    @Property String title
-    @Property Author author
-}
-
-class BookDetailCommand {
-    @Property int id = 0
-    @Property String title
-    @Property Author author = new Author()
-}
-
-class Author {
-	@Property int id = 0;
-	@Property String name;
-}
-
-class AuthorDetailCommand {
-	@Property int id = 0
-	@Property String name
-}
-
-class AuthorsPageFlow {
-
-    final String AUTHOR_COLLECTION_KEY = 'authors'
-    final String SUCCESS_TOKEN          = 'success'
-	final String AUTHOR_DETAIL_KEY = 'authorDetail'
-	final String SELECTED_AUTHOR = 'selectedAuthor'
-
-	Map authorDetailFormAction = [
-		class:AuthorDetailCommand,
-		name:AUTHOR_DETAIL_KEY
-	]
-
-	def getAuthors(requestContext) {
-		return requestContext.flowScope[AUTHOR_COLLECTION_KEY]
-	}
-
-	Closure getAuthors = { requestContext ->
-		return getAuthors(requestContext)
-	}
-
-	def getSequence(requestContext) {
-		def sequence = requestContext.flowScope['authorSequence']
-		sequence++
-		requestContext.flowScope['authorSequence'] = sequence
-		return sequence
-	}
-
-	Closure selectAuthor = { requestContext ->
-		def authorDetail = requestContext.requestScope[AUTHOR_DETAIL_KEY]
-		requestContext.requestScope[SELECTED_AUTHOR] = getAuthors(requestContext).find { it.id == authorDetail.id }
-		return SUCCESS_TOKEN
-	}
-
-	Closure saveAuthor = { requestContext ->
-		def sequence = getSequence(requestContext)
-		def authorDetail = requestContext.requestScope[AUTHOR_DETAIL_KEY]
-		getAuthors(requestContext).add(new Author(id:sequence,name:authorDetail.name))
-		return SUCCESS_TOKEN;
-	}
-
-	@Property boolean accessible = false
-	@Property grails.pageflow.Flow flow = new PageFlowBuilder().flow {
-		listAuthors(view:'listAuthors',model:[authors:getAuthors]) {
-			select('selectAuthorBind')
-			add('addAuthorBind')
-		}
-		selectAuthorBind(action:authorDetailFormAction) {
-			success('selectAuthor')
-		}
-		selectAuthor(action:selectAuthor) {
-			success('end')
-		}
-		addAuthorBind(action:authorDetailFormAction) {
-			success('addAuthorView')
-		}
-		addAuthorView(view:'authorDetail') {
-			close('listAuthors')
-			save('saveNewAuthorBind')			
-		}
-		saveNewAuthorBind(action:authorDetailFormAction) {
-			success('saveNewAuthor')
-			error('addAuthorView')
-		}
-		saveNewAuthor(action:saveAuthor) {
-			success('listAuthors')
-		}
-		end()
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/pageFlow.dot b/groovy/modules/grails/samples/books/pageFlow.dot
deleted file mode 100644
index 0c3fc24..0000000
--- a/groovy/modules/grails/samples/books/pageFlow.dot
+++ /dev/null
@@ -1,30 +0,0 @@
-digraph G {
-    node [shape=box, fontname=Helvetica];
-    {rank=souce; loadBooks}
-	loadBooks -> listBooks [label="success"]
-	listBooks -> bookDetailBind [label="detail"]
-	listBooks -> addBookViewBind [label="addBook"]
-	bookDetailBind -> bookDetailFind [label="success"]
-	bookDetailFind -> bookDetailView [label="success"]
-	bookDetailView -> listBooks [label="close"]
-	bookDetailView -> saveBookDetailBind [label="save"]
-	saveBookDetailBind -> saveBookDetail [label="success"]
-	saveBookDetail -> bookDetailView [label="success"]
-	addBookViewBind -> addBookView [label="success"]
-	addBookView -> addBookBind [label="save"]
-	addBookView -> listBooks [label="close"]
-	addBookBind -> addBook [label="success"]
-	addBookBind -> addBookView [label="error"]
-	addBook -> listBooks [label="success"]
-	loadBooks [label="loadBooks\n action : Closure\l"]
-	listBooks [label="listBooks\n view : listBooks\l model : Map\l",shape=ellipse,style=filled,color=".7 .3 1.0"]
-	bookDetailBind [label="bookDetailBind\n action : Map\l"]
-	bookDetailFind [label="bookDetailFind\n action : Closure\l"]
-	bookDetailView [label="bookDetailView\n view : bookDetail\l",shape=ellipse,style=filled,color=".7 .3 1.0"]
-	saveBookDetailBind [label="saveBookDetailBind\n action : Map\l"]
-	saveBookDetail [label="saveBookDetail\n action : Closure\l"]
-	addBookViewBind [label="addBookViewBind\n action : Map\l"]
-	addBookView [label="addBookView\n view : bookDetail\l",shape=ellipse,style=filled,color=".7 .3 1.0"]
-	addBookBind [label="addBookBind\n action : Map\l method : bindAndValidate\l"]
-	addBook [label="addBook\n action : Closure\l"]
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/pageFlow.png b/groovy/modules/grails/samples/books/pageFlow.png
deleted file mode 100644
index 3535a35..0000000
--- a/groovy/modules/grails/samples/books/pageFlow.png
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/authorDetail.jsp b/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/authorDetail.jsp
deleted file mode 100644
index 869542b..0000000
--- a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/authorDetail.jsp
+++ /dev/null
@@ -1,37 +0,0 @@
-<%@ page import="org.springframework.web.servlet.support.BindStatus"%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
-
-<html>
-   <head>
-      <title>Author detail</title>
-   </head>
-
-   <body>
-      <h1>Author detail</h1>
-      <spring:hasBindErrors name="authorDetail">
-         <c:forEach items="${errors.allErrors}" var="error">
-            <span><c:out value="${error}"/></span>
-         </c:forEach>
-      </spring:hasBindErrors>
-      <form method="POST">
-         <fieldset>
-            <spring:bind path="authorDetail.id">
-               <input type="hidden" name="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>" id="authorId"/>
-            </spring:bind>
-            <label>name</label>
-            <spring:bind path="authorDetail.name">
-               <input type="text" name="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>" id="authorName">
-            </spring:bind>
-            <br>
-            <br>
-            <input type="submit" name="_eventId_save" value="Save" id="save">
-         </fieldset>
-      </form>
-      <form method="POST">
-         <input type="submit" value="Close" name="_eventId_close" id="close">
-      </form>
-   </body>
-</html>
diff --git a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/bookDetail.jsp b/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/bookDetail.jsp
deleted file mode 100644
index 11a79a9..0000000
--- a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/bookDetail.jsp
+++ /dev/null
@@ -1,42 +0,0 @@
-<%@ page import="org.springframework.web.servlet.support.BindStatus"%>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
-
-<html>
-   <head>
-      <title>Book detail</title>
-   </head>
-
-   <body>
-      <h1>Book detail</h1>
-      <spring:hasBindErrors name="bookDetail">
-         <c:forEach items="${errors.allErrors}" var="error">
-            <span><c:out value="${error}"/></span>
-         </c:forEach>
-      </spring:hasBindErrors>
-      <form method="POST">
-         <fieldset>
-            <spring:bind path="bookDetail.id">
-               <input type="hidden" name="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>" id="bookId"/>
-            </spring:bind>
-            <label>title</label>
-            <spring:bind path="bookDetail.title">
-               <input type="text" name="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>" id="bookAuthor">
-            </spring:bind>
-            <br>
-            <label>author</label>
-            <spring:bind path="bookDetail.author.name">
-               <span id="bookTitle"><c:out value="${status.value}"/></span>
-               <input type="submit" name="_eventId_select" value="..." id="select">
-            </spring:bind>
-            <br>
-            <input type="submit" name="_eventId_save" value="Save" id="save">
-         </fieldset>
-      </form>
-      <form method="POST">
-         <input type="submit" value="Close" name="_eventId_close" id="close">
-      </form>
-   </body>
-</html>
diff --git a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/end.jsp b/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/end.jsp
deleted file mode 100644
index 54225bd..0000000
--- a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/end.jsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<title>Page flow ends here</title>
-</head>
-<body>
-<h1>Books example ends here</h1>
-
-<form method="POST">
-<input type="submit" value="restart">
-</form>
-</body>
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listAuthors.jsp b/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listAuthors.jsp
deleted file mode 100644
index 4478189..0000000
--- a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listAuthors.jsp
+++ /dev/null
@@ -1,47 +0,0 @@
-<%@ page
-        import="org.springframework.web.servlet.support.BindStatus" %>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://www.springframework.org/tags"
-           prefix="spring" %>
-
-<html>
-<head>
-    <title>Author list</title>
-</head>
-
-<body>
-<h1>Author list</h1>
-
-<form method="POST">
-<input type="submit" name="_eventId_add" value="Add author ...">
-</form>
-<table>
-    <thead>
-        <tr>
-            <td>Title</td>
-            <td>Author</td>
-            <td>&nbsp;</td>
-        </tr>
-    </thead>
-    <tbody>
-        <c:forEach items="${authors}" var="author">
-            <tr>
-                <td><c:out value="${author.name}"/></td>
-                <td>
-                    <form method="POST">
-                        <input type="hidden" name="id"
-                               value="<c:out value="${author.id}"/>">
-                        <input type="submit"
-                        	   name="_eventId_select"
-                               value="Select"
-                               id="detail<c:out value="${author.id}"/>">
-                    </form>
-                </td>
-            </tr>
-        </c:forEach>
-    </tbody>
-</table>
-</body>
-</html>
diff --git a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listBooks.jsp b/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listBooks.jsp
deleted file mode 100644
index c04305d..0000000
--- a/groovy/modules/grails/samples/books/web-app/WEB-INF/jsp/listBooks.jsp
+++ /dev/null
@@ -1,52 +0,0 @@
-<%@ page
-        import="org.springframework.web.servlet.support.BindStatus" %>
-<%@ page contentType="text/html;charset=UTF-8" language="java" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
-<%@ taglib uri="http://www.springframework.org/tags"
-           prefix="spring" %>
-
-<html>
-<head>
-    <title>Book list</title>
-</head>
-
-<body>
-<h1>Book list</h1>
-
-<form method="POST">
-    <input type="submit" name="_eventId_addBook" value="Add book ..." id="addbook">
-    <input type="submit" name="_eventId_endNoView" value="End (expect exception)">
-    <input type="submit" name="_eventId_endView" value="End">
-</form>
-
-</form>
-<table>
-    <thead>
-        <tr>
-            <td>Title</td>
-            <td>Author</td>
-            <td>&nbsp;</td>
-        </tr>
-    </thead>
-    <tbody>
-        <c:forEach items="${books}" var="book">
-            <tr>
-                <td><c:out value="${book.title}"/></td>
-                <td><c:out value="${book.author.name}"/></td>
-                <td>
-                    <form method="POST">
-                        <input type="hidden" name="id"
-                               value="<c:out value="${book.id}"/>">
-                        <input type="submit"
-                        	   name="_eventId_detail"
-                               value="Details"
-                               id="detail<c:out value="${book.id}"/>">
-                    </form>
-                </td>
-            </tr>
-        </c:forEach>
-    </tbody>
-</table>
-</body>
-</html>
diff --git a/groovy/modules/grails/samples/recipes/README.txt b/groovy/modules/grails/samples/recipes/README.txt
deleted file mode 100644
index 2533c7f..0000000
--- a/groovy/modules/grails/samples/recipes/README.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Hibernate Example
------------------
-
-WARNING: This example requires Java 5.0
-
-This example demonstrates how a class can be mapped with Hibernate and still be treated as a normal Grails domain class. Including the ability to:
-
-- Scaffold the domain class
-- Validate Against constraints
-- Access dynamic methods
-
-The domain class in question can be found in "src/java/com/recipes/Recipe.java" and is mapped using the Hibernate annotation support.
-
-In order for this to work the Grails data source has been configured to use a special GrailsAnnotationConfiguration instance at the line:
-
-   @Property configClass = GrailsAnnotationConfiguration.class
-
-This is only necessary if you use Hibernate annotations, with normal XML Hibernate mapping no extra configuration is needed.
-
-The only remaining thing to be done is the "hibernate.cfg.xml" file is placed within the "hibernate" directory and contains a mapping for the class:
-
-
-<hibernate-configuration>
-    <session-factory>      
-        <mapping package="com.recipes" />
-        <mapping class="com.recipes.Recipe" />
-    </session-factory>
-</hibernate-configuration>
-
-To run the example after installing Grails type:
-
-grails init
-grails run-app
-
-And then in your browser go to:
-
-http://localhost:8080/recipes/recipe/list
diff --git a/groovy/modules/grails/samples/recipes/grails-app/conf/ApplicationDataSource.groovy b/groovy/modules/grails/samples/recipes/grails-app/conf/ApplicationDataSource.groovy
deleted file mode 100644
index 39d6d80..0000000
--- a/groovy/modules/grails/samples/recipes/grails-app/conf/ApplicationDataSource.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration
-
-class ApplicationDataSource {
-   @Property configClass = GrailsAnnotationConfiguration.class
-   @Property boolean pooled = true
-   @Property String dbCreate = "create-drop" // one of 'create', 'create-drop','update'
-   @Property String url = "jdbc:hsqldb:mem:testDB"
-   @Property String driverClassName = "org.hsqldb.jdbcDriver"
-   @Property String username = "sa"
-   @Property String password = ""
-}
diff --git a/groovy/modules/grails/samples/recipes/grails-app/controllers/RecipeController.groovy b/groovy/modules/grails/samples/recipes/grails-app/controllers/RecipeController.groovy
deleted file mode 100644
index c730078..0000000
--- a/groovy/modules/grails/samples/recipes/grails-app/controllers/RecipeController.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-import com.recipes.Recipe
-
-class RecipeController {
-    @Property scaffold = Recipe.class
-}
-
diff --git a/groovy/modules/grails/samples/recipes/grails-tests/RecipeTests.groovy b/groovy/modules/grails/samples/recipes/grails-tests/RecipeTests.groovy
deleted file mode 100644
index e0533bc..0000000
--- a/groovy/modules/grails/samples/recipes/grails-tests/RecipeTests.groovy
+++ /dev/null
@@ -1,12 +0,0 @@
-import com.recipes.Recipe
-
-class RecipeTests extends GroovyTestCase {
-
-	void testDynamicMethods() {
-		def r = new Recipe(title:"Chicken Tikka", description:"Yummy Indian Dish")
-		r.save()
-		
-		r = Recipe.findByTitle("Chicken Tikka")
-		assert r != null
-	}
-}
diff --git a/groovy/modules/grails/samples/recipes/hibernate/hibernate.cfg.xml b/groovy/modules/grails/samples/recipes/hibernate/hibernate.cfg.xml
deleted file mode 100644
index 9ad438d..0000000
--- a/groovy/modules/grails/samples/recipes/hibernate/hibernate.cfg.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-configuration PUBLIC
-		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
-		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
-<hibernate-configuration>
-    <session-factory>      
-        <mapping package="com.recipes" />
-        <mapping class="com.recipes.Recipe" />
-    </session-factory>
-</hibernate-configuration>
diff --git a/groovy/modules/grails/samples/recipes/src/java/com/recipes/Recipe.java b/groovy/modules/grails/samples/recipes/src/java/com/recipes/Recipe.java
deleted file mode 100644
index 078e53a..0000000
--- a/groovy/modules/grails/samples/recipes/src/java/com/recipes/Recipe.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.recipes;
-
-import groovy.lang.IntRange;
-import org.codehaus.groovy.grails.orm.hibernate.validation.ConstrainedPersistentProperty;
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Transient;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Graeme Rocher
- * @since 20-Feb-2006
- */
-@Entity
-public class Recipe {
-    private Long id;
-    private String title;
-    private String description;
-    private Date date;
-
-    @Id
-    @GeneratedValue
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Date getDate() {
-        return date;
-    }
-
-    public void setDate(Date date) {
-        this.date = date;
-    }
-
-    @Transient
-    public Map getConstraints() {
-        ConstrainedProperty titleConstraint = new ConstrainedPersistentProperty(Recipe.class, "title", String.class );
-        titleConstraint.setOrder(1);
-        titleConstraint.setLength(new IntRange(5,15));
-        ConstrainedProperty descConstraint = new ConstrainedPersistentProperty(Recipe.class, "title", String.class );
-        descConstraint.setOrder(2);
-        descConstraint.setWidget("textarea");
-
-
-        Map constraints = new HashMap();
-        constraints.put("title", titleConstraint);
-        constraints.put("description", descConstraint);
-
-        return constraints;
-    }
-}
diff --git a/groovy/modules/grails/src/commons/grails/orm/HibernateCriteriaBuilder.java b/groovy/modules/grails/src/commons/grails/orm/HibernateCriteriaBuilder.java
deleted file mode 100644
index 4cdeacb..0000000
--- a/groovy/modules/grails/src/commons/grails/orm/HibernateCriteriaBuilder.java
+++ /dev/null
@@ -1,738 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.orm;
-
-import grails.util.ExtendProxy;
-import groovy.lang.MissingMethodException;
-import groovy.util.BuilderSupport;
-import groovy.util.Proxy;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.hibernate.Criteria;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Criterion;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
-import org.springframework.orm.hibernate3.SessionHolder;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-
-/**
- * <p>Wraps the Hibernate Criteria API in a builder. The builder can be retrieved through the "createCriteria()" dynamic static 
- * method of Grails domain classes (Example in Groovy): 
- * 
- * <pre>
- * 		def c = Account.createCriteria()
- * 		def results = c {
- * 			like("holderFirstName", "Fred%")
- * 			and {
- * 				between("balance", 500, 1000)
- * 				eq("branch", "London")
- * 			}
- * 			maxResults(10)
- * 			order("holderLastName", "desc")
- * 		}
- * </pre>
- * 
- * <p>The builder can also be instantiated standalone with a SessionFactory and persistent Class instance:
- * 
- * <pre>
- * 	 new HibernateCriteriaBuilder(clazz, sessionFactory).list {
- * 		eq("firstName", "Fred")
- * 	 }
- * </pre>
- * 
- * @author Graeme Rocher
- * @since Oct 10, 2005
- */
-public class HibernateCriteriaBuilder extends BuilderSupport {
-
-	public static final String AND = "and"; // builder
-	public static final String IS_NULL = "isNull"; // builder
-	public static final String IS_NOT_NULL = "notNull"; // builder
-	public static final String NOT = "not";// builder
-	public static final String OR = "or"; // builder
-	public static final String ID_EQUALS = "idEq"; // builder
-	public static final String IS_EMPTY = "isEmpty"; //builder
-	public static final String IS_NOT_EMPTY = "isNotEmpty"; //builder
-	
-	
-	public static final String BETWEEN = "between";//method
-	public static final String EQUALS = "eq";//method	
-	public static final String EQUALS_PROPERTY = "eqProperty";//method
-	public static final String GREATER_THAN = "gt";//method
-	public static final String GREATER_THAN_PROPERTY = "gtProperty";//method
-	public static final String GREATER_THAN_OR_EQUAL = "ge";//method
-	public static final String GREATER_THAN_OR_EQUAL_PROPERTY = "geProperty";//method
-	public static final String ILIKE = "ilike";//method
-	public static final String IN = "in";//method
-	public static final String LESS_THAN = "lt"; //method
-	public static final String LESS_THAN_PROPERTY = "ltProperty";//method
-	public static final String LESS_THAN_OR_EQUAL = "le";//method
-	public static final String LESS_THAN_OR_EQUAL_PROPERTY = "leProperty";//method	
-	public static final String LIKE = "like";//method
-	public static final String NOT_EQUAL = "ne";//method
-	public static final String NOT_EQUAL_PROPERTY = "neProperty";//method
-	public static final String SIZE_EQUALS = "sizeEq"; //method
-	public static final String ORDER_DESCENDING = "desc";
-	public static final String ORDER_ASCENDING = "asc";
-
-
-	private static final String ROOT_CALL = "doCall";
-	private static final String LIST_CALL = "list";
-	private static final String GET_CALL = "get";
-	private static final String SETTER_PREFIX = "set";
-	
-	
-	private SessionFactory sessionFactory;
-	private Session session;
-	private Class targetClass;
-	private Criteria criteria;
-	private boolean uniqueResult = false;
-	private Proxy resultProxy = new ExtendProxy();
-	private Proxy criteriaProxy;
-	private Object parent;
-	private List logicalExpressions = new ArrayList();
-	private List logicalExpressionArgs = new ArrayList();
-	private boolean participate;
-	
-	
-	public HibernateCriteriaBuilder(Class targetClass, SessionFactory sessionFactory) {
-		super();
-		this.targetClass = targetClass;
-		this.sessionFactory = sessionFactory;		
-	}
-	
-	public HibernateCriteriaBuilder(Class targetClass, SessionFactory sessionFactory, boolean uniqueResult) {
-		super();
-		this.targetClass = targetClass;
-		this.sessionFactory = sessionFactory;
-		this.uniqueResult = uniqueResult;
-	}	
-
-	public void setUniqueResult(boolean uniqueResult) {
-		this.uniqueResult = uniqueResult;
-	}
-	
-	/**
-	 * Creates a Criterion that compares to class properties for equality
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object eqProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [eqProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here.") );
-		}		
-		Criterion c = Restrictions.eqProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}
-
-
-	/**
-	 * Creates a Criterion that compares to class properties for !equality
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object neProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [neProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.neProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a Criterion that tests if the first property is greater than the second property
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object gtProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [gtProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.gtProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}
-	/**
-	 * Creates a Criterion that tests if the first property is greater than or equal to the second property
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object geProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [geProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.geProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a Criterion that tests if the first property is less than the second property
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object ltProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [ltProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.ltProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a Criterion that tests if the first property is less than or equal to the second property
-	 * @param propertyName The first property name
-	 * @param otherPropertyName The second property name
-	 * @return A Criterion instance
-	 */
-	public Object leProperty(String propertyName, String otherPropertyName) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [leProperty] with propertyName ["+propertyName+"] and other property name ["+otherPropertyName+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.leProperty( propertyName, otherPropertyName );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a "greater than" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * @return A Criterion instance
-	 */
-	public Object gt(String propertyName, Object propertyValue) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [gt] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.gt( propertyName, propertyValue );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}
-	/**
-	 * Creates a "greater than or equal to" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * @return A Criterion instance
-	 */
-	public Object ge(String propertyName, Object propertyValue) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [ge] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.ge( propertyName, propertyValue );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a "less than" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * @return A Criterion instance
-	 */
-	public Object lt(String propertyName, Object propertyValue) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [lt] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.lt( propertyName, propertyValue );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates a "less than or equal to" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * @return A Criterion instance
-	 */
-	public Object le(String propertyName, Object propertyValue) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [le] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.le( propertyName, propertyValue );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;		
-	}	
-	/**
-	 * Creates an "equals" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object eq(String propertyName, Object propertyValue) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [eq] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.eq( propertyName, propertyValue );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}
-	/**
-	 * Creates a Criterion with from the specified property name and "like" expression
-	 * @param propertyName The property name
-	 * @param value The like value
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object like(String propertyName, Object value) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [like] with propertyName ["+propertyName+"] and value ["+value+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.like( propertyName, value );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}
-	/**
-	 * Creates a Criterion with from the specified property name and "ilike" (a case sensitive version of "like") expression
-	 * @param propertyName The property name
-	 * @param value The ilike value
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object ilike(String propertyName, Object value) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [ilike] with propertyName ["+propertyName+"] and value ["+value+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.ilike( propertyName, value );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}		
-	/**
-	 * Applys a "in" contrain on the specified property 
-	 * @param propertyName The property name
-	 * @param values A collection of values
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object in(String propertyName, Collection values) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [in] with propertyName ["+propertyName+"] and values ["+values+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.in( propertyName, values );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}
-	/**
-	 * Applys a "in" contrain on the specified property 
-	 * @param propertyName The property name
-	 * @param values A collection of values
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object in(String propertyName, Object[] values) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [in] with propertyName ["+propertyName+"] and values ["+values+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.in( propertyName, values );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}
-	
-	/**
-	 * Orders by the specified property name (defaults to ascending)
-	 * 
-	 * @param propertyName The property name to order by
-	 * @return A Order instance
-	 */
-	public Object order(String propertyName) {
-		if(this.criteria == null)
-				throwRuntimeException( new IllegalArgumentException("Call to [order] with propertyName ["+propertyName+"]not allowed here."));
-		
-		Order o = Order.asc(propertyName);
-		this.criteria.addOrder(o);
-		
-		return o;
-	}
-
-	/**
-	 * Orders by the specified property name and direction
-	 * 
-	 * @param propertyName The property name to order by
-	 * @param direction Either "asc" for ascending or "desc" for descending
-	 * 
-	 * @return A Order instance
-	 */
-	public Object order(String propertyName, String direction) {
-		if(this.criteria == null)
-				throwRuntimeException( new IllegalArgumentException("Call to [order] with propertyName ["+propertyName+"]not allowed here."));
-		Order o;
-		if(direction.equals( ORDER_DESCENDING )) {
-			o = Order.desc(propertyName);
-		}
-		else {
-			o = Order.asc(propertyName);
-		}
-		this.criteria.addOrder(o);
-		
-		return o;
-	}	
-	/**
-	 * Creates a Criterion that contrains a collection property by size
-	 * 
-	 * @param propertyName The property name
-	 * @param size The size to constrain by
-	 * 
-	 * @return A Criterion instance
-	 */
-	public Object sizeEq(String propertyName, int size) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [sizeEq] with propertyName ["+propertyName+"] and size ["+size+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.sizeEq( propertyName, size );
-		
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}		
-		return c;
-	}	
-	
-	/**
-	 * Creates a "not equal" Criterion based on the specified property name and value
-	 * @param propertyName The property name
-	 * @param propertyValue The property value
-	 * @return
-	 */
-	public Object ne(String propertyName, Object propertyValue) {		
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [ne] with propertyName ["+propertyName+"] and value ["+propertyValue+"] not allowed here."));
-		}		
-		Criterion c = Restrictions.ne( propertyName, propertyValue );
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}
-		return c;
-	}	
-
-	/**
-	 * Creates a "between" Criterion based on the property name and specified lo and hi values
-	 * @param propertyName The property name
-	 * @param lo The low value
-	 * @param hi The high value
-	 * @return A Criterion instance
-	 */
-	public Object between(String propertyName, Object lo, Object hi) {
-		if(!validateSimpleExpression()) {
-			throwRuntimeException( new IllegalArgumentException("Call to [between] with propertyName ["+propertyName+"]  not allowed here."));
-		}		
-		Criterion c = Restrictions.between( propertyName, lo,hi);
-		if(isInsideLogicalExpression()) {
-			this.logicalExpressionArgs.add(c);
-		}else {
-			this.criteria.add(c);
-		}
-		return c;		
-	}
-	
-	protected Object createNode(Object name) {
-		return createNode( name, Collections.EMPTY_MAP );
-	}
-
-	private boolean validateSimpleExpression() {
-		if(this.criteria == null)
-			return false;
-				
-		if(!isInsideLogicalExpression() &&
-		   !(this.parent instanceof Proxy) &&
-		   this.parent != null)
-				return false;
-		
-		return true;
-	}
-	
-	private boolean isInsideLogicalExpression() {
-		if(this.logicalExpressions.size() > 0) {
-			String currentLogicalExpression = (String)this.logicalExpressions.get( this.logicalExpressions.size() - 1 );
-			if(currentLogicalExpression.equals( AND ) ||
-			   currentLogicalExpression.equals( OR ) ||
-			   currentLogicalExpression.equals( NOT ))
-					return true;
-		}
-		return false;
-	}
-	
-	protected Object createNode(Object name, Map attributes) {		
-		if(name.equals(ROOT_CALL) || name.equals(LIST_CALL) || name.equals(GET_CALL)) {
-			
-			if(this.criteria != null)
-				throwRuntimeException( new IllegalArgumentException("call to [" + name + "] not supported here"));
-				
-			if(name.equals(GET_CALL))
-				this.uniqueResult = true;
-			
-			if(TransactionSynchronizationManager.hasResource(sessionFactory)) {
-				this.participate = true;
-				this.session = ((SessionHolder)TransactionSynchronizationManager.getResource(sessionFactory)).getSession();
-			}
-			else {
-				this.session = sessionFactory.openSession();
-			}
-			this.criteria = this.session.createCriteria(targetClass);
-			this.criteriaProxy = new ExtendProxy();
-			this.criteriaProxy.setAdaptee(this.criteria);
-			this.parent = resultProxy;
-						
-			return resultProxy;
-		} else if(name.equals( AND ) ||
-				  name.equals( OR ) ||
-				  name.equals( NOT )) {
-			if(this.criteria == null)
-				throwRuntimeException( new IllegalArgumentException("call to [" + name + "] not supported here"));
-			
-			this.logicalExpressions.add(name);
-			return name;
-		}
-		closeSessionFollowingException();
-		throw new MissingMethodException((String) name, getClass(), new Object[] {}) ;		
-	}	
-	
-
-	protected void nodeCompleted(Object parent, Object node) {
-		if(node instanceof Proxy) {
-			if(!uniqueResult) {
-				resultProxy.setAdaptee(
-						this.criteria.list()
-				);
-			}
-			else {
-				resultProxy.setAdaptee(
-						this.criteria.uniqueResult()
-				);
-			}
-			this.criteria = null;
-			if(!this.participate) {
-				this.session.close();
-			}
-		}		
-		else if(node.equals( AND ) ||
-				node.equals( OR )) {
-			
-			if(this.logicalExpressionArgs.size() < 2)
-				throwRuntimeException( new IllegalArgumentException("Logical expression [" + node +"] must contain at least 2 expressions"));
-			
-			Criterion lhs = (Criterion)this.logicalExpressionArgs.remove(this.logicalExpressionArgs.size() - 1);
-			Criterion rhs = (Criterion)this.logicalExpressionArgs.remove(this.logicalExpressionArgs.size() - 1);
-			
-			if(parent instanceof Proxy) {
-				if(node.equals( AND ))
-					this.criteria.add( Restrictions.and( lhs, rhs ) );
-				else
-					this.criteria.add( Restrictions.or( lhs, rhs ) );
-			}
-			else if(parent.equals( AND ) ||
-					parent.equals( OR )) {
-				
-				if(node.equals( AND ))
-					this.logicalExpressionArgs.add( Restrictions.and( lhs, rhs ) );
-				else
-					this.logicalExpressionArgs.add( Restrictions.or( lhs, rhs ) );
-				
-				this.logicalExpressions.remove(this.logicalExpressions.size() - 1);
-			}
-		}
-		else if(node.equals(NOT)) {
-			if(this.logicalExpressionArgs.size() < 1)
-				throwRuntimeException( new IllegalArgumentException("Logical expression [" + node +"] must contain at least 1 expression"));
-			
-			Criterion c = (Criterion)this.logicalExpressionArgs.remove(this.logicalExpressionArgs.size() - 1);
-			
-			if(parent instanceof Proxy) {
-				this.criteria.add( Restrictions.not( c ) );
-			}
-			else if(parent.equals( AND ) ||
-					parent.equals( OR ) ||
-					parent.equals( NOT )) {
-				this.logicalExpressionArgs.add( Restrictions.not( c ) );
-				this.logicalExpressions.remove(this.logicalExpressions.size() - 1);
-			}			
-		}
-		super.nodeCompleted(parent, node);
-	}
-
-	/**
-	 * Throws a runtime exception where necessary to ensure the session gets closed
-	 */
-	private void throwRuntimeException(RuntimeException t) {
-		closeSessionFollowingException();
-		throw t;
-	}
-	
-	private void closeSessionFollowingException() {
-		if(this.session != null && this.session.isOpen() && !this.participate) {
-			this.session.close();
-		}
-		if(this.criteria != null) {
-			this.criteria = null;
-		}				
-	}
-	
-	protected void setParent(Object parent, Object child) {
-		this.parent = parent;
-	}
-
-	protected Object createNode(Object name, Object value) {
-		return createNode(name, Collections.EMPTY_MAP, value);
-	}
-	
-	protected Object createNode(Object name, Map attributes, Object value) {
-		if(this.criteria == null)
-			throwRuntimeException( new IllegalArgumentException("call to [" + name + "] not supported here"));
-		
-		Criterion c = null;		
-		if(name.equals(ID_EQUALS)) {
-			c = Restrictions.idEq(value);
-		}
-		else {
-			
-			if(	name.equals( IS_NULL ) ||
-				name.equals( IS_NOT_NULL ) ||	
-				name.equals( IS_EMPTY ) ||
-				name.equals( IS_NOT_EMPTY )) {
-				if(!(value instanceof String))
-					throwRuntimeException( new IllegalArgumentException("call to [" + name + "] with value ["+value+"] requires a String value."));
-				
-				if(name.equals( IS_NULL )) {				
-					c = Restrictions.isNull( (String)value ) ;	
-				}
-				else if(name.equals( IS_NOT_NULL )) {
-					c = Restrictions.isNotNull( (String)value );
-	
-				}
-				else if(name.equals( IS_EMPTY )) {
-					c = Restrictions.isEmpty( (String)value );
-					this.criteria.add( c );			
-				}
-				else if(name.equals( IS_NOT_EMPTY )) {
-					c = Restrictions.isNotEmpty( (String)value );
-					this.criteria.add( c );			
-				}		
-			}
-		}
-		if(c != null) {
-			if(isInsideLogicalExpression()) {
-				this.logicalExpressionArgs.add(c);
-			}
-			else {
-				this.criteria.add( c );
-			}
-			return c;
-		}
-		else {
-			String nameString = (String)name;
-			nameString = SETTER_PREFIX + nameString.substring(0,1).toUpperCase() + nameString.substring(1);
-			if(parent instanceof Proxy) {
-					try {
-						criteriaProxy.invokeMethod(nameString, value);
-						return this.criteria;
-					}
-					catch(MissingMethodException mme) {
-						throwRuntimeException( new MissingMethodException(nameString, getClass(), new Object[] {value}) );
-					}
-			}
-			throwRuntimeException( new MissingMethodException(nameString, getClass(), new Object[] {value}));
-		}
-		return c;
-	}
-
-}
-
diff --git a/groovy/modules/grails/src/commons/grails/pageflow/Flow.java b/groovy/modules/grails/src/commons/grails/pageflow/Flow.java
deleted file mode 100644
index c8485fc..0000000
--- a/groovy/modules/grails/src/commons/grails/pageflow/Flow.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.springframework.core.style.ToStringCreator;
-import org.springframework.util.Assert;
-
-/**
- * <p>Simple container class for a page flow.
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class Flow {
-
-	private List states = null;
-	
-	public Flow() {
-		super();
-		this.states = new ArrayList();
-	}
-
-	public void addState(State state) {
-		Assert.notNull(state);
-		for (Iterator iter = this.states.iterator(); iter.hasNext();) {
-			State tmpState = (State)iter.next();
-			if (tmpState.getId().equals(state.getId())) {
-				throw new IllegalArgumentException("Flow already has a state with id [" + tmpState.getId() + "]!");
-			}
-		}
-		this.states.add(state);
-	}
-	
-	public List getStates() {
-		return this.states;
-	}
-	
-	public String toString() {
-		return new ToStringCreator(this).append(this.states).toString();
-	}
-}
diff --git a/groovy/modules/grails/src/commons/grails/pageflow/PageFlowBuilder.java b/groovy/modules/grails/src/commons/grails/pageflow/PageFlowBuilder.java
deleted file mode 100644
index 509cd72..0000000
--- a/groovy/modules/grails/src/commons/grails/pageflow/PageFlowBuilder.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import groovy.util.BuilderSupport;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * <p>Builder to create a page flow configuration.
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class PageFlowBuilder extends BuilderSupport {
-
-	private static final String FLOW = "flow";
-	
-	public PageFlowBuilder() {
-		super();
-	}
-
-	protected void setParent(Object parent, Object child) {
-		if (parent == null) {
-			return;
-		}
-		if (parent instanceof Flow && child instanceof State) {
-			((Flow)parent).addState((State)child);
-		} else if (parent instanceof State && child instanceof Transition) {
-			((State)parent).addTransition((Transition)child);
-		} else {
-			throw new IllegalArgumentException("No parent/child relationship between classes [" + parent.getClass().getName() + "] (parent) and [" + child.getClass().getName() + "] (child)!");
-		}
-	}
-
-	protected Object createNode(Object name) {
-		if (FLOW.equals(name) && getCurrent() == null) {
-			return new Flow();
-		} else if (getCurrent() instanceof Flow) {
-			return new State((String)name, new HashMap());
-		} else {
-			throw new IllegalArgumentException("call to [" + name + "] without attributes is not supported!");
-		}
-	}
-
-	protected Object createNode(Object name, Object value) {
-		if (getCurrent() == null) {
-			throw new IllegalArgumentException("call to [" + name + "] with value [" + value + "] is not supported!");
-		} else if (getCurrent() instanceof Flow) {
-			throw new IllegalArgumentException("State [" + name + "] requires one of these attributes: [action, view, decision, subflow]!");
-		} else if (getCurrent() instanceof State && !((State)getCurrent()).isEndState()) {
-			if (value == null) {
-				throw new IllegalArgumentException("Target state id is required as value for transition [" + name + "], state [" + ((State)getCurrent()).getId() + "]!");
-			} else if (!(value instanceof String)) {
-				throw new IllegalArgumentException("Target state id must be a string value for transition [" + name + "], state [" + ((State)getCurrent()).getId() + "]!");
-			} else {
-				return new Transition((State)getCurrent(), name.toString(), value.toString());
-			}
-		} else if (getCurrent() instanceof State && ((State)getCurrent()).isEndState()) {
-			throw new IllegalArgumentException("No transitions allowed for end state [" + ((State)getCurrent()).getId() + "]!");
-		} else {
-			throw new IllegalArgumentException("[" + name +"] not allowed as child!");
-		}
-	}
-
-	protected Object createNode(Object name, Map attributes) {
-		if (getCurrent() == null) {
-			throw new IllegalArgumentException("Call to [" + name + "] with attributes [" + attributes + "] is not supported!");
-		} else if (getCurrent() instanceof Flow) {
-			if (StringUtils.isBlank((String)name)) {
-				throw new IllegalArgumentException("State id is required!");
-			}
-			return new State((String)name, attributes);
-		} else if (getCurrent() instanceof State) {
-			throw new IllegalArgumentException("Call to [" + name + "] with attributes is not allowed!");
-		} else {
-			throw new IllegalArgumentException("[" + name + "] not allowed a child!");
-		}
-	}
-
-	protected Object createNode(Object name, Map attributes, Object value) {
-		throw new IllegalArgumentException("Call to [" + name + "] with attributes and value is not allowed!");
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/grails/pageflow/State.java b/groovy/modules/grails/src/commons/grails/pageflow/State.java
deleted file mode 100644
index 46d1d9f..0000000
--- a/groovy/modules/grails/src/commons/grails/pageflow/State.java
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import groovy.lang.Closure;
-
-import java.lang.String;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.core.style.ToStringCreator;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
-import org.springframework.webflow.Action;
-import org.springframework.webflow.FlowAttributeMapper;
-import org.springframework.webflow.RequestContext;
-
-/**
- * <p>Simple container object for a state in a page flow.
- * 
- * <p>This class can map a view state, an action state, a sub flow state
- * or a decision state.
- * 
- * <p>One and only one of the following fields must be set, otherwise
- * the state will be regarded as an end state:
- * 
- * <ul>
- * <li>{@link #action}
- * <li>{@link #actionClass}
- * <li>{@link #actionClosure}
- * <li>{@link #actionFormDetails}
- * <li>{@link #viewName}
- * <li>{@link #viewClosure}
- * <li>{@link #decisionExpression}
- * <li>{@link #decisionClosure}
- * <li>{@link #subFlowId}
- * </ul>
- * 
- * <p>In case one of the {@link #isActionState()}, {@link #isViewState()}, {@link #isDecisionState()} or
- * {@link #isSubflowState()} methods is called before calling the {@link #validate()} method the  result
- * of those methods may be incorrect.
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class State {
-
-	private static final String ACTION = "action";
-	private static final String VIEW = "view";
-	private static final String DECISION = "decision";
-	private static final String SUBFLOW = "subflow";
-	private static final String PROPERTIES = "properties";
-	private static final String MODEL = "model";
-	private static final String INPUT = "input";
-	private static final String OUTPUT = "output";
-	private static final String MAPPER = "mapper";
-	private static final String TRUE_STATE = "trueState";
-	private static final String FALSE_STATE = "falseState";
-	private static final String METHOD = "method";
-	private static final String END = "end";
-	
-	/**
-	 * <p>Class that implements org.springframework.webflow.Action
-	 * or has an non-abstract execute method that takes a
-	 * RequestContext parameter and returns either String or
-	 * org.springframework.webflow.Event. The class should have
-	 * a public no-arg constructor. A new instance of this class
-	 * will be created as used as action handler.
-	 * 
-	 * <p>{@link #actionProperties} will be used to set the properties
-	 * of the action instance. If {@link #actionProperties} contains
-	 * properties names that are not available on the action class
-	 * an exception will be thrown.
-	 */
-	private Class actionClass = null;
-	
-	/**
-	 * <p>A org.springframework.webflow.Action instance that will
-	 * be used as action handler.
-	 * 
-	 * <p>{@link #actionProperties} will not be used to set the
-	 * properties of this instance.
-	 * 
-	 */
-	private Action action = null;
-	
-	/**
-	 * <p>A closure that will handle the action logic.
-	 * 
-	 * <p>The closure can have one parameter, the
-	 * {@link org.springframework.webflow.RequestContext}
-	 * instance.
-	 */
-	private Closure actionClosure = null;
-	
-	/**
-	 * <p>Delegates action handling to {@link org.springframework.webflow.action.FormAction}.
-	 * 
-	 * <p>This is a convenience notation for the combination of {@link #actionClass} and
-	 * {@link #actionProperties}.
-	 * 
-	 * <p>All properties available on {@link org.springframework.webflow.action.FormAction} can
-	 * be specified in the map.
-	 */
-	private Map actionFormDetails = null;
-	
-	/**
-	 * <p>Holds properties names and values for instances of {@link #actionProperties}.
-	 */
-	private Map actionProperties = null;
-	
-	/**
-	 * <p>Method that has to be executed on action.
-	 */
-	private String actionMethod = null;
-	
-	/**
-	 * <p>Holds the view name of this state.
-	 */
-	private String viewName = null;
-	
-	/**
-	 * <p>A closure that should return the view name.
-	 * 
-	 * <p>The return value should be not null and of
-	 * type {@link String} or {@link org.springframework.webflow.Event}
-	 * otherwise an exception is thrown.
-	 */
-	private Closure viewClosure = null;
-	
-	/**
-	 * <p>Model names and values that can be set on the request context.
-	 * 
-	 * <p>If a value is a {@link Closure} it will be executed everytime the
-	 * model needs to be populated. If no value is returned the name will
-	 * be added to the model with a null value.
-	 */
-	private Map viewModel = null;
-	
-	/**
-	 * <p>The name or id of a subflow.
-	 */
-	private String subFlowId = null;
-	
-	/**
-	 * <p>A closure that maps values in the flow scope to map. This map
-	 * is added to the flow scope of the subflow that is started.
-	 * 
-	 * <p>The closure can have one parameter, a {@link org.springframework.webflow.RequestContext}
-	 * instance which is the request context of the parent flow.
-	 * 
-	 * <p>The return value should be null or an instance of {@link Map}.
-	 * 
-	 * <p>{@link #attributeMapperClass} and {@link #attributeMapper} should
-	 * be null if this field is set. 
-	 */
-	private Closure subFlowInput = null;
-	
-	/**
-	 * <p>A closure that puts values in the flow scope of an ending subflow
-	 * in the flow scope of the resuming parent flow scope.
-	 * 
-	 * <p>The closure can have two parameters: the subflow scope and the
-	 * parent flow scope.
-	 * 
-	 * <p>{@link #attributeMapperClass} and {@link #attributeMapper} should
-	 * be null if this field is set. 
-	 */
-	private Closure subFlowOutput = null;
-	
-	/**
-	 * <p>Class that implements {@link FlowAttributeMapper}. The class
-	 * should have a public no-arg constructor. A new instance of this
-	 * class will be created and used as flow attribute mapper between
-	 * the parent flow and the subflow scopes.
-	 * 
-	 * <p>{@link #attributeMapperProperties} will be used to set the
-	 * properties on this flow attribute mapper attribute. If {@link #attributeMapperProperties}
-	 * contains property names that are not available on the flow attribute
-	 * mapper class an exception will be thrown.
-	 * 
-	 * <p>{@link #subFlowInput}, {@link #subFlowOutput} and {@link #attributeMapper}
-	 * should be null if this field is set. 
-	 */
-	private Class attributeMapperClass = null;
-	
-	/**
-	 * <p>{@link FlowAttributeMapper} instance used as flow attribute mapper
-	 * between the parent flwo and subflow scopes.
-	 * 
-	 * <p>{@link #attributeMapperProperties} will not be used to set
-	 * the properties of this instance.
-	 * 
-	 * <p>{@link #subFlowInput}, {@link #subFlowOutput} and {@link #attributeMapperClass}
-	 * should be null  if this field is set.
-	 */
-	private FlowAttributeMapper attributeMapper = null;
-	
-	/**
-	 * <p>Hold property names and values for instances for {@link #attributeMapperClass}.
-	 */
-	private Map attributeMapperProperties = null;
-	
-	/**
-	 * <p>The state to transition to in case the decision state returns true.
-	 */
-	private String decisionTrueStateId = null;
-	
-	/**
-	 * <p>The state to transition to in case the decision state returns false.
-	 */
-	private String decisionFalseStateId = null;
-	
-	/**
-	 * <p>OGNL expression to test the outcome of the decision state based
-	 * on the request context.
-	 */
-	private String decisionExpression = null;
-	
-	/**
-	 * <p>A closure that implements a test to determine the outcome of
-	 * the decision state.
-	 * 
-	 * <p>The closure can have one parameter, an instance of {@link org.springframework.webflow.RequestContext}.
-	 * 
-	 * <p>Valid return values are:
-	 * 
-	 * <ul>
-	 * <li>true
-	 * <li>false
-	 * <li>{@link Boolean#TRUE}
-	 * <li>{@link Boolean#FALSE}
-	 * </ul>
-	 */
-	private Closure decisionClosure = null;
-	
-	
-	/**
-	 * <p>The id or name of this state.
-	 */
-	private String id = null;
-	
-	/**
-	 * <p>Transitions for this state.
-	 */
-	private List transitions = null;
-	
-	private boolean endState = false;
-	
-	public State(String id) {
-		super();
-		setId(id);
-		this.transitions = new ArrayList();
-	}
-	
-	public State(String id, Map attributes) {
-		this(id);
-		Assert.notNull(attributes);
-		for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry)iter.next();
-			
-			if (ACTION.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + ACTION + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof Class) {
-					actionClass = (Class)entry.getValue();
-				} else if (entry.getValue() instanceof Action) {
-					action = (Action)entry.getValue();
-				} else if (entry.getValue() instanceof Map) {
-					actionFormDetails = (Map)entry.getValue();
-				} else if (entry.getValue() instanceof Closure) {
-					actionClosure = (Closure)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + ACTION + "] on state [" + id + "]!");
-				}
-			} else if (VIEW.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + VIEW + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					viewName = (String)entry.getValue();
-				} else if (entry.getValue() instanceof Closure) {
-					viewClosure = (Closure)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + VIEW + "] on state [" + id + "]!");
-				}
-			} else if (DECISION.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + DECISION + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					decisionExpression = (String)entry.getValue();
-				} else if (entry.getValue() instanceof Closure) {
-					decisionClosure = (Closure)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + DECISION + "] on state [" + id + "]!");
-				}
-			} else if (SUBFLOW.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + SUBFLOW + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					subFlowId = (String)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + SUBFLOW + "] on state [" + id + "]!");
-				}
-			} else if (PROPERTIES.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-//					accept this
-				} else if (entry.getValue() instanceof Map) {
-//					if (isActionState()) {
-//						actionProperties = (Map)entry.getValue();
-//					} else if (isSubflowState()) {
-//						attributeMapperProperties = (Map)entry.getValue();
-//					} else if (isViewState()) {
-//						throw new IllegalArgumentException("The [" + PROPERTIES + "] property is not supported for view state [" + id + "]!");
-//					} else if (isDecisionState()) {
-//						throw new IllegalArgumentException("The [" + PROPERTIES + "] property is not supported for decision state [" + id + "]!");
-//					} else {
-//						throw new IllegalStateException("Could not determine state type when handling [" + PROPERTIES + "] property for state [" + id +"]. Try moving the state discriminator attribute ([" + ACTION + "] or [" + SUBFLOW +"]) in front of the [" + PROPERTIES + "] property if have specified it!");
-//					}
-					/*
-					 * This is a hack. The code above does not work as order of attribute entries is undertermined.
-					 * We set both actionProperties and attributeMapperProperties.
-					 * As a side effect attribute with discriminator property and with properties property will
-					 * not fail in this construtor but will fail in validate method.
-					 */
-					actionProperties = (Map)entry.getValue();
-					attributeMapperProperties = (Map)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsuppored type [" + entry.getValue().getClass().getName() + "] for attribute [" + PROPERTIES + "] on state [" + id + "]!");
-				}
-			} else if (MODEL.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					// accept this
-				} else if (entry.getValue() instanceof Map) {
-					viewModel = (Map)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + MODEL + "] on state [" + id + "]!");
-				}
-			} else if (INPUT.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					// accept this
-				} else if (entry.getValue() instanceof Closure) {
-					subFlowInput = (Closure)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + INPUT + "] on state [" + id + "]!");
-				}
-			} else if (OUTPUT.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					// accept this
-				} else if (entry.getValue() instanceof Closure) {
-					subFlowOutput = (Closure)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + OUTPUT + "] on state [" + id + "]!");
-				}
-			} else if (MAPPER.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					// accept this
-				} else if (entry.getValue() instanceof Class) {
-					attributeMapperClass = (Class)entry.getValue();
-				} else if (entry.getValue() instanceof FlowAttributeMapper) {
-					attributeMapper = (FlowAttributeMapper)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] attribute [" + MAPPER + "] on state [" + id + "]!");
-				}
-			} else if (TRUE_STATE.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + TRUE_STATE + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					decisionTrueStateId = (String)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + TRUE_STATE + "] on state [" + id + "]!");
-				}
-			} else if (FALSE_STATE.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + FALSE_STATE + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					decisionFalseStateId = (String)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + FALSE_STATE + "] on state [" + id + "]!");
-				}
-			} else if (METHOD.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + METHOD + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof String) {
-					actionMethod = (String)entry.getValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + METHOD + "] on state [" + id + "]!");
-				}
-			} else if (END.equals(entry.getKey())) {
-				if (entry.getValue() == null) {
-					throw new IllegalArgumentException("Value for property [" + END + "] on state [" + id + "] must not be null!");
-				} else if (entry.getValue() instanceof Boolean) {
-					endState = ((Boolean)entry.getValue()).booleanValue();
-				} else {
-					throw new IllegalArgumentException("Unsupported type [" + entry.getValue().getClass().getName() + "] for attribute [" + END + "] on state [" + id + "]!");
-				}
-			} else {
-				throw new IllegalArgumentException("Unknow property [" + entry.getValue() + "] on state [" + id + "]!");
-			}
- 		}
-	}
-
-	/**
-	 * <p>Adds a transition to this state.
-	 */
-	public void addTransition(Transition transition) {
-		Assert.notNull(transition);
-		for (Iterator iter = this.transitions.iterator(); iter.hasNext();) {
-			Transition tmpTransition = (Transition)iter.next();
-			if (tmpTransition.getTargetStateId().equals(transition.getTargetStateId())) {
-				throw new IllegalArgumentException("This state [" + getId() + "] already has a transition to state [" + tmpTransition.getTargetStateId() + "]!");
-			}
-		}
-		this.transitions.add(transition);
-	}
-	
-	/**
-	 * <p>Returns the list of transitions for this state.
-	 * 
-	 * @return transitions for this state.
-	 */
-	public List getTransitions() {
-		return this.transitions;
-	}
-	
-	public Action getAction() {
-		return action;
-	}
-	public void setAction(Action action) {
-		this.action = action;
-	}
-	public Class getActionClass() {
-		return actionClass;
-	}
-	public void setActionClass(Class actionClass) {
-		this.actionClass = actionClass;
-	}
-	public Closure getActionClosure() {
-		return actionClosure;
-	}
-	public void setActionClosure(Closure actionClosure) {
-		this.actionClosure = actionClosure;
-	}
-	public Map getActionFormDetails() {
-		return actionFormDetails;
-	}
-	public void setActionFormDetails(Map actionFormDetails) {
-		this.actionFormDetails = actionFormDetails;
-	}
-	public Map getActionProperties() {
-		return actionProperties;
-	}
-	public void setActionProperties(Map actionProperties) {
-		this.actionProperties = actionProperties;
-	}
-	public FlowAttributeMapper getAttributeMapper() {
-		return attributeMapper;
-	}
-	public void setAttributeMapper(FlowAttributeMapper attributeMapper) {
-		this.attributeMapper = attributeMapper;
-	}
-	public Class getAttributeMapperClass() {
-		return attributeMapperClass;
-	}
-	public void setAttributeMapperClass(Class attributeMapperClass) {
-		this.attributeMapperClass = attributeMapperClass;
-	}
-	public Map getAttributeMapperProperties() {
-		return attributeMapperProperties;
-	}
-	public void setAttributeMapperProperties(Map attributeMapperProperties) {
-		this.attributeMapperProperties = attributeMapperProperties;
-	}
-	public Closure getDecisionClosure() {
-		return decisionClosure;
-	}
-	public void setDecisionClosure(Closure decisionClosure) {
-		this.decisionClosure = decisionClosure;
-	}
-	public String getDecisionExpression() {
-		return decisionExpression;
-	}
-	public void setDecisionExpression(String decisionExpression) {
-		this.decisionExpression = decisionExpression;
-	}
-	public String getDecisionFalseStateId() {
-		return decisionFalseStateId;
-	}
-	public void setDecisionFalseStateId(String decisionFalseStateId) {
-		this.decisionFalseStateId = decisionFalseStateId;
-	}
-	public String getDecisionTrueStateId() {
-		return decisionTrueStateId;
-	}
-	public void setDecisionTrueStateId(String decisionTrueStateId) {
-		this.decisionTrueStateId = decisionTrueStateId;
-	}
-	public String getId() {
-		return id;
-	}
-	public void setId(String id) {
-		this.id = id;
-	}
-	public String getSubFlowId() {
-		return subFlowId;
-	}
-	public void setSubFlowId(String subFlowId) {
-		this.subFlowId = subFlowId;
-	}
-	public Closure getSubFlowInput() {
-		return subFlowInput;
-	}
-	public void setSubFlowInput(Closure subFlowInput) {
-		this.subFlowInput = subFlowInput;
-	}
-	public Closure getSubFlowOutput() {
-		return subFlowOutput;
-	}
-	public void setSubFlowOutput(Closure subFlowOutput) {
-		this.subFlowOutput = subFlowOutput;
-	}
-	public Closure getViewClosure() {
-		return viewClosure;
-	}
-	public void setViewClosure(Closure viewClosure) {
-		this.viewClosure = viewClosure;
-	}
-	public Map getViewModel() {
-		return viewModel;
-	}
-	public void setViewModel(Map viewModel) {
-		this.viewModel = viewModel;
-	}
-	public String getViewName() {
-		return viewName;
-	}
-	public void setViewName(String viewName) {
-		this.viewName = viewName;
-	}
-	public String getActionMethod() {
-		return actionMethod;
-	}
-	public void setActionMethod(String actionMethod) {
-		this.actionMethod = actionMethod;
-	}
-	
-	/**
-	 * <p>Validate the various fields of this class.
-	 */
-	public void validate() throws IllegalStateException {
-		Object[] fields = new Object[] { action, actionClass, actionClosure, actionFormDetails, decisionClosure, decisionExpression, subFlowId, viewClosure, viewName };
-		boolean oneNotNull = false;
-		
-		if (StringUtils.isBlank(id)) {
-			throw new IllegalStateException("State id must be specified!");
-		}
-		
-		for (int i = 0; i < fields.length; i++) {
-			if (oneNotNull) {
-				if (fields[i] != null) {
-					throw new IllegalStateException("Could not determine state type, more than one discriminator field was specified!");
-				}
-			} else {
-				oneNotNull = fields[i] != null; 
-			}
-		}
-//		if (!oneNotNull) {
-//			throw new IllegalStateException("Could not determine state type, no descriminator field was specified!");
-//		}
-		
-		if (isSubflowState()) {
-			if ((subFlowInput != null || subFlowOutput != null) && (attributeMapper != null || attributeMapperClass != null)) {
-				throw new IllegalStateException("attribute mapper and attribute mapper class must be null if either subflow input or subflow output are set!");
-			} else if (attributeMapper != null && (subFlowInput != null || subFlowOutput != null || attributeMapperClass != null)) {
-				throw new IllegalStateException("subflow input and subflow output and attribute mapper class must be null if attribute mapper is set!");
-			} else if (attributeMapperClass != null && (subFlowInput != null || subFlowOutput != null || attributeMapper != null)) {
-				throw new IllegalStateException("subflow input and subflow output and attribute mapper class must be null if attribute mapper class is set!");
-			}
-		}
-
-		if (isDecisionState()) {
-			if (StringUtils.isBlank(decisionTrueStateId)) {
-				throw new IllegalStateException("Decision true state id must be set!");
-			} else if (StringUtils.isBlank(decisionFalseStateId)) {
-				throw new IllegalStateException("Decision false state id must be set!");
-			}
-		}
-		
-		if (actionClass != null) {
-			if (!Action.class.isAssignableFrom(actionClass) && !ClassUtils.hasMethod(actionClass, "execute", new Class[] { RequestContext.class })) {
-				throw new IllegalStateException("Action class [" + actionClass.getName() + "] does not implement [" + Action.class.getName() + "] and has no public method [execute(" + RequestContext.class.getName() + ")]!");
-			} else if (Modifier.isAbstract(actionClass.getModifiers())) {
-				throw new IllegalStateException("Action class [" + actionClass.getName() + "] is abstract!");
-			}
-		}
-		
-		if (attributeMapperClass != null) {
-			if (!FlowAttributeMapper.class.isAssignableFrom(attributeMapperClass)) {
-				throw new IllegalStateException("Flow attribute mapper class [" + attributeMapperClass.getName() + "] does not implement [" + FlowAttributeMapper.class.getName() + "]!");
-			} else if (Modifier.isAbstract(attributeMapperClass.getModifiers())) {
-				throw new IllegalStateException("Flow attribute mapper class [" + attributeMapperClass.getName() + "] is abstract!");
-			}
-		}
-		
- 	}
-	
-	/**
-	 * <p>Is this state an action state.
-	 * 
-	 * @return true is this state is an action state.
-	 */
-	public boolean isActionState() {
-		return (action != null || actionClass != null || actionClosure != null || actionFormDetails != null);
-	}
-	
-	/**
-	 * <p>Is this state a view state.
-	 * 
-	 * @return true if this state in a view state.
-	 */
-	public boolean isViewState() {
-		return ((viewName != null || viewClosure != null) && !endState);
-	}
-	
-	/**
-	 * <p>Is this state a decision state.
-	 * 
-	 * @return true if this state is a decision state.
-	 */
-	public boolean isDecisionState() {
-		return (decisionExpression != null || decisionClosure != null);
-	}
-	
-	/**
-	 * <p>Is this state a subflow state.
-	 * 
-	 * @return true if this state is a subflow state.
-	 */
-	public boolean isSubflowState() {
-		return (subFlowId != null);
-	}
-	
-	/**
-	 * <p>Is this state an end state.
-	 * 
-	 * @return true if this state is an end state.
-	 */
-	public boolean isEndState() {
-		return ((endState && isViewState()) || (!isActionState() && !isViewState() && !isDecisionState() && !isSubflowState()));
-	}
-	
-	public String toString() {
-		return new ToStringCreator(this)
-			.append("action=" + action)
-			.append("actionClass=" + actionClass)
-			.append("actionClosure=" + actionClosure)
-			.append("actionFormDetail=" + actionFormDetails)
-			.append("actionProperties=" + actionProperties)
-			.append("attributeMapper=" + attributeMapper)
-			.append("attributeMapperClass=" + attributeMapperClass)
-			.append("attributeMapperProperties=" + attributeMapperProperties)
-			.append("decisionClosure=" + decisionClosure)
-			.append("decisionExpression=" + decisionExpression)
-			.append("decisionTrueStateId=" + decisionTrueStateId)
-			.append("decisionFalseStateId=" + decisionFalseStateId)
-			.append("subFlowId=" + subFlowId)
-			.append("subFlowInput=" + subFlowInput)
-			.append("subFlowOutput" + subFlowOutput)
-			.append("transitions=" + transitions)
-			.append("viewClosure=" + viewClosure)
-			.append("viewName=" + viewName)
-			.append("viewModel=" + viewModel)
-			.append("\n").toString();
-		
-			
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/grails/pageflow/Transition.java b/groovy/modules/grails/src/commons/grails/pageflow/Transition.java
deleted file mode 100644
index 1ac7636..0000000
--- a/groovy/modules/grails/src/commons/grails/pageflow/Transition.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import java.lang.String;
-
-import org.springframework.core.style.ToStringCreator;
-
-/**
- * <p>Simple container class for a transition a in page flow.
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class Transition {
-
-	private State state = null;
-	private String targetStateId = null;
-	private String name = null;
-	
-	public Transition(State state, String name, String targetStateId) {
-		super();
-		if (state == null) {
-			throw new IllegalArgumentException("State argument should not be null!");
-		}
-		if (name == null) {
-			throw new IllegalArgumentException("Name argument should not be null!");
-		}
- 		if (targetStateId == null) {
-			throw new IllegalArgumentException("Target state id argument should not be null!");
-		}
-		this.state = state;
-		this.targetStateId = targetStateId;
-		this.name = name;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public String getTargetStateId() {
-		return this.targetStateId;
-	}
-
-	public String toString() {
-		return new ToStringCreator(this).toString();
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/grails/util/ExtendProxy.java b/groovy/modules/grails/src/commons/grails/util/ExtendProxy.java
deleted file mode 100644
index c95e685..0000000
--- a/groovy/modules/grails/src/commons/grails/util/ExtendProxy.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.util;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import groovy.lang.MissingPropertyException;
-import groovy.util.Proxy;
-/** 
- * Extends the Groovy Proxy implementation and adds proxying of property getters/setters
- * 
-* @author Graeme Rocher
-* @since Oct 20, 2005
-*/
-public class ExtendProxy extends Proxy {
-
-	public Object getProperty(String property) {
-		try {			
-			return super.getProperty(property);
-		}
-		catch(MissingPropertyException mpe) {
-			return InvokerHelper.getMetaClass(getAdaptee()).getProperty(getAdaptee(),property);
-		}
-	}
-
-	public void setProperty(String property, Object newValue) {
-		try {			
-			super.setProperty(property,newValue);
-		}
-		catch(MissingPropertyException mpe) {
-			InvokerHelper.getMetaClass(getAdaptee()).setProperty(getAdaptee(),property,newValue);
-		}
-	}
-	
-	
-
-}
diff --git a/groovy/modules/grails/src/commons/grails/util/GenerateUtils.java b/groovy/modules/grails/src/commons/grails/util/GenerateUtils.java
deleted file mode 100644
index e69f818..0000000
--- a/groovy/modules/grails/src/commons/grails/util/GenerateUtils.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.util;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-import groovy.lang.GroovyClassLoader;
-
-/**
- * Utility class for generating Grails artifacts likes views, controllers etc.
- *
- * @author Graeme Rocher
- * @since 10-Feb-2006
- */
-public class GenerateUtils {
-
-    private static Log LOG = LogFactory.getLog(RunTests.class);
-    private static final String VIEWS = "view";
-    private static final String CONTROLLER = "controller";
-
-    public static void main(String[] args) throws Exception {
-        if(args.length < 2)
-            return;
-
-        String type = args[0];
-        String domainClassName = args[1];
-
-
-
-        ApplicationContext parent = new ClassPathXmlApplicationContext("applicationContext.xml");
-        GrailsApplication application = (DefaultGrailsApplication)parent.getBean("grailsApplication", DefaultGrailsApplication.class);
-
-        GrailsDomainClass domainClass = getDomainCallFromApplication(application,domainClassName);
-
-        // bootstrap application to try hibernate domain classes
-        if(domainClass == null) {
-            SpringConfig config = new SpringConfig(application);
-            ConfigurableApplicationContext appCtx = (ConfigurableApplicationContext)
-                new XmlApplicationContextDriver().getApplicationContext(
-                    config.getBeanReferences(), parent);
-        }
-
-        // retry
-        domainClass = getDomainCallFromApplication(application,domainClassName);
-        if(domainClass == null) {
-            LOG.debug("Unable to generate ["+type+"] domain class not found for name ["+domainClassName+"]");
-            return;
-        }
-
-        GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-
-        GrailsTemplateGenerator generator = (GrailsTemplateGenerator)gcl.parseClass(gcl.getResourceAsStream("org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy"))
-                                                                            .newInstance();
-
-        if(VIEWS.equals(type)) {
-            LOG.info("Generating views for domain class ["+domainClass.getName()+"]");
-            generator.generateViews(domainClass,".");
-        }
-        else if(CONTROLLER.equals(type)) {
-           LOG.info("Generating controller for domain class ["+domainClass.getName()+"]");
-           generator.generateController(domainClass,".");
-        }
-        else {
-            LOG.info("Grails was unable to generate templates for unsupported type ["+type+"]");
-        }
-    }
-
-    private static GrailsDomainClass getDomainCallFromApplication(GrailsApplication application, String domainClassName) {
-        GrailsDomainClass domainClass = application.getGrailsDomainClass(domainClassName);
-        if(domainClass == null) {
-            domainClass = application.getGrailsDomainClass(domainClassName.substring(0,1).toUpperCase() + domainClassName.substring(1));
-        }
-        return domainClass;
-    }
-}
diff --git a/groovy/modules/grails/src/commons/grails/util/OpenRicoBuilder.java b/groovy/modules/grails/src/commons/grails/util/OpenRicoBuilder.java
deleted file mode 100644
index 37b6d9e..0000000
--- a/groovy/modules/grails/src/commons/grails/util/OpenRicoBuilder.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.util;
-
-import groovy.xml.MarkupBuilder;
-
-import java.io.IOException;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.codehaus.groovy.grails.web.servlet.GrailsHttpServletResponse;
-
-/**
- * <p>OpenRicoBuilder provides support for creating OpenRico AJAX responses.
- * 
- * <p>If this builder is used in controllers no views should be configured since
- * content will be written to the HttpServletResponse instance. Also no operations
- * should be performed on the response object prior to passing it to this builder.
- * 
- * <p>This builder will set the content type of the response to "text/xml" and will 
- * render a correct XML prolog (<?xml version="1.0" encoding="ISO-8859-1"?>).
- * 
- * <p>This builder supports no namespaces or hyphens in element and attribute names.
- * 
- * <p>Use this builder to write a OpenRico reponse to the client. Sending a simple
- * DIV tag to the client requires this code:
- * 
- * <pre>
- * new OpenRicoBuilder(response).ajax { element(id:"personInfo") { div(class:"person") } }
- * </pre>
- * 
- * <p>Sending object XML to the client requires this code:
- * 
- * <pre>
- * new OpenRicoBuilder(response).ajax { object(id:"formLetterUpdater") { 
- *     person(
- *         fullName:"Pat Barnes",
- *         title:"Mr.",
- *         firstName:"Pat",
- *         lastName:"Barnes")
- *     }
- * }
- * </pre>
- * 
- * <p>The first call on a OpenRicoBuilder instance should be "ajax", the second either "element" (to return HTML)
- * or object (to return XML) both with a required "id" attribute. Violations against these rules will be
- * reported as exceptions.
- * 
- * <p>OpenRico responses can contain multiple element and/or object nodes which is supported by this builder.
- * 
- * <p>When using OpenRicoBuilder in controllers you may need to return a null value at the end of a closure to avoid an
- * UnsupporterReturnValueException.
- * 
- * @author Steven Devijver
- * @since Jul 5, 2005
- */
-public class OpenRicoBuilder extends MarkupBuilder {
-
-	private static final String TEXT_XML = "text/xml";
-	private static final String UTF_8 = "UTF-8";
-	private static final String AJAX = "ajax";
-	private static final String AJAX_RESPONSE = "ajax-response";
-	private static final String ELEMENT = "element";
-	private static final String OBJECT = "object";
-	private static final String RESPONSE = "response";
-	private static final String TYPE = "type";
-	private static final String ID = "id";
-	private static final String OPENRICO = "OpenRicoBuilder: ";
-	private static final String XML_HEADER = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
-	private boolean ajaxOnly = true;
-	private boolean responseOnly = false;
-	private boolean start = true;
-	
-	public OpenRicoBuilder(HttpServletResponse response) throws IOException {
-		this(new GrailsHttpServletResponse(response));
-	}
-	
-	public OpenRicoBuilder(GrailsHttpServletResponse response) throws IOException {
-		super(response.getWriter(TEXT_XML, UTF_8));
-		getPrinter().println(XML_HEADER);
-	}
-
-	protected Object createNode(Object name) {
-		if (responseOnly) {
-			throw new IllegalArgumentException(OPENRICO + "only call to [element { }] is allowed with attribute [id], not [" + name + "{ }]!");
-		}
-		if (start && AJAX.equals(name)) {
-			ajaxOnly = false;
-			responseOnly = true;
-			start = false;
-			return super.createNode(AJAX_RESPONSE);
-		} else if (ajaxOnly) {
-			throw new IllegalArgumentException(OPENRICO + "only call to [ajax { }] is allowed, not [" + name + " { }]!");
-		} else {
-			return super.createNode(name);
-		}
-	}
-		
-	protected Object createNode(Object name, Map attributes, Object value) {
-		if (checkElementName((String)name, attributes)) {
-			return super.createNode(name, attributes, value);
-		} else {
-			return RESPONSE;
-		}
-	}
-	
-	protected Object createNode(Object name, Object value) {
-		if (checkElementName((String)name, null)) {
-			return super.createNode(name, value);
-		} else {
-			throw new UnsupportedOperationException(OPENRICO + "invalid method call [" + name + "{ }]!");
-		}
-	}
-	
-	protected void nodeCompleted(Object parent, Object node) {
-		responseOnly = AJAX_RESPONSE.equals(parent) && RESPONSE.equals(node);
-		super.nodeCompleted(parent, node);
-	}
-	
-	private boolean checkElementName(String elementName, Map attributes) {
-		if (ajaxOnly) {
-			throw new IllegalArgumentException(OPENRICO + "only call to [ajax {}] allowed without arguments, not [" + elementName + " { }]!");
-		}
-		if (responseOnly) {
-			responseOnly = false;
-			if (!(ELEMENT.equals(elementName) || OBJECT.equals(elementName))) {
-				throw new IllegalArgumentException(OPENRICO + "only calls to [element { }] or [object { }] are allowed, not [" + elementName + " { }]!");
-			}
-			if (attributes == null || attributes.isEmpty()) {				
-					throw new IllegalArgumentException(OPENRICO + "call to [" + elementName + " { }] requires id attribute!");
-			} else if (!(attributes.containsKey(ID) && attributes.get(ID) != null)) {
-					throw new IllegalArgumentException(OPENRICO + "call to [" + elementName + " { }] requires id attribute with value!");
-			} else if (ELEMENT.equals(elementName)) {
-				attributes.put(TYPE, ELEMENT);
-				super.createNode(RESPONSE, attributes);
-			} else if (OBJECT.equals(elementName)) {
-				attributes.put(TYPE, OBJECT);
-				super.createNode(RESPONSE, attributes);
-			}
-			return false;
-		}
-		return true;
-	}
-}
diff --git a/groovy/modules/grails/src/commons/grails/util/RunTests.java b/groovy/modules/grails/src/commons/grails/util/RunTests.java
deleted file mode 100644
index 56f0848..0000000
--- a/groovy/modules/grails/src/commons/grails/util/RunTests.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.util;
-
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.grails.support.GrailsTestSuite;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-import java.lang.reflect.Modifier;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public class RunTests {
-
-	private static Log log = LogFactory.getLog(RunTests.class);
-	
-	public static void main(String[] args) {
-		ApplicationContext parent = new ClassPathXmlApplicationContext("applicationContext.xml");
-		DefaultGrailsApplication application = (DefaultGrailsApplication)parent.getBean("grailsApplication", DefaultGrailsApplication.class);
-		SpringConfig config = new SpringConfig(application);
-		ConfigurableApplicationContext appCtx = (ConfigurableApplicationContext) 
-			new XmlApplicationContextDriver().getApplicationContext(
-				config.getBeanReferences(), parent);
-		
-		Class[] allClasses = application.getAllClasses();
-        log.debug("Going through ["+allClasses.length+"] classes");
-        TestSuite s = new TestSuite();
-		for (int i = 0; i < allClasses.length; i++) {
-			Class clazz = allClasses[i];
-			if (TestCase.class.isAssignableFrom(clazz) && !Modifier.isAbstract(clazz.getModifiers())) {
-				log.debug("Adding test [" + clazz.getName() + "]");
-				s.addTest(new GrailsTestSuite(appCtx.getBeanFactory(), clazz));
-			} else {
-				log.debug("[" + clazz.getName() + "] is not a test case.");
-			}
-		}
-		TestRunner.run(s);
-	}
-}
diff --git a/groovy/modules/grails/src/commons/grails/util/WebTest.groovy b/groovy/modules/grails/src/commons/grails/util/WebTest.groovy
deleted file mode 100644
index 7da6a9a..0000000
--- a/groovy/modules/grails/src/commons/grails/util/WebTest.groovy
+++ /dev/null
@@ -1,94 +0,0 @@
-package grails.util
-
-// Superclass skeleton for fuctional tests.
-// Subclasses must implement the suite() method.
-
-class WebTest {
-
-    @Property grailsHome
-    @Property props
-    @Property ant = new AntBuilder()    // may be initialize lazily for memory opt. in subclasses
-
-    public webtestHome
-    public Map configMap
-
-    /** used from subclasses to nest the steps into */
-    void webtest(String name, Closure yield){
-        ant.testSpec(name:name){
-            config(configMap)
-            steps(){
-                yield.delegate = ant
-                yield()
-            }
-        }
-    }
-
-    /**
-        Subclasses override this method to call all their test methods.
-    */
-    void suite() {}
-
-    /** Main entry point to run the whole suite of tests. */
-    void runTests (){
-        initProps()
-        initConfigMap()
-        prepare()
-
-        suite()     // template method call
-
-        style()
-    }
-
-
-    void initProps () {
-        ant.property(file:        'webtest/conf/webtest.properties')
-        ant.property(environment: 'env')
-        props = ant.antProject.properties
-        grailsHome = props.grailsHome
-        if (! grailsHome) {
-            grailsHome = props.'env.GRAILS_HOME'
-        }
-        webtestHome = grailsHome + '/downloads/webtest'
-        props.projectName = new File('.').absolutePath.tokenize('./\\')[-1]
-        if (! props.webtest_basepath) props.webtest_basepath = props.projectName
-        println 'Testing ' + props.projectName
-    }
-
-   // prepare a configmap based on webtest.properties
-    def initConfigMap () {
-        configMap = [:]
-        def prefix = 'webtest_'
-        props.keySet().each{ name ->
-            if (name.startsWith(prefix)) configMap.put(name - prefix, props[name])
-        }
-    }
-
-    // prepare the ant taskdef, classpath and filesystem for reporting
-    void prepare() {        
-        ant.taskdef(file:"${webtestHome}/webtestTaskdefs.properties")
-        ant.delete () {
-            fileset(dir: props.webtest_resultpath, excludes:'readme.txt')
-        }
-        ant.mkdir (dir: props.webtest_resultpath)
-    }
-
-    def style() {
-        ant.style(
-            basedir:    props.webtest_resultpath,
-            destdir:    props.webtest_resultpath,
-            includes:   props.webtest_resultfile,
-            extension:  '.html',
-            style:      webtestHome+'/resources/WebTestReport.xsl'){
-            param(name:'reporttime',     expression: new Date().toString())
-            param(name:'title',          expression: "The ${props.projectName} Project")
-            param(name:'resources.dir',  expression: new File(webtestHome+'/resources').toURI())
-        }
-
-        // on windows, start the standard browser on the report file
-        if(! props.'os.name'?.contains('Windows')) return
-        def reportHtml = "$props.webtest_resultpath/$props.webtest_resultfile" - '.xml' + '.html'
-        def filename = new File(reportHtml).canonicalPath
-        println "opening: $filename"
-        "cmd /c $filename".execute()
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClass.java
deleted file mode 100644
index 01a9b5d..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClass.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import org.apache.commons.lang.ClassUtils;
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.exceptions.NewInstanceCreationException;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Modifier;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public abstract class AbstractGrailsClass implements GrailsClass {
-
-	private Class clazz = null;
-	private String fullName = null;
-	private String name = null;
-	private String packageName = null;
-	private BeanWrapper reference = null;
-    private String naturalName;
-    private String shortName;
-
-
-
-    /**
-     * <p>Contructor to be used by all child classes to create a
-     * new instance and get the name right.
-     *
-     * @param clazz the Grails class
-     * @param trailingName the trailing part of the name for this class type
-     */
-    public AbstractGrailsClass(Class clazz, String trailingName) {
-        super();
-        setClazz(clazz);
-
-        this.reference = new BeanWrapperImpl(newInstance());
-        this.fullName = clazz.getName();
-        this.packageName = ClassUtils.getPackageName(clazz);
-        this.naturalName = GrailsClassUtils.getNaturalName(clazz.getName());
-        if (StringUtils.isBlank(trailingName)) {
-            this.name = fullName;
-            this.shortName = getShortClassname(clazz);
-        } else {
-            this.shortName = getShortClassname(clazz);
-            if(shortName.indexOf( trailingName ) > - 1) {
-                this.name = shortName.substring(0, shortName.length() - trailingName.length());
-            }
-            else {
-                this.name = fullName;
-            }
-        }
-    }
-
-    public String getShortName() {
-        return this.shortName;
-    }
-
-    private void setClazz(Class clazz) {
-		if (clazz == null) {
-			throw new IllegalArgumentException("Clazz parameter should not be null");
-		}
-		this.clazz = clazz;
-	}
-	
-	public Class getClazz() {
-		return this.clazz;
-	}
-	
-	public Object newInstance() {
-		try {
-			return getClazz().newInstance();
-		} catch (Exception e) {
-			Throwable targetException = null;
-			if (e instanceof InvocationTargetException) {
-				targetException = ((InvocationTargetException)e).getTargetException();
-			} else {
-				targetException = e;
-			}
-			throw new NewInstanceCreationException("Could not create a new instance of class [" + getClazz().getName() + "]!", targetException);
-		}
-	}
-
-	public String getName() {
-		return this.name;
-	}
-
-    public String getNaturalName() {
-        return this.naturalName;
-    }
-
-    public String getFullName() {
-		return this.fullName;
-	}
-
-    public String getPropertyName() {
-        return GrailsClassUtils.getPropertyNameRepresentation(getClazz());
-    }
-
-    public String getPackageName() {
-		return this.packageName;
-	}
-	
-	private static String getShortClassname(Class clazz) {
-		return ClassUtils.getShortClassName(clazz);
-	}
-	
-	/**
-	 * <p>The reference instance is used to get configured property values.
-	 * 
-	 * @return BeanWrapper instance that holds reference
-	 */
-	protected BeanWrapper getReference() {
-		return this.reference;
-	}
-	
-	/**
-	 * <p>Looks for a property of the reference instance with a given name and type. If found
-	 * its value is returned, otherwise look for a public static field with given name and type,
-	 * otherwise return null.
-	 * 
-	 * @return property value or null if no property or static field was found
-	 */
-	protected Object getPropertyValue(String name, Class type) {
-		BeanWrapper ref = getReference();
-		if (ref.isReadableProperty(name) && ref.getPropertyType(name).isAssignableFrom(type)) {
-			Object value = ref.getPropertyValue(name);
-			if(value != null && type.isAssignableFrom(value.getClass())) {
-				return value;
-			}
-			return null;
-		} else {
-			try {
-				Field field = ref.getWrappedClass().getField(name);
-				if (Modifier.isStatic(field.getModifiers()) && Modifier.isPublic(field.getModifiers()) && field.getType().equals(type)) {
-					return field.get(ref.getWrappedInstance());
-				}
-			} catch (NoSuchFieldException e) {
-				// ignore
-			} catch (IllegalAccessException e) {
-				// ignore
-			}
-		}
-		
-		return null;
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClass.java
deleted file mode 100644
index fc83373..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClass.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public abstract class AbstractInjectableGrailsClass extends AbstractGrailsClass
-		implements InjectableGrailsClass {
-
-	private static final String BY_NAME_PROPERTY = "byName";
-	private static final String AVAILABLE_PROPERTY = "available";
-	
-	private boolean byName = false;
-	private boolean byType = true;
-	private boolean available = true;
-	
-	public AbstractInjectableGrailsClass(Class clazz, String trailingName) {
-		super(clazz, trailingName);
-
-		Object byNameValue = getPropertyValue(BY_NAME_PROPERTY, Boolean.class);
-		this.byName = byNameValue != null && byNameValue.equals(Boolean.TRUE);
-		this.byType = !byName;
-		
-		Object availableValue = getPropertyValue(AVAILABLE_PROPERTY, Boolean.class);
-		this.available = availableValue == null || availableValue.equals(Boolean.TRUE);
-	}
-
-	public boolean byName() {
-		return this.byName;
-	}
-
-	public boolean byType() {
-		return this.byType;
-	}
-	
-	public boolean getAvailable() {
-		return this.available;
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java
deleted file mode 100644
index bef0141..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsApplication.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder;
-import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
-import org.codehaus.groovy.grails.exceptions.MoreThanOneActiveDataSourceException;
-import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfigurationUtil;
-import org.springframework.core.io.Resource;
-
-import java.io.IOException;
-import java.lang.reflect.Modifier;
-import java.util.*;
-
-/**
- * Default implementation of the GrailsApplication interface that manages application loading,
- * state, and artifact instances.
- *
- * @author Steven Devijver
- * @author Graeme Rocher
- *
- * @since Jul 2, 2005
- */
-public class DefaultGrailsApplication implements GrailsApplication {
-    private GroovyClassLoader cl = null;
-    private GrailsControllerClass[] controllerClasses = null;
-    private GrailsPageFlowClass[] pageFlows = null;
-    private GrailsDomainClass[] domainClasses = null;
-    private GrailsDataSource dataSource = null;
-    private GrailsServiceClass[] services = null;
-    private GrailsBootstrapClass[] bootstrapClasses = null;
-    private GrailsTagLibClass[] taglibClasses = null;
-
-    private Map controllerMap = null;
-    private Map domainMap = null;
-    private Map pageFlowMap = null;
-    private Map serviceMap = null;
-    private Map bootstrapMap = null;
-    private Map taglibMap = null;
-
-    private Class[] allClasses = null;
-
-
-    private static Log log = LogFactory.getLog(DefaultGrailsApplication.class);
-    private Map tag2libMap;
-
-
-    public DefaultGrailsApplication(final Class[] classes, GroovyClassLoader classLoader) {
-        if(classes == null)
-            throw new IllegalArgumentException("Constructor argument 'classes' cannot be null");
-
-        configureLoadedClasses(classes);
-        this.cl = classLoader;
-    }
-    public DefaultGrailsApplication(final Resource[] resources) throws IOException {
-        super();
-
-        log.debug("Loading Grails application.");
-
-        GrailsResourceLoader resourceLoader = new GrailsResourceLoader(resources);
-        GrailsResourceHolder resourceHolder = new GrailsResourceHolder();
-
-        this.cl = new GroovyClassLoader();
-        this.cl.setResourceLoader(resourceLoader);
-           Collection loadedResources = new ArrayList();
-
-            for (int i = 0; resources != null && i < resources.length; i++) {
-                log.debug("Loading groovy file :[" + resources[i].getFile().getAbsolutePath() + "]");
-                if (!loadedResources.contains(resources[i])) {
-                    try {
-                        String className = resourceHolder.getClassName(resources[i]);
-                        if(!StringUtils.isBlank(className)) {
-                            cl.loadClass(className,true,false);
-                            loadedResources = resourceLoader.getLoadedResources();
-                        }
-                    } catch (ClassNotFoundException e) {
-                        throw new org.codehaus.groovy.grails.exceptions.CompilationFailedException("Compilation error parsing file ["+resources[i].getFilename()+"]: " + e.getMessage(), e);
-                    }
-                }
-            }
-
-        // get all the classes that were loaded
-        if(log.isDebugEnabled())
-            log.debug( "loaded classes: ["+ArrayUtils.toString(this.cl.getLoadedClasses())+"]" );
-
-        Class[] classes = this.cl.getLoadedClasses();
-        this.allClasses = classes;
-        configureLoadedClasses(classes);
-    }
-
-    private void configureLoadedClasses(Class[] classes) {
-
-        // first load the domain classes
-        this.domainMap = new HashMap();
-        log.debug("Going to inspect domain classes.");
-        for (int i = 0; i < classes.length; i++) {
-            log.debug("Inspecting [" + classes[i].getName() + "]");
-            if (Modifier.isAbstract(classes[i].getModifiers())) {
-                log.debug("[" + classes[i].getName() + "] is abstract.");
-                continue;
-            }
-            // check that it is a domain class
-            if(GrailsClassUtils.isDomainClass(classes[i])) {
-                log.debug("[" + classes[i].getName() + "] is a domain class.");
-                GrailsDomainClass grailsDomainClass = new DefaultGrailsDomainClass(classes[i]);
-                this.domainMap.put(grailsDomainClass.getFullName(), grailsDomainClass);
-
-            } else {
-                log.debug("[" + classes[i].getName() + "] is not a domain class.");
-            }
-        }
-
-        this.controllerMap = new HashMap();
-        this.pageFlowMap = new HashMap();
-        this.serviceMap = new HashMap();
-        this.bootstrapMap = new HashMap();
-        this.taglibMap = new HashMap();
-        for (int i = 0; i < classes.length; i++) {
-            if (Modifier.isAbstract(classes[i].getModifiers())) {
-                continue;
-            }
-            if (GrailsClassUtils.isControllerClass(classes[i])  /* && not ends with FromController */) {
-                GrailsControllerClass grailsControllerClass = new DefaultGrailsControllerClass(classes[i]);
-                if (grailsControllerClass.getAvailable()) {
-                    this.controllerMap.put(grailsControllerClass.getFullName(), grailsControllerClass);
-                }
-            } else if (GrailsClassUtils.isPageFlowClass(classes[i])) {
-                GrailsPageFlowClass grailsPageFlowClass = new DefaultGrailsPageFlowClass(classes[i]);
-                if (grailsPageFlowClass.getAvailable()) {
-                    this.pageFlowMap.put(grailsPageFlowClass.getFullName(), grailsPageFlowClass);
-                }
-            } else if (GrailsClassUtils.isDataSource(classes[i])) {
-                GrailsDataSource tmpDataSource = new DefaultGrailsDataSource(classes[i]);
-                if (tmpDataSource.getAvailable()) {
-                    if (dataSource == null) {
-                        dataSource = tmpDataSource;
-                    } else {
-                        throw new MoreThanOneActiveDataSourceException("More than one active data source is configured!");
-                    }
-                }
-            } else if (GrailsClassUtils.isService(classes[i])) {
-                GrailsServiceClass grailsServiceClass = new DefaultGrailsServiceClass(classes[i]);
-                serviceMap.put(grailsServiceClass.getFullName(), grailsServiceClass);
-            }
-            else if(GrailsClassUtils.isBootstrapClass(classes[i])) {
-                GrailsBootstrapClass grailsBootstrapClass = new DefaultGrailsBootstrapClass(classes[i]);
-                this.bootstrapMap.put(grailsBootstrapClass.getFullName(),grailsBootstrapClass);
-            }
-            else if(GrailsClassUtils.isTagLibClass(classes[i])) {
-                GrailsTagLibClass grailsTagLibClass = new DefaultGrailsTagLibClass(classes[i]);
-                this.taglibMap.put(grailsTagLibClass.getFullName(),grailsTagLibClass);
-            }
-        }
-
-        this.controllerClasses = ((GrailsControllerClass[])controllerMap.values().toArray(new GrailsControllerClass[controllerMap.size()]));
-        this.pageFlows = ((GrailsPageFlowClass[])pageFlowMap.values().toArray(new GrailsPageFlowClass[pageFlowMap.size()]));
-        this.domainClasses = ((GrailsDomainClass[])this.domainMap.values().toArray(new GrailsDomainClass[domainMap.size()]));
-        this.services = ((GrailsServiceClass[])this.serviceMap.values().toArray(new GrailsServiceClass[serviceMap.size()]));
-        this.bootstrapClasses = ((GrailsBootstrapClass[])this.bootstrapMap.values().toArray(new GrailsBootstrapClass[bootstrapMap.size()]));
-        this.taglibClasses = ((GrailsTagLibClass[])this.taglibMap.values().toArray(new GrailsTagLibClass[taglibMap.size()]));
-
-        configureDomainClassRelationships();
-        configureTagLibraries();
-    }
-
-    public GrailsControllerClass addControllerClass(Class controllerClass) {
-        if (Modifier.isAbstract(controllerClass.getModifiers())) {
-            return null;
-        }
-        if (GrailsClassUtils.isControllerClass(controllerClass)) {
-            GrailsControllerClass grailsControllerClass = new DefaultGrailsControllerClass(controllerClass);
-            if (grailsControllerClass.getAvailable()) {
-                this.controllerMap.put(grailsControllerClass.getFullName(), grailsControllerClass);
-            }
-
-            // reset controller list
-            this.controllerClasses = ((GrailsControllerClass[])controllerMap.values().toArray(new GrailsControllerClass[controllerMap.size()]));
-            return grailsControllerClass;
-        }
-        else {
-            throw new GrailsConfigurationException("Cannot load controller class ["+controllerClass+"]. It is not a controller!");
-        }
-    }
-
-    public GrailsTagLibClass addTagLibClass(Class tagLibClass) {
-        if (Modifier.isAbstract(tagLibClass.getModifiers())) {
-            return null;
-        }
-        if (GrailsClassUtils.isTagLibClass(tagLibClass)) {
-            GrailsTagLibClass grailsTagLibClass = new DefaultGrailsTagLibClass(tagLibClass);
-            if (grailsTagLibClass.getAvailable()) {
-                this.taglibMap.put(grailsTagLibClass.getFullName(), grailsTagLibClass);
-            }
-
-            // reset taglib list
-            this.taglibClasses = ((GrailsTagLibClass[])this.taglibMap.values().toArray(new GrailsTagLibClass[taglibMap.size()]));
-            // reconfigure controller mappings
-            configureTagLibraries();
-
-            return grailsTagLibClass;
-        }
-        else {
-            throw new GrailsConfigurationException("Cannot load taglib class ["+tagLibClass+"]. It is not a taglib!");
-        }
-    }
-
-    public GrailsServiceClass addServiceClass(Class serviceClass) {
-        if (Modifier.isAbstract(serviceClass.getModifiers())) {
-            return null;
-        }
-        if (GrailsClassUtils.isService(serviceClass)) {
-            GrailsServiceClass grailsServiceClass = new DefaultGrailsServiceClass(serviceClass);
-            if (grailsServiceClass.getAvailable()) {
-                this.serviceMap.put(grailsServiceClass.getFullName(), grailsServiceClass);
-            }
-
-            // reset services list
-            this.services = ((GrailsServiceClass[])this.serviceMap.values().toArray(new GrailsServiceClass[serviceMap.size()]));
-            return grailsServiceClass;
-        }
-        else {
-            throw new GrailsConfigurationException("Cannot load service class ["+serviceClass+"]. It is not a valid service class!");
-        }
-    }
-
-    public GrailsDomainClass addDomainClass(Class domainClass) {
-      if (Modifier.isAbstract(domainClass.getModifiers())) {
-            return null;
-        }
-        if (GrailsClassUtils.isDomainClass(domainClass)) {
-            GrailsDomainClass grailsDomainClass = new DefaultGrailsDomainClass(domainClass);
-
-            this.domainMap.put(grailsDomainClass.getFullName(), grailsDomainClass);
-
-
-            // reset domain class list
-            this.domainClasses = ((GrailsDomainClass[])this.domainMap.values().toArray(new GrailsDomainClass[domainMap.size()]));
-            // reconfigure relationships
-            configureDomainClassRelationships();
-            
-            return grailsDomainClass;
-        }
-        else {
-            throw new GrailsConfigurationException("Cannot load domain class ["+domainClass+"]. It is not a valid domain class!");
-        }
-    }
-
-    public GrailsDomainClass addDomainClass(GrailsDomainClass domainClass) {
-        if(domainClass != null) {
-            this.domainMap.put(domainClass.getFullName(),domainClass);
-
-            // reset domain class list
-            this.domainClasses = ((GrailsDomainClass[])this.domainMap.values().toArray(new GrailsDomainClass[domainMap.size()]));
-           // if(!(domainClass instanceof ExternalGrailsDomainClass)) {
-                // reconfigure relationships
-                configureDomainClassRelationships();
-           // }
-        }
-        return domainClass;
-    }
-
-
-    public GrailsControllerClass getScaffoldingController(GrailsDomainClass domainClass) {
-        if(domainClass == null)
-            return null;
-
-        for (int i = 0; i < controllerClasses.length; i++) {
-            GrailsControllerClass controllerClass = controllerClasses[i];
-            if(controllerClass.isScaffolding()) {
-                Class scaffoldedClass = controllerClass.getScaffoldedClass();
-                if(scaffoldedClass != null) {
-                    if(domainClass.getClazz().getName().equals(scaffoldedClass.getName())) {
-                        return controllerClass;
-                    }
-                }
-                else if(domainClass.getName().equals(controllerClass.getName())) {
-                       return controllerClass;
-                }
-            }
-        }
-        return null;
-    }
-
-
-    /**
-     * Creates a map of tags to tag libraries
-     */
-    private void configureTagLibraries() {
-        this.tag2libMap = new HashMap();
-        for (int i = 0; i < taglibClasses.length; i++) {
-            GrailsTagLibClass taglibClass = taglibClasses[i];
-            for (Iterator j = taglibClass.getTagNames().iterator(); j.hasNext();) {
-                String tagName = (String) j.next();
-                if(!this.taglibMap.containsKey(tagName)) {
-                    this.tag2libMap.put(tagName,taglibClass);
-                }
-                else {
-                    GrailsTagLibClass current = (GrailsTagLibClass)this.taglibMap.get(tagName);
-                    if(!taglibClass.equals(current)) {
-                        this.tag2libMap.put(tagName,taglibClass);
-                    }
-                    else {
-                        throw new GrailsConfigurationException("Cannot configure tag library ["+taglibClass.getName()+"]. Library ["+current.getName()+"] already contains a tag called ["+tagName+"]");
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets up the relationships between the domain classes, this has to be done after
-     * the intial creation to avoid looping
-     *
-     */
-    private void configureDomainClassRelationships() {
-       GrailsDomainConfigurationUtil.configureDomainClassRelationships(this.domainClasses,this.domainMap);
-    }
-
-    public GrailsControllerClass[] getControllers() {
-        return this.controllerClasses;
-    }
-
-    public GrailsControllerClass getController(String name) {
-        return (GrailsControllerClass)this.controllerMap.get(name);
-    }
-
-    public GrailsControllerClass getControllerByURI(String uri) {
-        for (int i = 0; i < controllerClasses.length; i++) {
-            if (controllerClasses[i].mapsToURI(uri)) {
-                return controllerClasses[i];
-            }
-        }
-        return null;
-    }
-
-    public GrailsPageFlowClass getPageFlow(String fullname) {
-        return (GrailsPageFlowClass)this.pageFlowMap.get(fullname);
-    }
-
-    public GrailsPageFlowClass[] getPageFlows() {
-        return this.pageFlows;
-    }
-
-    public GroovyClassLoader getClassLoader() {
-        return this.cl;
-    }
-
-    public GrailsDomainClass[] getGrailsDomainClasses() {
-        return this.domainClasses;
-    }
-
-    public boolean isGrailsDomainClass(Class domainClass) {
-        if(domainClass == null)
-            return false;
-
-        if(domainMap.containsKey(domainClass.getName())) {
-            return true;
-        }
-        return false;  
-    }
-
-    public GrailsDomainClass getGrailsDomainClass(String name) {
-            return (GrailsDomainClass)this.domainMap.get(name);
-    }
-
-
-    public GrailsDataSource getGrailsDataSource() {
-        return this.dataSource;
-    }
-
-    public GrailsServiceClass[] getGrailsServiceClasses() {
-        return this.services;
-    }
-
-    public GrailsServiceClass getGrailsServiceClass(String name) {
-        return (GrailsServiceClass)this.serviceMap.get(name);
-    }
-
-    public Class[] getAllClasses() {
-        return this.allClasses;
-    }
-
-    public GrailsBootstrapClass[] getGrailsBootstrapClasses() {		//
-        return this.bootstrapClasses;
-    }
-
-    public GrailsTagLibClass[] getGrailsTabLibClasses() {
-        return this.taglibClasses;
-    }
-
-    public GrailsTagLibClass getGrailsTagLibClass(String tagLibName) {
-        return (GrailsTagLibClass)this.taglibMap.get(tagLibName);
-    }
-
-    public GrailsTagLibClass getTagLibClassForTag(String tagName) {
-        return (GrailsTagLibClass)this.tag2libMap.get(tagName);
-    }
-
-
-
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsBootstrapClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsBootstrapClass.java
deleted file mode 100644
index affbf18..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsBootstrapClass.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.codehaus.groovy.grails.commons;
-
-import javax.servlet.ServletContext;
-
-import groovy.lang.Closure;
-
-public class DefaultGrailsBootstrapClass extends AbstractGrailsClass implements GrailsBootstrapClass {
-
-	
-	public static final String BOOT_STRAP = "BootStrap";
-	
-	private static final String INIT_CLOSURE = "init";
-	private static final String DESTROY_CLOSURE = "destroy";
-	private static final Closure BLANK_CLOSURE = new Closure(DefaultGrailsBootstrapClass.class) {
-		public Object call(Object[] args) {
-			return null;
-		}		
-	};
-
-	
-	public DefaultGrailsBootstrapClass(Class clazz) {
-		super(clazz, BOOT_STRAP);
-	}
-
-	public Closure getInitClosure() {
-		Object obj = getReference().getPropertyValue(INIT_CLOSURE);
-		if(obj instanceof Closure) {
-			return (Closure)obj;
-		}
-		return BLANK_CLOSURE;
-	}
-
-	public Closure getDestroyClosure() {
-		Object obj = getReference().getPropertyValue(DESTROY_CLOSURE);
-		if(obj instanceof Closure) {
-			return (Closure)obj;
-		}
-		return BLANK_CLOSURE;
-	}
-
-	public void callInit(ServletContext servletContext) {
-		Closure init = getInitClosure();
-		init.call( new Object[] { servletContext } );
-	}
-
-	public void callDestroy() {
-		Closure destroy = getInitClosure();
-		destroy.call();
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClass.java
deleted file mode 100644
index a14ba1a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClass.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.Closure;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.codehaus.groovy.grails.scaffolding.DefaultGrailsScaffolder;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-
-import java.beans.PropertyDescriptor;
-import java.util.*;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class DefaultGrailsControllerClass extends AbstractInjectableGrailsClass
-		implements GrailsControllerClass {
-
-    public static final String CONTROLLER = "Controller";
-
-    private static final String SLASH = "/";
-    private static final String VIEW = "View";
-    private static final String TYPED_VIEWS = "TypedViews";
-    private static final String DEFAULT_CLOSURE_PROPERTY = "defaultAction";
-	private static final String SCAFFOLDING_PROPERTY = "scaffold";
-
-	
-
-	private Map uri2viewMap = null;
-	private Map uri2closureMap = null;
-	private Map viewNames = null;
-	private String[] uris = null;
-    private String uri;
-
-    private boolean scaffolding;
-    private Class scaffoldedClass;
-
-
-    public DefaultGrailsControllerClass(Class clazz) {
-        super(clazz, CONTROLLER);
-        this.uri = SLASH + (StringUtils.isNotBlank(getPackageName()) ? getPackageName().replace('.', '/')  + SLASH : "" ) + WordUtils.uncapitalize(getName());
-        String defaultActionName = (String)getPropertyValue(DEFAULT_CLOSURE_PROPERTY, String.class);
-        if(defaultActionName == null) {
-            defaultActionName = INDEX_ACTION;
-        }
-        Boolean tmp = (Boolean)getPropertyValue(SCAFFOLDING_PROPERTY, Boolean.class);
-        if(tmp != null) {
-            this.scaffolding = tmp.booleanValue();
-        }
-        this.scaffoldedClass = (Class)getPropertyValue(SCAFFOLDING_PROPERTY, Class.class);
-        if(this.scaffoldedClass != null) {
-            this.scaffolding = true;
-        }
-
-        Collection closureNames = new ArrayList();
-        this.uri2viewMap = new HashMap();
-        this.uri2closureMap = new HashMap();
-        this.viewNames = new HashMap();
-
-        if(this.scaffolding) {
-            for(int i = 0; i < DefaultGrailsScaffolder.ACTION_NAMES.length;i++) {
-                closureNames.add(DefaultGrailsScaffolder.ACTION_NAMES[i]);
-                String viewName = (String)getPropertyValue(DefaultGrailsScaffolder.ACTION_NAMES[i] + VIEW, String.class);
-                // if no explicity view name is specified just use action name
-                if(viewName == null) {
-                    viewName =DefaultGrailsScaffolder.ACTION_NAMES[i];
-                }
-                String tmpUri = uri + SLASH + DefaultGrailsScaffolder.ACTION_NAMES[i];
-                String viewUri = uri + SLASH + viewName;
-                if (StringUtils.isNotBlank(viewName)) {
-                    this.uri2viewMap.put(tmpUri, viewUri);
-                    this.viewNames.put( DefaultGrailsScaffolder.ACTION_NAMES[i], viewUri );
-                }
-                this.uri2closureMap.put(tmpUri, DefaultGrailsScaffolder.ACTION_NAMES[i]);
-                this.uri2closureMap.put(tmpUri + "/**", DefaultGrailsScaffolder.ACTION_NAMES[i]);
-            }
-        }
-
-        PropertyDescriptor[] propertyDescriptors = getReference().getPropertyDescriptors();
-        for (int i = 0; i < propertyDescriptors.length; i++) {
-            PropertyDescriptor propertyDescriptor = propertyDescriptors[i];
-            Closure closure = (Closure)getPropertyValue(propertyDescriptor.getName(), Closure.class);
-            if (closure != null) {
-                closureNames.add(propertyDescriptor.getName());
-                String closureName = propertyDescriptor.getName();
-                String viewName = (String)getPropertyValue(propertyDescriptor.getName() + VIEW, String.class);
-                // if no explicity view name is specified just use property name
-                if(viewName == null) {
-                    viewName = propertyDescriptor.getName();
-                }
-                Map typedViews = (Map)getPropertyValue(propertyDescriptor.getName() + TYPED_VIEWS, Map.class);
-                String tmpUri = uri + SLASH + propertyDescriptor.getName();
-                String viewUri = uri + SLASH + viewName;
-                if (StringUtils.isNotBlank(viewName)) {
-                    this.uri2viewMap.put(tmpUri, viewUri);
-                    this.viewNames.put( closureName, viewUri );
-                }
-                closure = (Closure)getPropertyValue(propertyDescriptor.getName(), Closure.class);
-                if (closure != null) {
-                    this.uri2closureMap.put(tmpUri, propertyDescriptor.getName());
-                    this.uri2closureMap.put(tmpUri + "/**", propertyDescriptor.getName());
-                    // TODO: This code is likely broken and needs re-thinking as there may be a better way to
-                    // handle typed views
-                    if (typedViews != null) {
-                        for (Iterator iter = typedViews.keySet().iterator(); iter.hasNext();) {
-                            String viewType = (String)iter.next();
-                            String typedViewName = (String)typedViews.get(viewType);
-                            String typedUri = tmpUri + SLASH + viewType;
-                            this.uri2viewMap.put(typedUri, typedViewName);
-                            this.uri2closureMap.put(typedUri, propertyDescriptor.getName());
-                            if (defaultActionName != null && defaultActionName.equals(propertyDescriptor.getName())) {
-                                this.uri2closureMap.put(uri + SLASH + viewType, propertyDescriptor.getName());
-                                this.uri2viewMap.put(uri + SLASH + viewType, typedViewName);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (defaultActionName != null) {
-            this.uri2closureMap.put(uri, defaultActionName);
-            this.uri2closureMap.put(uri + SLASH, defaultActionName);
-            this.uri2viewMap.put(uri + SLASH, uri + SLASH + defaultActionName);
-            this.uri2viewMap.put(uri,uri + SLASH +  defaultActionName);
-            this.viewNames.put( defaultActionName, uri + SLASH + defaultActionName );
-        }
-
-        if (closureNames.size() == 1) {
-            String closureName = ((String)closureNames.iterator().next());
-            this.uri2closureMap.put(uri, this.uri2closureMap.values().iterator().next());
-            if (!this.uri2viewMap.isEmpty()) {
-                this.uri2viewMap.put(uri, this.uri2viewMap.values().iterator().next());
-            }
-            Map typedViews = (Map)getPropertyValue(closureName + TYPED_VIEWS, Map.class);
-            if (typedViews != null) {
-                for (Iterator iter = typedViews.keySet().iterator(); iter.hasNext();) {
-                    String viewType = (String)iter.next();
-                    String typedViewName = (String)typedViews.get(viewType);
-                    this.uri2closureMap.put(uri + SLASH + viewType, this.uri2closureMap.values().iterator().next());
-                    this.uri2viewMap.put(uri + SLASH + viewType, typedViewName);
-                }
-            }
-        }
-        this.uris  = (String[])this.uri2closureMap.keySet().toArray(new String[this.uri2closureMap.keySet().size()]);
-    }
-
-	public String[] getURIs() {
-		return this.uris;
-	}
-
-	public boolean mapsToURI(String uri) {
-		for (int i = 0; i < uris.length; i++) {
-			if (uris[i].equals(uri)) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	public String getViewByURI(String uri) {
-		return (String)this.uri2viewMap.get(uri);
-	}
-	
-	public String getClosurePropertyName(String uri) {
-		return (String)this.uri2closureMap.get(uri);
-	}
-
-	public String getViewByName(String viewName) {
-        if(this.viewNames.containsKey(viewName)) {
-            return (String)this.viewNames.get(viewName);
-        }
-        else {
-             return this.uri + SLASH + viewName;
-        }
-    }
-
-	public boolean isScaffolding() {
-		return this.scaffolding;
-	}
-
-    public Class getScaffoldedClass() {
-        return this.scaffoldedClass;
-    }
-
-    /**
-     * @param scaffolding The scaffolding to set.
-     */
-    public void setScaffolding(boolean scaffolding) {
-        this.scaffolding = scaffolding;
-    }
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSource.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSource.java
deleted file mode 100644
index 3e058f0..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSource.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import java.util.Properties;
-
-import org.codehaus.groovy.grails.exceptions.DataSourceRequiredPropertyMissingException;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @author Graeme Rocher
- *
- * @since Aug 6, 2005
- */
-public class DefaultGrailsDataSource extends AbstractInjectableGrailsClass
-		implements GrailsDataSource {
-
-	public static final String DATA_SOURCE = "DataSource";
-	private static final String DRIVER_CLASS_NAME = "driverClassName";
-	private static final String URL = "url";
-	private static final String USERNAME = "username";
-	private static final String PASSWORD = "password";
-	private static final String POOLING = "pooling";
-	private static final String DB_CREATE = "dbCreate";
-	private static final String CONFIG_CLASS = "configClass";
-
-    private boolean pooled = true;
-	private String driverClassName = null;
-	private String url = null;
-	private String username = null;
-	private String password = null;
-	private String dbCreate = null;
-    private Class configClass = null;
-
-
-    public DefaultGrailsDataSource(Class clazz) {
-        super(clazz, DATA_SOURCE);
-
-        configClass = (Class)getPropertyValue(CONFIG_CLASS,Class.class);
-
-        if (getPropertyValue(POOLING, boolean.class) != null) {
-            this.pooled = getPropertyValue(POOLING, boolean.class).equals(Boolean.TRUE) ? true : false;
-        }
-        if (getPropertyValue(DB_CREATE, String.class) != null) {
-            String _dbCreate = (String)getPropertyValue(DB_CREATE, String.class);
-            if(_dbCreate.equals( "create-drop" ) || _dbCreate.equals("create") || _dbCreate.equals("update"))
-                this.dbCreate = _dbCreate;
-        }
-
-        if (getPropertyValue(DRIVER_CLASS_NAME, String.class) != null) {
-            this.driverClassName = (String)getPropertyValue(DRIVER_CLASS_NAME, String.class);
-        } else {
-            throw new DataSourceRequiredPropertyMissingException("Required property [" + DRIVER_CLASS_NAME + "] is missing on [" + getFullName() + "]!");
-        }
-
-        if (getPropertyValue(URL, String.class) != null) {
-            this.url = (String)getPropertyValue(URL, String.class);
-        } else {
-            throw new DataSourceRequiredPropertyMissingException("Required property [" + URL + "] is missing on [" + getFullName() + "]!");
-        }
-
-        if (getPropertyValue(USERNAME, String.class) != null) {
-            this.username = (String)getPropertyValue(USERNAME, String.class);
-        } else {
-            throw new DataSourceRequiredPropertyMissingException("Required property [" + USERNAME + "] is missing on [" + getFullName() + "]!");
-        }
-
-        if (getPropertyValue(PASSWORD, String.class) != null) {
-            this.password = (String)getPropertyValue(PASSWORD, String.class);
-        } else {
-            throw new DataSourceRequiredPropertyMissingException("Required property [" + PASSWORD + "] is missing on [" + getFullName() + "]!");
-        }
-    }
-
-	public boolean isPooled() {
-		return this.pooled;
-	}
-
-	public String getDriverClassName() {
-		return this.driverClassName;
-	}
-
-	public String getUrl() {
-		return this.url;
-	}
-
-	public String getUsername() {
-		return this.username;
-	}
-
-	public String getPassword() {
-		return this.password;
-	}
-
-	public Properties getOtherProperties() {
-		return null;
-	}
-
-	public String getDbCreate() {
-		return dbCreate;
-	}
-
-    public Class getConfigurationClass() {
-        return this.configClass;
-    }
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.java
deleted file mode 100644
index 0b4748a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClass.java
+++ /dev/null
@@ -1,470 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import org.apache.commons.lang.ClassUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.metaclass.DynamicMethods;
-import org.codehaus.groovy.grails.commons.metaclass.GroovyDynamicMethodsInterceptor;
-import org.codehaus.groovy.grails.exceptions.GrailsDomainException;
-import org.codehaus.groovy.grails.exceptions.InvalidPropertyException;
-import org.codehaus.groovy.grails.validation.metaclass.ConstraintsDynamicProperty;
-import org.springframework.validation.Validator;
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.util.*;
-
-/**
- * @author Graeme Rocher
- * @since 05-Jul-2005
- */
-public class DefaultGrailsDomainClass extends AbstractGrailsClass  implements GrailsDomainClass {
-
-	private static final Log LOG  = LogFactory.getLog(DefaultGrailsDomainClass.class);
-
-	
-	private GrailsDomainClassProperty identifier;
-	private GrailsDomainClassProperty version;
-	private GrailsDomainClassProperty[] properties;
-	private GrailsDomainClassProperty[] persistantProperties;
-	private Map propertyMap;
-	private Map relationshipMap;
-	private Map constraints = new HashMap();
-	private Validator validator;
-	private String mappedBy = GrailsDomainClass.GORM;
-    private List owners = new ArrayList();
-	
-	public DefaultGrailsDomainClass(Class clazz) {
-		super(clazz, "");
-		
-		PropertyDescriptor[] propertyDescriptors = getReference().getPropertyDescriptors();
-		
-		this.propertyMap = new HashMap();
-		this.relationshipMap = (Map)getPropertyValue( GrailsDomainClassProperty.RELATIONSHIPS, Map.class );
-		if(this.relationshipMap == null) {
-			this.relationshipMap = new HashMap();
-		}
-		// process the constraints
-		evaluateConstraints();
-		
-		// get mapped by setting
-		if(getPropertyValue(GrailsDomainClassProperty.MAPPED_BY, String.class) != null)
-			this.mappedBy = (String)getPropertyValue(GrailsDomainClassProperty.MAPPED_BY, String.class);
-
-        Class belongsTo = (Class)getPropertyValue(GrailsDomainClassProperty.BELONGS_TO, Class.class);
-        if(belongsTo == null) {
-            List ownersProp = (List)getPropertyValue(GrailsDomainClassProperty.BELONGS_TO, List.class);
-            if(ownersProp != null) {
-                this.owners = ownersProp;
-            }
-        }
-        else {
-            this.owners = new ArrayList();
-            this.owners.add(belongsTo);
-        }
-
-        // First go through the properties of the class and create domain properties
-		// populating into a map
-		for(int i = 0; i < propertyDescriptors.length; i++) {
-			
-			PropertyDescriptor descriptor = propertyDescriptors[i];
-				// ignore certain properties
-				if(!descriptor.getName().equals( GrailsDomainClassProperty.META_CLASS ) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.CLASS ) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.TRANSIENT) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.RELATIONSHIPS) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.EVANESCENT) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.OPTIONAL) &&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.CONSTRAINTS )&&
-				   !descriptor.getName().equals( GrailsDomainClassProperty.MAPPED_BY ) &&
-                   !descriptor.getName().equals( GrailsDomainClassProperty.BELONGS_TO ) )  {
-					
-					
-					GrailsDomainClassProperty property = new DefaultGrailsDomainClassProperty(this, descriptor);
-					this.propertyMap.put(property.getName(), property);
-					
-					if(property.isIdentity()) {
-						this.identifier = property;				
-					}
-					else if(property.getName().equals( GrailsDomainClassProperty.VERSION )) {
-						this.version = property;
-					}
-			}
-			
-		}
-		// if no identifier property throw exception
-		if(this.identifier == null) {
-			throw new GrailsDomainException("Identity property not found, but required in domain class ["+getFullName()+"]" );
-		}
-		// if no version property throw exception
-		if(this.version == null) {
-			throw new GrailsDomainException("Version property not found, but required in domain class ["+getFullName()+"]" );
-		}		
-		// set properties from map values
-		this.properties = (GrailsDomainClassProperty[])this.propertyMap.values().toArray( new GrailsDomainClassProperty[this.propertyMap.size()] );
-		
-		// establish relationships
-		establishRelationships();
-
-		
-		// set persistant properties
-		Collection tempList = new ArrayList();
-		for(Iterator i = this.propertyMap.values().iterator();i.hasNext();) {
-			GrailsDomainClassProperty currentProp = (GrailsDomainClassProperty)i.next();
-			if(currentProp.isPersistant() && !currentProp.isIdentity() && !currentProp.getName().equals( GrailsDomainClassProperty.VERSION )) {
-				tempList.add(currentProp);
-			}
-		}
-		this.persistantProperties = (GrailsDomainClassProperty[])tempList.toArray( new GrailsDomainClassProperty[tempList.size()]);		
-	}
-	
-	/**
-	 * Evaluates the constraints closure to build the list of constraints
-	 *
-	 */
-	private void evaluateConstraints() {
-		Closure constraintsClosure = (Closure)getPropertyValue( GrailsDomainClassProperty.CONSTRAINTS, Closure.class );
-		if(constraintsClosure != null) {
-			GroovyObject instance = (GroovyObject)getReference().getWrappedInstance();
-			try {
-				DynamicMethods interceptor = new GroovyDynamicMethodsInterceptor(instance);
-				interceptor.addDynamicProperty( new ConstraintsDynamicProperty() );
-				
-				this.constraints = (Map)instance.getProperty(GrailsDomainClassProperty.CONSTRAINTS);				
-				
-			} catch (IntrospectionException e) {
-				LOG.error("Introspection error reading domain class ["+getFullName()+"] constraints: " + e.getMessage(), e);
-			}
-		}		
-	}
-
-	/**
-	 * Calculates the relationship type based other types referenced
-	 *
-	 */
-	private void establishRelationships() {
-		for(Iterator i = this.propertyMap.values().iterator();i.hasNext();  ) {
-			DefaultGrailsDomainClassProperty currentProp = (DefaultGrailsDomainClassProperty)i.next();
-			Class currentPropType = currentProp.getType();
-			// establish if the property is a one-to-many
-			// if it is a Set and there are relationships defined
-			// and it is defined as persistent
-			if(	currentPropType.equals( Set.class ) && 
-				currentProp.isPersistant() ) {
-				
-				establishRelationshipForSet( currentProp);
-			}
-			// otherwise if the type is a domain class establish relationship
-			else if(GrailsClassUtils.isDomainClass(currentPropType) && 
-					currentProp.isPersistant()) {
-				
-				establishDomainClassRelationship( currentProp );
-			}			
-		}
-
-	}
-	
-	/**
-	 * Establishes a relationship for a java.util.Set
-	 *
-	 * @param property
-	 */
-	private void establishRelationshipForSet(DefaultGrailsDomainClassProperty property) {
-		// is it a relationship
-		Class relatedClassType = getRelatedClassType( property.getName() );
-		
-		if(relatedClassType != null) {
-			// set the referenced type in the property
-			property.setReferencedPropertyType(relatedClassType);
-			// if the related type is a domain class
-			// then figure out what kind of relationship it is
-			if(GrailsClassUtils.isDomainClass( relatedClassType )) {
-				
-				
-				// check the relationship defined in the referenced type
-				// if it is also a Set/domain class etc.
-				Map relatedClassRelationships = (Map)GrailsClassUtils.getPropertyValue( relatedClassType, GrailsDomainClassProperty.RELATIONSHIPS, Map.class );
-				Class relatedClassPropertyType = null;
-				
-				// if the related type has a relationships map it may be a many-to-many
-				// figure out if there is a many-to-many relationship defined
-				if(	relatedClassRelationships != null && 
-					!relatedClassRelationships.isEmpty() ) {
-					
-					String relatedClassPropertyName = null;
-					// retrieve the relationship property
-					for(Iterator i = relatedClassRelationships.keySet().iterator();i.hasNext();) {
-						String currentKey = (String)i.next();
-						Class currentClass = (Class) relatedClassRelationships.get( currentKey );
-						if(currentClass.getName().equals(  getClazz().getName() )) {
-							relatedClassPropertyName = currentKey;
-							break;
-						}
-					}
-															
-					// if there is one defined get the type
-					if(relatedClassPropertyName != null) {
-						relatedClassPropertyType = GrailsClassUtils.getProperyType( relatedClassType, relatedClassPropertyName);								
-					}
-				}
-				// otherwise figure out if there is a one-to-many relationship by retrieving any properties that are of the related type
-				// if there is more than one property then (for the moment) ignore the relationship
-				if(relatedClassPropertyType == null) {
-					PropertyDescriptor[] descriptors = GrailsClassUtils.getPropertiesOfType(relatedClassType, getClazz());
-					if(descriptors.length == 1) {
-						relatedClassPropertyType = descriptors[0].getPropertyType();
-					}					
-				}	
-				
-				establishRelationshipForSetToType(property,relatedClassPropertyType);
-			}
-			// otherwise set it to not persistent as you can't persist
-			// relationships to non-domain classes
-			else {
-				property.setPersistant(false);
-			}								
-		}
-		else {
-			// no relationship defined for set. 
-			// set not persistent
-			property.setPersistant(false);
-		}
-		
-	}
-
-	/**
-	 * Establishes whether the relationship is a bi-directional or uni-directional one-to-many
-	 * and applies the appropriate settings to the specified property
-	 * 
-	 * @param property The property to apply settings to
-	 * @param relatedClassPropertyType The related type
-	 */	
-	private void establishRelationshipForSetToType(DefaultGrailsDomainClassProperty property, Class relatedClassPropertyType) {
-		
-		if(relatedClassPropertyType == null) {
-			// uni-directional one-to-many
-			property.setOneToMany(true);			
-			property.setBidirectional(false);
-		}		
-		else if( relatedClassPropertyType.equals( Set.class ) ){
-			// many-to-many
-			property.setManyToMany(true);
-			property.setBidirectional(true);
-		}
-		else if( GrailsClassUtils.isDomainClass( relatedClassPropertyType ) ) {
-			// bi-directional one-to-many
-			property.setOneToMany( true );
-			property.setBidirectional( true );
-		}
-	}
-
-	
-	/**
-	 * Establish relationship with related domain class
-	 * 
-	 * @param property
-	 */
-	private void establishDomainClassRelationship(DefaultGrailsDomainClassProperty property) {
-		Class propType = property.getType();
-		// establish relationship to type
-		Map relatedClassRelationships = (Map)GrailsClassUtils.getPropertyValue( propType, GrailsDomainClassProperty.RELATIONSHIPS, Map.class );		
-		Class relatedClassPropertyType = null;
-		
-		// if there is a relationships map use that to find out 
-		// whether it is mapped to a Set
-		if(	relatedClassRelationships != null &&	
-			!relatedClassRelationships.isEmpty() ) {
-
-									
-			String relatedClassPropertyName = null;
-			// retrieve the property name
-			for(Iterator i = relatedClassRelationships.keySet().iterator();i.hasNext();) {
-				String currentKey = (String)i.next();
-				Class currentClass = (Class)relatedClassRelationships.get( currentKey );
-				if(property.getDomainClass().getClazz().getName().equals(  currentClass.getName()  )) {
-					relatedClassPropertyName = currentKey;
-					break;
-				}					
-			}
-			// get the type of the property												
-			relatedClassPropertyType = GrailsClassUtils.getProperyType( propType, relatedClassPropertyName );									
-		}
-		// otherwise retrieve all the properties of the type from the associated class
-		if(relatedClassPropertyType == null) {
-			PropertyDescriptor[] descriptors = GrailsClassUtils.getPropertiesOfType(propType, getClazz());
-			
-			// if there is only one then the association is established
-			if(descriptors.length == 1) {
-				relatedClassPropertyType = descriptors[0].getPropertyType();
-			}
-		}
-		
-		
-		//	establish relationship based on this type
-		establishDomainClassRelationshipToType( property, relatedClassPropertyType );		
-	}
-
-	/**
-	 * @param property
-	 * @param relatedClassPropertyType
-	 */
-	private void establishDomainClassRelationshipToType(DefaultGrailsDomainClassProperty property, Class relatedClassPropertyType) {
-		// uni-directional one-to-one
-		if(relatedClassPropertyType == null) {
-			property.setOneToOne(true);
-			property.setBidirectional(false);
-		}
-		// bi-directional many-to-one
-		else if(relatedClassPropertyType.equals( Set.class )) {
-			property.setManyToOne(true);
-			property.setBidirectional(true);
-		}
-		// bi-directional one-to-one
-		else if( GrailsClassUtils.isDomainClass( relatedClassPropertyType ) ) {
-			property.setOneToOne(true);
-			property.setBidirectional(true);
-		}
-	}
-
-
-    public boolean isOwningClass(Class domainClass) {
-        return this.owners.contains(domainClass);
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getProperties()
-      */
-    public GrailsDomainClassProperty[] getProperties() {
-        return this.properties;
-    }
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getIdentifier()
-	 */
-	public GrailsDomainClassProperty getIdentifier() {
-		return this.identifier;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getVersion()
-	 */
-	public GrailsDomainClassProperty getVersion() {
-		return this.version;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getPersistantProperties()
-	 */
-	public GrailsDomainClassProperty[] getPersistantProperties() {
-		return this.persistantProperties;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getPropertyByName(java.lang.String)
-	 */
-	public GrailsDomainClassProperty getPropertyByName(String name) {
-		if(this.propertyMap.containsKey(name)) {
-			return (GrailsDomainClassProperty)this.propertyMap.get(name);
-		}
-		else {
-			throw new InvalidPropertyException("No property found for name ["+name+"]");
-		}
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getFieldName(java.lang.String)
-	 */
-	public String getFieldName(String propertyName) {
-		return getPropertyByName(propertyName).getFieldName();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.AbstractGrailsClass#getName()
-	 */
-	public String getName() {
-		return ClassUtils.getShortClassName(super.getName());
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#getTableName()
-	 */
-	public String getTableName() {
-		return ClassUtils.getShortClassName(getName()).toUpperCase();
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#isOneToMany(java.lang.String)
-	 */
-	public boolean isOneToMany(String propertyName) {
-		return getPropertyByName(propertyName).isOneToMany();
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClass#isManyToOne(java.lang.String)
-	 */
-	public boolean isManyToOne(String propertyName) {
-		return getPropertyByName(propertyName).isManyToOne();
-	}
-	
-	protected Object getPropertyValue(String name, Class type) {
-		return super.getPropertyValue(name,type);
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#getRelationshipType(java.lang.String)
-	 */
-	public Class getRelatedClassType(String propertyName) {		
-		return (Class)this.relationshipMap.get(propertyName);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#getPropertyName()
-	 */
-	public String getPropertyName() {
-        return GrailsClassUtils.getPropertyNameRepresentation(getClazz());
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#isBidirectional()
-	 */
-	public boolean isBidirectional(String propertyName) {
-		return getPropertyByName(propertyName).isBidirectional();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#getConstraints()
-	 */
-	public Map getConstrainedProperties() {
-		return Collections.unmodifiableMap(this.constraints);
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#getValidator()
-	 */
-	public Validator getValidator() {
-		return this.validator;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#setValidator(Validator validator)
-	 */
-	public void setValidator(Validator validator) {
-		this.validator = validator;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClass#getMappedBy()
-	 */	
-	public String getMappedBy() {
-		return this.mappedBy;
-	}	
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClassProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClassProperty.java
deleted file mode 100644
index 6255b5d..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDomainClassProperty.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import org.apache.commons.lang.ClassUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-import java.beans.PropertyDescriptor;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Graeme Rocher
- * @since 05-Jul-2005
- */
-public class DefaultGrailsDomainClassProperty implements GrailsDomainClassProperty {
-
-	
-	private GrailsDomainClass domainClass;
-    private boolean persistant;
-	private boolean optional;
-	private boolean identity;
-	private boolean oneToMany;
-	private String name;
-	private Class type;
-	private boolean manyToMany;
-	private boolean manyToOne;
-	private boolean oneToOne;
-
-	private boolean bidirectional;
-
-	private Class referencedPropertyType;
-	private GrailsDomainClass referencedDomainClass;
-	private GrailsDomainClassProperty otherSide;
-    private String naturalName;
-
-
-    public DefaultGrailsDomainClassProperty(DefaultGrailsDomainClass domainClass, PropertyDescriptor descriptor)  {
-        this.domainClass = domainClass;
-        // required by default
-        this.optional = false;
-        // persistant by default
-        this.persistant = true;
-        this.name = descriptor.getName();
-        this.naturalName = GrailsClassUtils.getNaturalName(descriptor.getName());
-        this.type = descriptor.getPropertyType();
-        this.identity = descriptor.getName().equals( IDENTITY );
-        // get the not required descritor from the owner bean
-        List optionalProps;
-        List transientProps;
-
-        optionalProps = (List)domainClass.getPropertyValue( OPTIONAL, List.class );
-        transientProps= (List)domainClass.getPropertyValue( TRANSIENT, List.class );
-
-        // Undocumented feature alert! Steve insisted on this :-)
-        List evanescent = (List)domainClass.getPropertyValue( EVANESCENT, List.class );
-        if(evanescent != null) {
-            if(transientProps == null)
-                transientProps = new ArrayList();
-
-            transientProps.addAll(evanescent);
-        }
-        // establish of property is required
-        if(optionalProps != null) {
-            for(Iterator i = optionalProps.iterator();i.hasNext();) {
-
-                // make sure its a string otherwise ignore. Note: Maybe put a warning here?
-                Object currentObj = i.next();
-                if(currentObj instanceof String) {
-                    String propertyName = (String)currentObj;
-                    // if the property name in the not required list
-                    // matches this property name set not required
-                    if(propertyName.equals( this.name )) {
-                        this.optional = true;
-                        break;
-                    }
-                }
-            }
-        }
-        // establish if property is persistant
-        if(transientProps != null) {
-            for(Iterator i = transientProps.iterator();i.hasNext();) {
-
-                // make sure its a string otherwise ignore. Note: Again maybe a warning?
-                Object currentObj = i.next();
-                if(currentObj instanceof String) {
-                    String propertyName = (String)currentObj;
-                    // if the property name is on the not persistant list
-                    // then set persistant to false
-                    if(propertyName.equals( this.name )) {
-                        this.persistant = false;
-                        break;
-                    }
-                }
-            }
-        }
-
-    }
-	
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#getName()
-	 */
-	public String getName() {
-		return this.name;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#getType()
-	 */
-	public Class getType() {
-		return this.type;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isPersistant()
-	 */
-	public boolean isPersistant() {
-		return this.persistant;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isRequired()
-	 */
-	public boolean isOptional() {
-		return this.optional;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isIdentity()
-	 */
-	public boolean isIdentity() {
-		return this.identity;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isOneToMany()
-	 */
-	public boolean isOneToMany() {
-		return this.oneToMany;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isManyToOne()
-	 */
-	public boolean isManyToOne() {
-		return this.manyToOne;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#getFieldName()
-	 */
-	public String getFieldName() {
-		return getName().toUpperCase();
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.domain.GrailsDomainClassProperty#isOneToOne()
-	 */
-	public boolean isOneToOne() {
-		return this.oneToOne;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#getDomainClass()
-	 */
-	public GrailsDomainClass getDomainClass() {
-		return this.domainClass;
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#isManyToMany()
-	 */
-	public boolean isManyToMany() {
-		return this.manyToMany;
-	}
-
-	/**
-	 * @param manyToMany The manyToMany to set.
-	 */
-	protected void setManyToMany(boolean manyToMany) {
-		this.manyToMany = manyToMany;
-	}
-
-	/**
-	 * @param oneToMany The oneToMany to set.
-	 */
-	protected void setOneToMany(boolean oneToMany) {
-		this.oneToMany = oneToMany;
-	}
-
-
-	/**
-	 * @param manyToOne The manyToOne to set.
-	 */
-	protected void setManyToOne(boolean manyToOne) {
-		this.manyToOne = manyToOne;
-	}
-
-
-	/**
-	 * @param oneToOne The oneToOne to set.
-	 */
-	protected void setOneToOne(boolean oneToOne) {
-		this.oneToOne = oneToOne;
-	}
-
-
-	/**
-	 * @param persistant The persistant to set.
-	 */
-	protected void setPersistant(boolean persistant) {
-		this.persistant = persistant;
-	}
-
-	
-	/**
-	 * Sets whether the relationship is bidirectional or not
-	 * @param bidirectional
-	 */
-	protected void setBidirectional(boolean bidirectional) {
-		this.bidirectional = bidirectional;
-	}
-
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#getTypePropertyName()
-	 */
-	public String getTypePropertyName() {	
-		String shortTypeName = ClassUtils.getShortClassName( this.type );
-		return shortTypeName.substring(0,1).toLowerCase() + shortTypeName.substring(1);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#getReferencedPropertyType()
-	 */
-	public Class getReferencedPropertyType() {
-		if(this.type.equals( Set.class ) && this.referencedPropertyType != null) {
-			return this.referencedPropertyType;
-		}
-		else {
-			return getType();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#isBidirectional()
-	 */
-	public boolean isBidirectional() {
-		return this.bidirectional;
-	}
-
-	/**
-	 * Sets the referenced property type of this property
-	 * @param referencedPropertyType
-	 */
-	protected void setReferencedPropertyType(Class referencedPropertyType) {
-		this.referencedPropertyType = referencedPropertyType;
-	}
-
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#isAssociation()
-	 */
-
-	public GrailsDomainClass getReferencedDomainClass() {
-		return this.referencedDomainClass;
-	}
-
-
-	public void setReferencedDomainClass(GrailsDomainClass referencedDomainClass) {
-		if(referencedDomainClass != null) {
-			this.referencedDomainClass = referencedDomainClass;
-			this.referencedPropertyType = referencedDomainClass.getClazz();
-		}
-	}
-
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#isAssociation()
-	 */
-	public boolean isAssociation() {
-        return isOneToMany() ||
-                isOneToOne() ||
-                isManyToOne() ||
-                isManyToMany();
-	}
-
-    public String getNaturalName() {
-        return this.naturalName;
-    }
-
-
-    /* (non-Javadoc)
-      * @see java.lang.Object#toString()
-      */
-    public String toString() {
-        String assType = null;
-        if(isManyToMany()) {
-            assType = "many-to-many";
-        }
-        else if(isOneToMany()) {
-            assType = "one-to-many";
-        }
-        else if(isOneToOne()) {
-            assType = "one-to-one";
-        }
-        else if(isManyToOne()) {
-            assType = "many-to-one";
-        }
-        return new ToStringBuilder(this)
-                        .append("name", this.name)
-                        .append("type", this.type)
-                        .append("persistent", isPersistant())
-                        .append("optional", isOptional())
-                        .append("association", isAssociation())
-                        .append("bidirectional", isBidirectional())
-                        .append("association-type", assType)
-                        .toString();
-    }
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.commons.GrailsDomainClassProperty#getOtherSide()
-	 */
-	public GrailsDomainClassProperty getOtherSide() {
-		return this.otherSide;
-	}
-
-
-	public void setOtherSide(GrailsDomainClassProperty property) {
-		this.otherSide = property;
-	}
-
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsPageFlowClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsPageFlowClass.java
deleted file mode 100644
index a269ab6..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsPageFlowClass.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import grails.pageflow.Flow;
-
-import java.lang.Class;
-import java.lang.String;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.codehaus.groovy.grails.exceptions.RequiredPropertyMissingException;
-
-/**
- *
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public class DefaultGrailsPageFlowClass extends AbstractInjectableGrailsClass
-		implements GrailsPageFlowClass {
-
-	public static final String PAGE_FLOW = "PageFlow";
-	public static final String FLOW = "flow";
-	private static final String ACCESSIBLE = "accessible";
-	private static final String SLASH = "/";
-	
-	private String uri = null;
-	private boolean accessible = true;
-	
-	public DefaultGrailsPageFlowClass(Class clazz) {
-		super(clazz, PAGE_FLOW);
-		
-		if (getPropertyValue(FLOW, Flow.class) == null) {
-			throw new RequiredPropertyMissingException("On class [" + clazz.getName() + "] required property [" + FLOW + "] of type [" + Flow.class.getName() + "] is not present!");
-		}
-		if (getPropertyValue(ACCESSIBLE, Boolean.class) != null) {
-			this.accessible = ((Boolean)getPropertyValue(ACCESSIBLE, Boolean.class)).booleanValue();
-		}
-		
-		this.uri = (StringUtils.isNotBlank(getPackageName()) ? SLASH + getPackageName().replace('.', '/') : "") + SLASH + getFlowId();
-	}
-
-	public String getFlowId() {
-		return WordUtils.uncapitalize(getName());
-	}
-
-	public String getUri() {
-		return this.uri;
-	}
-	
-	public boolean getAccessible() {
-		return this.accessible;
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsServiceClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsServiceClass.java
deleted file mode 100644
index 2a3e799..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsServiceClass.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public class DefaultGrailsServiceClass extends AbstractInjectableGrailsClass
-		implements GrailsServiceClass {
-
-	public static final String SERVICE = "Service";
-	private static final String TRANSACTIONAL = "transactional";
-	
-	private boolean transactional = true;
-	
-	public DefaultGrailsServiceClass(Class clazz) {
-		super(clazz, SERVICE);
-		
-		Object tmpTransactional = getPropertyValue(TRANSACTIONAL, Boolean.class);
-		this.transactional = tmpTransactional == null || tmpTransactional.equals(Boolean.TRUE);
-	}
-
-	public boolean isTransactional() {
-		return this.transactional;
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsTagLibClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsTagLibClass.java
deleted file mode 100644
index e5e142a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/DefaultGrailsTagLibClass.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.Closure;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.HashSet;
-import java.beans.PropertyDescriptor;
-
-/**
- * @author Graeme Rocher
- * @since 14-Jan-2006
- *
- * Default implementation of a tag lib class
- *
- */
-public class DefaultGrailsTagLibClass extends AbstractInjectableGrailsClass implements GrailsTagLibClass {
-    protected static final String TAG_LIB = "TagLib";
-
-    private List supportedControllers;
-    private Set tags = new HashSet();
-    /**
-     * <p>Default contructor
-     *
-     * @param clazz        the tag library class
-     */
-    public DefaultGrailsTagLibClass(Class clazz) {
-        super(clazz, TAG_LIB);
-        Class supportedControllerClass = (Class)getPropertyValue(SUPPORTS_CONTROLLER, Class.class);
-        if(supportedControllerClass != null) {
-            supportedControllers = new ArrayList();
-            supportedControllers.add(supportedControllerClass);
-        }
-        else {
-            List tmp = (List)getPropertyValue(SUPPORTS_CONTROLLER, List.class);
-            if(tmp != null) {
-                supportedControllers = tmp;
-            }
-        }
-
-        PropertyDescriptor[] props = getReference().getPropertyDescriptors();
-        for (int i = 0; i < props.length; i++) {
-            PropertyDescriptor prop = props[i];
-            Closure tag = (Closure)getPropertyValue(prop.getName(),Closure.class);
-            if(tag != null) {
-                tags.add(prop.getName());
-            }
-        }
-    }
-
-    public boolean supportsController(GrailsControllerClass controllerClass) {
-        if(controllerClass == null)
-            return false;
-        else if(supportedControllers != null) {
-           if(supportedControllers.contains(controllerClass.getClazz())) {
-               return true;
-           }
-           else {
-               return false;
-           }
-        }
-        return true;
-    }
-
-    public boolean hasTag(String tagName) {
-        return tags.contains(tagName);
-    }
-
-    public Set getTagNames() {
-        return tags;
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/ExternalGrailsDomainClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/ExternalGrailsDomainClass.java
deleted file mode 100644
index 40d06d7..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/ExternalGrailsDomainClass.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * <p>Represents a persistable Grails domain class that is externally mapped. This is essentially
- * a marker interface so that Grails knows to treat these differently</p>
- *
- * @author Graeme Rocher
- * @since Feb 18, 2006
- */
-public interface ExternalGrailsDomainClass extends GrailsDomainClass {
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplication.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplication.java
deleted file mode 100644
index 95ea906..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplication.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-
-/**
- *  <p>Exposes all classes for a Grails application.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public interface GrailsApplication {
-    /**
-     * The id of the grails application within a bean context
-     */
-    String APPLICATION_ID = "grailsApplication";
-
-    /**
-     * <p>Returns all controllers in an application
-     *
-     * @return controllers in an application
-     */
-    public GrailsControllerClass[] getControllers();
-
-    /**
-     * <p>Returns the controller with the given full name or null if no controller was found with that name.
-     *
-     * @param fullname the controller full name
-     * @return the controller or null if no controller was found.
-     */
-    public GrailsControllerClass getController(String fullname);
-
-    /**
-     * <p>Returns the controllers that maps to the given URI or null if no controller was found with that name.
-     *
-     * @param uri the uri of the request
-     * @return the controller or null if no controller was found
-     */
-    public GrailsControllerClass getControllerByURI(String uri);
-
-    /**
-     * <p>Returns all page flows in an application.
-     *
-     * @return page flows in an application.
-     */
-    public GrailsPageFlowClass[] getPageFlows();
-
-    /**
-     * <p>Returns the page flow with the given full name or null if no page flow was found with that name.
-     *
-     * @param fullname the page flow full name
-     * @return the page flow or null if no controller was found.
-     */
-    public GrailsPageFlowClass getPageFlow(String fullname);
-
-    /**
-     * <p>Returns an array of all the Grails Domain classes</p>
-     *
-     * @return The domain classes in the domain
-     */
-    public GrailsDomainClass[] getGrailsDomainClasses();
-
-    /**
-     * Check whether the specified class is a grails domain class
-     * @param domainClass The class to check
-     * @return True if it is
-     */
-    public boolean isGrailsDomainClass(Class domainClass);
-
-    /**
-     * <p>Retrieves a domain class for the specified name</p>
-     *
-     * @param name The name of the domain class to retrieve
-     * @return The retrieved domain class
-     */
-    public GrailsDomainClass getGrailsDomainClass(String name);
-
-    /**
-     * <p>Returns the active data source for this Grails application or null if not available.
-     *
-     * @return the active data source or null if not available.
-     */
-    public GrailsDataSource getGrailsDataSource();
-
-    /**
-     * <p>Returns the class loader instance for the Grails application</p>
-     *
-     * @return The GroovyClassLoader instance
-     */
-    public GroovyClassLoader getClassLoader();
-
-    /**
-     * <p>Returns all service classes for the Grails application.
-     *
-     * @return service class for Grails application
-     */
-    public GrailsServiceClass[] getGrailsServiceClasses();
-
-    /**
-     * <p>Returns the service with the specified full name.
-     *
-     * @param name the full name of the service class
-     * @return the service class
-     */
-    public GrailsServiceClass getGrailsServiceClass(String name);
-
-    /**
-     * <p>Returns all the bootstrap classes for the Grails application
-     *
-     * @return An array of BootStrap classes
-     */
-    public GrailsBootstrapClass[] getGrailsBootstrapClasses();
-
-    /**
-     * <p>Returns all the tag lib classes for the Grails application
-     *
-     * @return An array of TagLib classes
-     */
-    public GrailsTagLibClass[] getGrailsTabLibClasses();
-
-    /**
-     * <p>Returns a tag lib class for the specified name
-     *
-     * @param tagLibName The name of the taglib class
-     * @return A taglib class instance or null if non exists
-     */
-    public GrailsTagLibClass getGrailsTagLibClass(String tagLibName);
-
-    /**
-     * <p>Retrieves the tag lib class for the specified tag
-     *
-     * @param tagName The name of the tag
-     * @return A array of tag lib classes
-     */
-    public GrailsTagLibClass getTagLibClassForTag(String tagName);
-
-    /**
-     * Adds a new Grails controller class to the application
-     * @param controllerClass The grails controller class to add
-     * @return A GrailsControllerClass instance
-     */
-    GrailsControllerClass addControllerClass(Class controllerClass);
-
-    /**
-     * Adds a new Grails taglib class to the application. If it already exists the old one will be replaced
-     * 
-     * @param tagLibClass The taglib class to add
-     * @return The newly added class
-     */
-    GrailsTagLibClass addTagLibClass(Class tagLibClass);
-
-    /**
-     * Adds a new Grails service class to the application. If it already exists the old one will be replaced
-     *
-     * @param serviceClass The service class to add
-     * @return The newly added class or null if the class is abstract and was not added
-     */
-    GrailsServiceClass addServiceClass(Class serviceClass);
-
-    /**
-     * Adds a new domain class to the grails application
-     * @param domainClass The domain class to add
-     * @return The GrailsDomainClass instance or null if the class is abstract and was not added
-     */
-    GrailsDomainClass addDomainClass(Class domainClass);
-
-    /**
-     * Adds a new domain class to the grails application
-     * @param domainClass The domain class to add
-     * @return The GrailsDomainClass instance or null if the class is abstract and was not added
-     */
-    
-    GrailsDomainClass addDomainClass(GrailsDomainClass domainClass);
-
-    /**
-     * Retrieves the controller that is scaffolding the specified domain class
-     *
-     * @param domainClass The domain class to check
-     * @return An instance of GrailsControllerClass                                      
-     */
-    GrailsControllerClass getScaffoldingController(GrailsDomainClass domainClass);
-
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplicationFactoryBean.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplicationFactoryBean.java
deleted file mode 100644
index e6a4dbc..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsApplicationFactoryBean.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.io.Resource;
-
-/**
- * <p>Factory bean that creates a Grails application object based on Groovy files.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class GrailsApplicationFactoryBean implements FactoryBean, InitializingBean {
-	
-	private Resource[] groovyFiles = null;
-	private GrailsApplication grailsApplication = null;
-	
-	public GrailsApplicationFactoryBean() {
-		super();		
-	}
-
-	public void setGroovyFiles(Resource[] groovyFiles) {
-		this.groovyFiles = groovyFiles;
-	}
-	
-	public void afterPropertiesSet() throws Exception {
-		if (this.groovyFiles == null || groovyFiles.length == 0) {
-			throw new IllegalStateException("Groovy files are not defined!");
-		}
-		this.grailsApplication = new DefaultGrailsApplication(this.groovyFiles);
-	}
-	
-	public Object getObject() throws Exception {
-		return this.grailsApplication;
-	}
-
-	public Class getObjectType() {
-		return GrailsApplication.class;
-	}
-
-	public boolean isSingleton() {
-		return true;
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsBootstrapClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsBootstrapClass.java
deleted file mode 100644
index 2ac310a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsBootstrapClass.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import javax.servlet.ServletContext;
-
-import groovy.lang.Closure;
-
-/**
- * <p>A BootStrap class is a class that is loaded and executed on application load</p>
- * 
- * @author Graeme Rocher
- * @since Jul 5, 2005
- */
-public interface GrailsBootstrapClass extends GrailsClass {
-	
-	/**
-	 * Calls the init closure if one exists
-	 *
-	 */
-	void callInit(ServletContext servletContext);
-	
-	/**
-	 * Calls the destroy closure if one exists
-	 *
-	 */
-	void callDestroy();
-	/**
-	 * Returns the init closure which is called on application load
-	 * 
-	 * @return A Closure instance
-	 */
-	Closure getInitClosure();
-	
-	/**
-	 * Returns the destroy closure which is called on application exit
-	 * 
-	 * @return A Closure instance
-	 */
-	Closure getDestroyClosure();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClass.java
deleted file mode 100644
index 8e48638..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClass.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * <p>This interface represents any class in a Grails application.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public interface GrailsClass {
-
-    /**
-     * <p>Creates a new instance of this class.
-     *
-     * <p>This method can be used as factory method in the Spring application context.
-     */
-    public Object newInstance();
-
-    /**
-     * <p>Returns the logical name of the class in the application without the trailing convention part if applicable
-     * and without the package name.
-     *
-     * @return the logical name
-     */
-    public String getName();
-
-
-    /**
-     * <p>Returns the short name of the class without package prefix
-     *
-     * @return The short name
-     */
-    public String getShortName();
-    /**
-     * <p>Returns the full name of the class in the application with the the trailing convention part and with
-     * the package name.
-     *
-     * @return the full name
-     */
-    public String getFullName();
-
-    /**
-     * <p>Returns the name of the class as a property name
-     *
-     * @return The property name representation
-     */
-    public String getPropertyName();
-
-    /**
-     * <p>Returns the name of the property in natural terms (eg. 'lastName' becomes 'Last Name')
-     * @return The natural property name
-     */
-    public String getNaturalName();
-
-    /**
-     * <p>Returns the package name of the class.
-     *
-     * @return the package name
-     */
-    public String getPackageName();
-
-    /**
-     * <p> Returns the actual clazz represented by the GrailsClass
-     *
-     * @return the class
-     */
-    public Class getClazz();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClassUtils.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClassUtils.java
deleted file mode 100644
index 3044cb0..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsClassUtils.java
+++ /dev/null
@@ -1,401 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-
-import groovy.lang.Closure;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-
-import java.beans.PropertyDescriptor;
-import java.util.*;
-
-/**
- * @author Graeme Rocher
- * @since 08-Jul-2005
- * 
- * Class containing utility methods for dealing with Grails class artifacts
- * 
- */
-public class GrailsClassUtils {
-
-    private static Map beanWrapperInstances = new HashMap();
-
-    /**
-     * Returns true of the specified Groovy class is a bootstrap
-     * @param clazz
-     * @return True if the class is a bootstrap class
-     */
-    public static boolean isBootstrapClass( Class clazz ) {
-        return clazz.getName().endsWith(DefaultGrailsBootstrapClass.BOOT_STRAP)  && !Closure.class.isAssignableFrom(clazz);
-    }
-
-    /**
-     * Returns true of the specified Groovy class is a taglib
-     * @param clazz
-     * @return True if the class is a taglib
-     */
-    public static boolean isTagLibClass( Class clazz ) {
-        return isTagLibClass(clazz.getName())  && !Closure.class.isAssignableFrom(clazz);
-    }
-
-    public static boolean isTagLibClass(String className) {
-        return className.endsWith( DefaultGrailsTagLibClass.TAG_LIB );
-    }
-    /**
-     * Returns true of the specified Groovy class is a controller
-     * @param clazz
-     * @return True if the class is a controller
-     */
-    public static boolean isControllerClass( Class clazz ) {
-        return isControllerClass(clazz.getName())  && !Closure.class.isAssignableFrom(clazz);
-    }
-
-    public static boolean isControllerClass(String className) {
-        return className.endsWith(DefaultGrailsControllerClass.CONTROLLER);
-    }
-
-    /**
-     * <p>Returns true if the specified class is a page flow class type</p>
-     *
-     * @param clazz
-     * @return  True if the class is a page flow class
-     */
-    public static boolean isPageFlowClass( Class clazz ) {
-        return isPageFlowClass(clazz.getName())  && !Closure.class.isAssignableFrom(clazz);
-    }
-
-    public static boolean isPageFlowClass(String className) {
-        return className.endsWith(DefaultGrailsPageFlowClass.PAGE_FLOW);
-    }
-
-    /**
-     * <p>Returns true if the specified class is a data source.
-     *
-     * @param clazz
-     * @return True if the class is a data source
-     */
-    public static boolean isDataSource(Class clazz) {
-        return clazz.getName().endsWith(DefaultGrailsDataSource.DATA_SOURCE) && !Closure.class.isAssignableFrom(clazz);
-    }
-
-    /**
-     * <p>Returns true if the specified class is a service.
-     *
-     * @param clazz
-     * @return True if the class is a service class
-     */
-    public static boolean isService(Class clazz) {
-        return isService(clazz.getName()) && !Closure.class.isAssignableFrom(clazz);
-    }
-    public static boolean isService(String className) {
-        return className.endsWith(DefaultGrailsServiceClass.SERVICE);
-    }
-
-    /**
-     * <p>Returns true if the specified class is a domain class. In Grails a domain class
-     * is any class that has "id" and "version" properties</p>
-     *
-     * @param clazz The class to check
-     * @return A boolean value
-     */
-    public static boolean isDomainClass( Class clazz ) {
-        try {
-            // make sure the identify and version field exist
-            clazz.getDeclaredField( GrailsDomainClassProperty.IDENTITY );
-            clazz.getDeclaredField( GrailsDomainClassProperty.VERSION );
-            // and its not a closure
-            if(Closure.class.isAssignableFrom(clazz)) {
-                return false;
-            }
-            // passes all conditions return true
-            return true;
-        } catch (SecurityException e) {
-            return false;
-        } catch (NoSuchFieldException e) {
-            return false;
-        }
-    }
-
-    /**
-     *
-     * Returns true if the specified property in the specified class is of the specified type
-     *
-     * @param clazz The class which contains the property
-     * @param propertyName The property name
-     * @param type The type to check
-     *
-     * @return A boolean value
-     */
-    public static boolean isPropertyOfType( Class clazz, String propertyName, Class type ) {
-        try {
-
-            Class propType = getProperyType( clazz, propertyName );
-            if(propType != null && propType.equals( type ))
-                return true;
-            else
-                return false;
-        }
-        catch(Exception e) {
-            return false;
-        }
-    }
-
-
-    /**
-     * Returns the value of the specified property and type from an instance of the specified Grails class
-     *
-     * @param clazz The name of the class which contains the property
-     * @param propertyName The property name
-     * @param propertyType The property type
-     *
-     * @return The value of the property or null if none exists
-     */
-    public static Object getPropertyValue(Class clazz, String propertyName, Class propertyType) {
-        // validate
-        if(clazz == null || StringUtils.isBlank(propertyName))
-            return null;
-
-        try {
-            BeanWrapper wrapper = (BeanWrapper)beanWrapperInstances.get( clazz.getName() );
-            if(wrapper == null) {
-                wrapper = new BeanWrapperImpl(clazz.newInstance());
-                beanWrapperInstances.put( clazz.getName(), wrapper );
-            }
-            Object pValue = wrapper.getPropertyValue( propertyName );
-            if(pValue == null)
-                return null;
-
-            if(propertyType.isAssignableFrom(pValue.getClass())) {
-                return pValue;
-            }
-            else {
-                return null;
-            }
-
-        } catch (Exception e) {
-            // if there are any errors in instantiating just return null
-            return null;
-        }
-    }
-
-
-    /**
-     * Retrieves a PropertyDescriptor for the specified instance and property value
-     *
-     * @param instance The instance
-     * @param propertyValue The value of the property
-     * @return The PropertyDescriptor
-     */
-    public static PropertyDescriptor getPropertyDescriptorForValue(Object instance, Object propertyValue) {
-        if(instance == null || propertyValue == null)
-            return null;
-
-        BeanWrapper wrapper = new BeanWrapperImpl(instance);
-        PropertyDescriptor[] descriptors = wrapper.getPropertyDescriptors();
-
-        for (int i = 0; i < descriptors.length; i++) {
-            Object value = wrapper.getPropertyValue( descriptors[i].getName() );
-            if(propertyValue.equals(value))
-                return descriptors[i];
-        }
-        return null;
-    }
-    /**
-     * Returns the type of the given property contained within the specified class
-     *
-     * @param clazz The class which contains the property
-     * @param propertyName The name of the property
-     *
-     * @return The property type or null if none exists
-     */
-    public static Class getProperyType(Class clazz, String propertyName) {
-        if(clazz == null || StringUtils.isBlank(propertyName))
-            return null;
-
-        try {
-            BeanWrapper wrapper = (BeanWrapper)beanWrapperInstances.get( clazz.getName() );
-            if(wrapper == null) {
-                wrapper = new BeanWrapperImpl(clazz.newInstance());
-                beanWrapperInstances.put( clazz.getName(), wrapper );
-            }
-            return wrapper.getPropertyType(propertyName);
-
-        } catch (Exception e) {
-            // if there are any errors in instantiating just return null for the moment
-            return null;
-        }
-    }
-
-    /**
-     * Retrieves all the properties of the given class for the given type
-     *
-     * @param clazz The class to retrieve the properties from
-     * @param propertyType The type of the properties you wish to retrieve
-     *
-     * @return An array of PropertyDescriptor instances
-     */
-    public static PropertyDescriptor[] getPropertiesOfType(Class clazz, Class propertyType) {
-        if(clazz == null || propertyType == null)
-            return new PropertyDescriptor[0];
-
-        Set properties = new HashSet();
-        try {
-            BeanWrapper wrapper = (BeanWrapper)beanWrapperInstances.get( clazz.getName() );
-            if(wrapper == null) {
-                wrapper = new BeanWrapperImpl(clazz.newInstance());
-                beanWrapperInstances.put( clazz.getName(), wrapper );
-            }
-            PropertyDescriptor[] descriptors = wrapper.getPropertyDescriptors();
-
-            for (int i = 0; i < descriptors.length; i++) {
-                if(descriptors[i].getPropertyType().equals( propertyType )  ) {
-                    properties.add(descriptors[i]);
-                }
-            }
-
-        } catch (Exception e) {
-            // if there are any errors in instantiating just return null for the moment
-            return new PropertyDescriptor[0];
-        }
-        return (PropertyDescriptor[])properties.toArray( new PropertyDescriptor[ properties.size() ] );
-    }
-
-    /**
-     * Retrieves a property of the given class of the specified name and type
-     * @param clazz The class to retrieve the property from
-     * @param propertyName The name of the property
-     * @param propertyType The type of the property
-     *
-     * @return A PropertyDescriptor instance or null if none exists
-     */
-    public static PropertyDescriptor getProperty(Class clazz, String propertyName, Class propertyType) {
-        if(clazz == null || propertyName == null || propertyType == null)
-            return null;
-
-        try {
-            BeanWrapper wrapper = (BeanWrapper)beanWrapperInstances.get( clazz.getName() );
-            if(wrapper == null) {
-                wrapper = new BeanWrapperImpl(clazz.newInstance());
-                beanWrapperInstances.put( clazz.getName(), wrapper );
-            }
-            PropertyDescriptor pd = wrapper.getPropertyDescriptor(propertyName);
-            if(pd.getPropertyType().equals( propertyType )) {
-                return pd;
-            }
-            else {
-                return null;
-            }
-        } catch (Exception e) {
-            // if there are any errors in instantiating just return null for the moment
-            return null;
-        }
-    }
-
-    /**
-     * Returns the class name without the package prefix
-     *
-     * @param targetClass
-     * @return The short name of the class
-     */
-    public static String getShortName(Class targetClass) {
-        String className = targetClass.getName();
-        int i = className.lastIndexOf(".");
-        if(i > -1) {
-            className = className.substring( i + 1, className.length() );
-        }
-        return className;
-    }
-
-    /**
-     * Returns the property name equivalent for the specified class
-     *
-     * @param targetClass The class to get the property name for
-     * @return A property name reperesentation of the class name (eg. MyClass becomes myClass)
-     */
-    public static String getPropertyNameRepresentation(Class targetClass) {
-        String shortName = getShortName(targetClass);
-        return getPropertyNameRepresentation(shortName);
-    }
-
-    /**
-     * Returns the property name representation of the given name
-     *
-     * @param name The name to convert
-     * @return The property name representation
-     */
-    public static String getPropertyNameRepresentation(String name) {
-        String propertyName = name.substring(0,1).toLowerCase() + name.substring(1);
-        if(propertyName.indexOf(' ') > -1) {
-            propertyName = propertyName.replaceAll("\\s", "");
-        }
-        return propertyName;
-    }
-
-    /**
-     * Converts a property name into its natural language equivalent eg ('firstName' becomes 'First Name')
-     * @param name The property name to convert
-     * @return The converted property name
-     */
-    public static String getNaturalName(String name) {
-        List words = new ArrayList();
-        int i = 0;
-        char[] chars = name.toCharArray();
-        for (int j = 0; j < chars.length; j++) {
-            char c = chars[j];
-            String w;
-            if(i >= words.size()) {
-                w = "";
-                words.add(i, w);
-            }
-            else {
-                w = (String)words.get(i);
-            }
-
-            if(Character.isLowerCase(c) || Character.isDigit(c)) {
-                if(Character.isLowerCase(c) && w.length() == 0)
-                    c = Character.toUpperCase(c);
-                else if(w.length() > 1 && Character.isUpperCase(w.charAt(w.length() - 1)) ) {
-                    w = "";
-                    words.add(++i,w);
-                }
-
-                words.set(i, w + c);
-            }
-            else if(Character.isUpperCase(c)) {
-                if((i == 0 && w.length() == 0) || Character.isUpperCase(w.charAt(w.length() - 1)) ) 	{
-                    words.set(i, w + c);
-                }
-                else {
-                    words.add(++i, String.valueOf(c));
-                }
-            }
-
-        }
-
-        StringBuffer buf = new StringBuffer();
-        
-        for (Iterator j = words.iterator(); j.hasNext();) {
-            String word = (String) j.next();
-            buf.append(word);
-            if(j.hasNext())
-                buf.append(' ');
-        }
-        return buf.toString();
-    }
-
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsConfigUtils.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsConfigUtils.java
deleted file mode 100644
index 560fe41..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsConfigUtils.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.scaffolding.ScaffoldDomain;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.context.ApplicationContext;
-
-/**
- * A common class where shared configurational methods can reside
- *
- * @author Graeme Rocher
- * @since 22-Feb-2006
- */
-public class GrailsConfigUtils {
-
-    public static void configureScaffolders(GrailsApplication application, ApplicationContext appContext) {
-        GrailsControllerClass[] controllerClasses = application.getControllers();
-        for (int i = 0; i < controllerClasses.length; i++) {
-            GrailsControllerClass controllerClass = controllerClasses[i];
-            if(controllerClass.isScaffolding()) {
-                try {
-                    GrailsScaffolder gs = (GrailsScaffolder)appContext.getBean(controllerClass.getFullName() + "Scaffolder");
-                    if(gs != null) {
-                        ScaffoldDomain sd = gs.getScaffoldRequestHandler()
-                                                .getScaffoldDomain();
-
-                        GrailsDomainClass dc = application.getGrailsDomainClass(sd.getPersistentClass().getName());
-                        if(dc != null) {
-                            sd.setIdentityPropertyName(dc.getIdentifier().getName());
-                            sd.setValidator(dc.getValidator());
-                        }
-                    }
-                } catch (NoSuchBeanDefinitionException e) {
-                    // ignore
-                }
-            }
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsControllerClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsControllerClass.java
deleted file mode 100644
index 3bee8e2..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsControllerClass.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-
-
-/**
- * <p>Represents a controller class in Grails.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public interface GrailsControllerClass extends InjectableGrailsClass {
-    /**
-     * The name of the index action
-     */
-    public String INDEX_ACTION = "index";
-    /**
-     * <p>Gets the list of all possible URI's available in this controller.
-     *
-     * @return list of all possible URI's
-     */
-    public String[] getURIs();
-
-    /**
-     * <p>Tests if a controller maps to a given URI.
-     *
-     * @return true if controller maps to URI
-     */
-    public boolean mapsToURI(String uri);
-
-    /**
-     * Retrieves the view name for the specified URI
-     *
-     * @param uri the name of URI
-     * @return the view name of null if not found
-     */
-    public String getViewByURI(String uri);
-
-    /**
-     * Retrieves the view name for the specified closure name
-     *
-     * @param closureName The name of the closure
-     * @return The view for the specified closure action
-     */
-    public String getViewByName(String closureName);
-
-    /**
-     * <p>Returns a closure property name for a specific URI or null if the URI does not map to a closure.
-     *
-     * @param uri the URI of the request
-     * @return the closure property name mapped to the URI or null is no closure was found
-     */
-    public String getClosurePropertyName(String uri);
-
-    /**
-     * @return True of the controller class is scaffolding
-     */
-    public boolean isScaffolding();
-
-    /**
-     *
-     * @return The class that is being scaffolded by this controller
-     */
-    public Class getScaffoldedClass();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDataSource.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDataSource.java
deleted file mode 100644
index a9d7d80..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDataSource.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import java.util.Properties;
-
-/**
- * <p>Represents a data source in Grails.
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public interface GrailsDataSource extends InjectableGrailsClass {
-
-	/**
-	 * <p>True is connection pooling is enabled.
-	 * 
-	 * @return connection pooling enabled
-	 */
-	public boolean isPooled();
-	
-	/**
-	 * <p>The driver class name for the data source.
-	 * 
-	 * @return driver class name
-	 */
-	public String getDriverClassName();
-	
-	/**
-	 * <p>The URL for the data source.
-	 * 
-	 * @return URL
-	 */
-	public String getUrl();
-	
-	/**
-	 * <p>The username for the data source.
-	 * 
-	 * @return username
-	 */
-	public String getUsername();
-	
-	/**
-	 * <p>The password for the data source.
-	 * 
-	 * @return password
-	 */
-	public String getPassword();
-	
-	/**
-	 * <p>Other properties for this data source.
-	 * 
-	 * @return other properties
-	 */
-	public Properties getOtherProperties();
-	
-	/**
-	 * Whether to generate the database with HBM 2 DDL, values can be "create", "create-drop" or "update"
-	 * @return The dbCreate method to use
-	 */
-	public String getDbCreate();
-
-    /**
-     *
-     * @return The configuration class to use when setting up the database
-     */
-    public Class getConfigurationClass();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClass.java
deleted file mode 100644
index 3bb7efb..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClass.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import java.util.Map;
-
-import org.springframework.validation.Validator;
-
-
-/**
- * <p>Represents a persistable Grails domain class</p>
- * 
- * @author Graeme Rocher
- * @since Jul 5, 2005
- */
-public interface GrailsDomainClass extends GrailsClass {
-
-	/**
-	 * The name of the default ORM implementation used to map the class
-	 */
-	String GORM = "GORM";
-
-    /**
-     * @param domainClass
-     * @return True if the specifying domain class is on the owning side of a relationship
-     */
-    public boolean isOwningClass(Class domainClass);
-    /**
-	 * Returns all of the properties of the domain class
-	 * @return The domain class properties
-	 */
-	public GrailsDomainClassProperty[] getProperties();
-	/**
-	 * Returns all of the persistant properties of the domain class
-	 * @return The domain class' persistant properties
-	 */
-	public GrailsDomainClassProperty[] getPersistantProperties();
-	/**
-	 * Returns the identifier property
-	 * @return The identifier property
-	 */
-	public GrailsDomainClassProperty getIdentifier();
-	/**
-	 * Returns the version property
-	 * @return The version property
-	 */
-	public GrailsDomainClassProperty getVersion();
-	
-	/**
-	 * Returns the property for the given name
-	 * 
-	 * @param name The property for the name
-	 * @throws org.codehaus.groovy.grails.exceptions.InvalidPropertyException
-	 * @return The domain class property for the given name
-	 */
-	public GrailsDomainClassProperty getPropertyByName(String name);	
-	
-	
-	/**
-	 * Returns the field name for the given property name
-	 * @param propertyName
-	 * @return
-	 */
-	public String getFieldName(String propertyName);
-	
-	/**
-	 * Returns the table name for this class
-	 */
-	public String getTableName();
-	
-	/**
-	 * <p>Returns the default property name of the GrailsClass. For example the property name for 
-	 * a class called "User" would be "user"</p>
-	 * 
-	 * @return
-	 */
-	public String getPropertyName();
-	
-	/**
-	 * Returns true if the given property is a one to many relationship
-	 * @param propertyName The name of the property
-	 * @return A boolean value
-	 */
-	public boolean isOneToMany(String propertyName);
-	
-	/**
-	 * Returns true if the given property is a many to one relationship
-	 * @param propertyName The name of the property
-	 * @return A boolean value
-	 */
-	public boolean isManyToOne(String propertyName);
-	
-	/**
-	 * Returns true if the given property is a bi-directional relationship
-	 * 
-	 * @param propertyName The name of the property
-	 * @return A boolean value
-	 */
-	public boolean isBidirectional(String propertyName);
-	
-	/**
-	 * Returns the type of the related class of the given property
-	 * 
-	 * @param propertyName The name of the property 
-	 * @return The type of the class or null if no relationship exists for the specified property
-	 */
-	public Class getRelatedClassType(String propertyName);
-
-	/**
-	 * Returns a map of constraints applied to this domain class with the keys being the property name
-	 * and the values being ConstrainedProperty instances
-	 * 
-	 * @return A map of constraints
-	 */
-	public Map getConstrainedProperties();
-	/**
-	 * Retreives the validator for this domain class 
-	 * 
-	 * @return A validator instance or null if none exists
-	 */
-	public Validator getValidator();
-	/**
-	 * Sets the validator for this domain class 
-	 * 
-	 * @param validator The domain class validator to set
-	 */
-	public void setValidator(Validator validator);
-	
-	/**
-	 * @return The name of the ORM implementation used to map the domain class (default is "GORM")
-	 */
-	public String getMappedBy();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClassProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClassProperty.java
deleted file mode 100644
index e3da5fa..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsDomainClassProperty.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * A property of a GrailsDomainClass instance
- * 
- * @author Graeme Rocher
- * @since Jul 5, 2005
- */
-public interface GrailsDomainClassProperty {
-	
-	String IDENTITY = "id";
-	String VERSION = "version";
-	String OPTIONAL = "optionals";
-	String TRANSIENT = "transients";
-	String CONSTRAINTS = "constraints";
-	String EVANESCENT = "evanescent";
-	String RELATIONSHIPS = "relationships";
-	String META_CLASS = "metaClass";
-	String CLASS = "class";
-	String MAPPED_BY = "mappedBy";
-    String BELONGS_TO = "belongsTo";
-
-    /**
-	 * Returns the name of the property
-	 * @return The property name
-	 */
-	public String getName();
-	/**
-	 * Returns the type for the domain class
-	 * @return  The property type
-	 */
-	public Class getType();
-	
-	/**
-	 * <p>Returns the referenced property type. This differs from getType() in that in
-	 * the case of an Association it will return the type of the elements contained within the Collection,
-	 * otherwise it will delegate to getType();</p>
-	 * 
-	 * @return The referenced type
-	 */
-	public Class getReferencedPropertyType();
-	
-	/**
-	 * <p>Returns the other side of a bidirectional association
-	 * 
-	 * @return The other side of the relationship or null if not known
-	 */
-	public GrailsDomainClassProperty getOtherSide();
-	
-	/**
-	 * Returns the class type as a property name representation
-	 * 
-	 * @return The property name representation
-	 */
-	public String getTypePropertyName();
-	
-	/**
-	 * Returns the parent domain class of the property instance
-	 * @return The parent domain class
-	 */
-	public GrailsDomainClass getDomainClass();
-	/**
-	 * Returns true if the domain class property is a persistant property
-	 * @return Whether the property is persistent
-	 */
-	public boolean isPersistant();
-	/**
-	 * Returns true if the property is required
-	 * @return Whether the property is optional
-	 */
-	public boolean isOptional();
-	/**
-	 * Returns true of the property is an identifier
-	 * @return Whether the property is the identifier
-	 */
-	public boolean isIdentity();
-	
-	/**
-	 * Returns true if the property is a one-to-many relationship
-	 * @return Whether it is a oneToMany
-	 */
-	public boolean isOneToMany();
-	
-	/**
-	 * Returns true if the property is a many-to-one relationship
-	 * @return Whether it is a manyToOne
-	 */
-	public boolean isManyToOne();
-	
-	/**
-	 * Returns true if the property is a many-to-many relationship
-	 * @return True if it is a manyToMany
-	 */	
-	public boolean isManyToMany();
-	
-	/**
-	 * Returns true if the property is a bi-directional relationship
-	 * @return A boolean value
-	 */
-	public boolean isBidirectional();
-	/**
-	 * Returns the domain field name for this property
-	 */
-	public String getFieldName();
-	/**
-	 * Returns true if the property is a one-to-one relationship 
-	 * @return True if it is a one-to-one relationship
-	 */
-	public boolean isOneToOne();
-	/**
-	 * Returns the GrailsDomainClass of a relationship property or null 
-	 * if the property is not a relationship property
-	 * 
-	 * @return The GrailsDomainClass
-	 */
-	public GrailsDomainClass getReferencedDomainClass();
-	
-	/**
-	 * Returns true if this property is a relationship property
-	 * @return True if it is an associative property
-	 */
-	public boolean isAssociation();
-
-    /**
-     * @return The natural name representation of the property (eg. 'lastName' becomes 'Last Name'
-     */
-    public String getNaturalName();
-
-    /**
-     * Sets the references domain class on the property
-     * @param referencedGrailsDomainClass
-     */
-    void setReferencedDomainClass(GrailsDomainClass referencedGrailsDomainClass);
-
-    /**
-     * Sets the other side of an associative property
-     * @param referencedProperty
-     */
-    void setOtherSide(GrailsDomainClassProperty referencedProperty);
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsPageFlowClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsPageFlowClass.java
deleted file mode 100644
index ffd38d2..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsPageFlowClass.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import java.lang.String;
-
-/**
- * <p>Interface holding a page flow configuration.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public interface GrailsPageFlowClass extends InjectableGrailsClass {
-
-	/**
-	 * <p>Returns the flow id.
-	 * 
-	 * @return the flow id
-	 */
-	public String getFlowId();
-	
-	/**
-	 * <p>Returns the URI of this page flow.
-	 * 
-	 * @return the URI of this page flow.
-	 */
-	public String getUri();
-	
-	/**
-	 * <p>Page flow is accessible through URI. If set to false the page flow
-	 * is accessible as a sub flow or through the _flowId parameter.
-	 * 
-	 * @return the page flow is accessible through an URI.
-	 */
-	public boolean getAccessible();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsResourceLoader.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsResourceLoader.java
deleted file mode 100644
index 4ab8f01..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsResourceLoader.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyResourceLoader;
-import org.springframework.core.io.Resource;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A GroovyResourceLoader that loads groovy files using Spring's IO abstraction
- * 
- * @author Graeme Rocher
- * @since 22-Feb-2006
- */
-public class GrailsResourceLoader implements GroovyResourceLoader {
-    private Resource[] resources;
-    private List loadedResources = new ArrayList();
-
-    public GrailsResourceLoader(Resource[] resources) {
-         this.resources = resources;
-    }
-
-    public List getLoadedResources() {
-        return loadedResources;
-    }
-
-    public void setResources(Resource[] resources) {
-        this.resources = resources;
-    }
-
-    public URL loadGroovySource(String resource) throws MalformedURLException {
-        String groovyFile = resource.replace('.', '/') + ".groovy";
-        Resource foundResource = null;
-        for (int i = 0; resources != null && i < resources.length; i++) {
-            if (resources[i].getFilename().endsWith(groovyFile)) {
-                if (foundResource == null) {
-                    foundResource = resources[i];
-                } else {
-                    throw new IllegalArgumentException("Resources [" + resources[i].getFilename() + "] and [" + foundResource.getFilename() + "] end with [" + groovyFile + "]. Cannot load because of duplicate match!");
-                }
-            }
-        }
-        try {
-            if (foundResource != null) {
-                loadedResources.add(foundResource);
-                return foundResource.getURL();
-            } else {
-                return null;
-            }
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsServiceClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsServiceClass.java
deleted file mode 100644
index 4d1191a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsServiceClass.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public interface GrailsServiceClass extends InjectableGrailsClass {
-
-	/**
-	 * <p>Service should be configured with transaction demarcation.
-	 * 
-	 * @return configure with transaction demarcation
-	 */
-	public boolean isTransactional();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsTagLibClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsTagLibClass.java
deleted file mode 100644
index f817f5f..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/GrailsTagLibClass.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.commons;
-
-import java.util.Set;
-
-/**
- * <p>Represents a Grails tab library class</p>
- *
- * @author Graeme Rocher
- * @since Jan 14, 2006
- */
-public interface GrailsTagLibClass extends InjectableGrailsClass {
-
-    /**
-     * The name of the application (ie global) tag library appropriate for all controller classes
-     */
-    String SUPPORTS_CONTROLLER = "supportsController";
-
-    /**
-     * Whether this tag library supports the specified controller
-     * @param controllerClass The controllerClass to check
-     * @return True if the controller is supported
-     */
-    boolean supportsController(GrailsControllerClass controllerClass);
-
-    /**
-     *
-     * @param tagName The name of the tag
-     * @return Whether the tag library contains the specified tag
-     */
-    boolean hasTag(String tagName);
-
-    /**
-     *
-     * @return The tag names in this library
-     */
-    Set getTagNames();
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/InjectableGrailsClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/InjectableGrailsClass.java
deleted file mode 100644
index 555c4e4..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/InjectableGrailsClass.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-/**
- * <p>Represents a Grails class that is to be configured in Spring and as such
- * is injectable.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public interface InjectableGrailsClass extends GrailsClass {
-
-	/**
-	 * <p>If autowiring by name is enabled.
-	 * 
-	 * @return autowiring by name
-	 */
-	public boolean byName();
-	
-	/**
-	 * <p>If autowiring by type is enabled.
-	 * 
-	 * @return autowiring by type
-	 */
-	public boolean byType();
-	
-	/**
-	 * <p>If class should be configured for dependency injection.
-	 * 
-	 * @return available for dependency injection
-	 */
-	public boolean getAvailable();	
-}
-
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodInvocation.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodInvocation.java
deleted file mode 100644
index f275ae9..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodInvocation.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public abstract class AbstractDynamicMethodInvocation implements
-		DynamicMethodInvocation {
-
-	private String methodName = null;
-	
-	public AbstractDynamicMethodInvocation(String methodName) {		
-		super();
-		this.methodName = methodName;
-	}
-
-	public void setMethodName(String methodName) {
-		this.methodName = methodName;
-	}
-	
-	public String getMethodName() {
-		return this.methodName;
-	}
-	
-	public boolean isMethodMatch(String methodName) {
-		return getMethodName().equals(methodName);
-	}
-	
-	public abstract Object invoke(Object target, Object[] arguments);
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethods.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethods.java
deleted file mode 100644
index d9eed57..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethods.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.IntrospectionException;
-import java.util.*;
-
-
-
-/**
- * InvokerHelper.getInstance().getMetaRegistry().setMetaClass(Foo.class,myFooMetaClass)
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public abstract class AbstractDynamicMethods implements DynamicMethods {
-
-	private Collection dynamicMethodInvocations = null;
-	private Collection staticMethodInvocations = null;
-	private Map dynamicProperties = null;
-	private Class clazz = null;
-	
-	private static final Log LOG = LogFactory.getLog(AbstractDynamicMethods.class);
-	
-	/**
-	 * Creates and registers a DelegatingMetaClass instance in the registry that delegates to this class
-	 * 
-	 * @param theClass
-	 * @throws IntrospectionException
-	 */
-	public AbstractDynamicMethods(Class theClass)
-			throws IntrospectionException {
-		this(theClass, true);		
-	}
-	
-	/**
-	 * Creates and optionally registers a DelegatingMetaClass in the MetaClasRegistry that delegates to this class
-	 * @param theClass
-	 * @param inRegistry
-	 * @throws IntrospectionException
-	 */
-	public AbstractDynamicMethods(Class theClass, boolean inRegistry)
-	throws IntrospectionException {
-			super();
-			new DelegatingMetaClass(theClass, this, inRegistry);
-			this.clazz = theClass;
-			this.dynamicMethodInvocations = new ArrayList();
-			this.staticMethodInvocations = new ArrayList();
-			this.dynamicProperties = new HashMap();
-	}	
-	
-	/**
-	 * A non-registering constructor that simple creates an instance
-	 *
-	 */
-	public AbstractDynamicMethods() {
-		this.dynamicMethodInvocations = new ArrayList();
-		this.staticMethodInvocations = new ArrayList();
-		this.dynamicProperties = new HashMap();		
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#addDynamicMethodInvocation(org.codehaus.groovy.grails.metaclass.DynamicMethodInvocation)
-	 */
-	public void addDynamicMethodInvocation(DynamicMethodInvocation methodInvocation) {		
-		this.dynamicMethodInvocations.add(methodInvocation);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#addStaticMethodInvocation(org.codehaus.groovy.grails.metaclass.StaticMethodInvocation)
-	 */
-	public void addStaticMethodInvocation(StaticMethodInvocation methodInvocation) {
-		this.staticMethodInvocations.add(methodInvocation);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#addDynamicProperty(org.codehaus.groovy.grails.metaclass.DynamicProperty)
-	 */
-	public void addDynamicProperty(DynamicProperty property) {
-		this.dynamicProperties.put(property.getPropertyName(), property);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#getProperty(java.lang.Object, java.lang.String, org.codehaus.groovy.grails.metaclass.InvocationCallback)
-	 */
-	public Object getProperty(Object object, String propertyName, InvocationCallback callback) {		
-		DynamicProperty getter = (DynamicProperty)this.dynamicProperties.get(propertyName);
-		if (getter != null && getter.isPropertyMatch(propertyName)) {
-			callback.markInvoked();
-			return getter.get(object);
-		}
-		return null;		
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#setProperty(java.lang.Object, java.lang.String, java.lang.Object, org.codehaus.groovy.grails.metaclass.InvocationCallback)
-	 */
-	public void setProperty(Object object, String propertyName,Object newValue, InvocationCallback callback) {
-		DynamicProperty setter = (DynamicProperty)this.dynamicProperties.get(propertyName);
-		if (setter != null && setter.isPropertyMatch(propertyName)) {
-			callback.markInvoked();
-			setter.set(object,newValue);
-		}		
-	}	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#invokeMethod(java.lang.Object, java.lang.String, java.lang.Object[], org.codehaus.groovy.grails.metaclass.InvocationCallback)
-	 */
-	public Object invokeMethod(Object object, String methodName,
-		Object[] arguments, InvocationCallback callback) {
-		if(LOG.isTraceEnabled()) {
-			LOG.trace("[DynamicMethods] Attempting invocation of dynamic method ["+methodName+"] on target ["+object+"] with arguments ["+ArrayUtils.toString( arguments )+"]");			
-		}		
-		for (Iterator iter = this.dynamicMethodInvocations.iterator(); iter.hasNext();) {
-			DynamicMethodInvocation methodInvocation = (DynamicMethodInvocation)iter.next();
-			if (methodInvocation.isMethodMatch(methodName)) {
-				if(LOG.isTraceEnabled()) {
-					LOG.trace("[DynamicMethods] Dynamic method matched, marking and invoking");			
-				}				
-				callback.markInvoked();
-				return methodInvocation.invoke(object, arguments);
-			}
-		}
-		return null;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.metaclass.DynamicMethods#invokeStaticMethod(java.lang.Object, java.lang.String, java.lang.Object[], org.codehaus.groovy.grails.metaclass.InvocationCallback)
-	 */
-	public Object invokeStaticMethod(Object object, String methodName,
-			Object[] arguments, InvocationCallback callBack) {
-		if(LOG.isTraceEnabled()) {
-			LOG.trace("[DynamicMethods] Attempting invocation of dynamic static method ["+methodName+"] on target ["+object+"] with arguments ["+ArrayUtils.toString( arguments )+"]");
-			//LOG.trace("[DynamicMethods] Registered dynamic static methods: ["+this.staticMethodInvocations+"]");
-		}
-		for (Iterator iter = this.staticMethodInvocations.iterator(); iter.hasNext();) {
-			StaticMethodInvocation methodInvocation = (StaticMethodInvocation)iter.next();
-			if (methodInvocation.isMethodMatch(methodName)) {
-				if(LOG.isTraceEnabled()) {
-					LOG.trace("[DynamicMethods] Static method matched, marking and invoking");			
-				}				
-				callBack.markInvoked();
-				return methodInvocation.invoke(this.clazz, methodName, arguments);
-			}
-		}
-		return null;
-	}
-
-	public DynamicProperty getDynamicProperty(String propertyName) {
-		return (DynamicProperty)this.dynamicProperties.get(propertyName);
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodsInterceptor.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodsInterceptor.java
deleted file mode 100644
index 49a4eb2..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicMethodsInterceptor.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.Interceptor;
-/**
- * Implements an the Interceptor interface to add support for using ProxyMetaClass to define 
- * dynamic methods
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public abstract class AbstractDynamicMethodsInterceptor extends AbstractDynamicMethods
-		implements Interceptor,PropertyAccessInterceptor {
-
-	protected boolean doInvoke = true;
-	protected boolean doGet = true;
-	protected boolean doSet = true;
-	private Object returnValue;
-	
-
-	public Object beforeInvoke(Object target, String methodName,
-			Object[] arguments) {
-		InvocationCallback callback = new InvocationCallback();
-		this.returnValue = super.invokeMethod(target, methodName, arguments, callback);
-		// if the method was invoked as dynamic 
-		// don't invoke true target
-		if (callback.isInvoked()) {
-			doInvoke = false;
-			return returnValue;
-		} else {
-			doInvoke = true;
-			return null;
-		}
-	}
-
-	public Object afterInvoke(Object object, String methodName,
-			Object[] arguments, Object result) {
-		return this.returnValue;
-	}
-
-	public boolean doInvoke() {
-		return doInvoke;
-	}
-
-	public Object beforeGet(Object object, String property) {
-		InvocationCallback callback = new InvocationCallback();
-		Object returnValue = super.getProperty(object,property,callback);
-		// if the method was invoked as dynamic 
-		// don't invoke true target
-		if (callback.isInvoked()) {
-			doGet = false;
-			return returnValue;
-		} else {
-			doGet = true;
-			return null;
-		}
-	}
-
-	public void beforeSet(Object object, String property, Object newValue) {
-		InvocationCallback callback = new InvocationCallback();
-		super.setProperty(object,property,newValue,callback);
-		// if the method was invoked as dynamic 
-		// don't invoke true target
-		if (callback.isInvoked()) {
-			doSet = false;
-		} else {
-			doSet = true;
-		}
-	}
-
-	public boolean doGet() {
-		return doGet;
-	}
-
-	public boolean doSet() {
-		return doSet;
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicProperty.java
deleted file mode 100644
index 4ab6bc3..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractDynamicProperty.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-/**
- * <p>An abstract class for implementors of dynamic getters to implement
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public abstract class AbstractDynamicProperty implements DynamicProperty {
-
-	private String propertyName;
-	
-	
-	public AbstractDynamicProperty(String propertyName) {
-		super();
-		this.propertyName = propertyName;
-	}
-
-	public boolean isPropertyMatch(String propertyName) {
-		return this.propertyName.equals(propertyName);
-	}
-
-	
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	public abstract Object get(Object object);
-	public abstract void set(Object object, Object newValue);
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractStaticMethodInvocation.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractStaticMethodInvocation.java
deleted file mode 100644
index 24a97bb..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/AbstractStaticMethodInvocation.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import java.util.regex.Pattern;
-
-import org.apache.commons.lang.builder.ToStringBuilder;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public abstract class AbstractStaticMethodInvocation implements StaticMethodInvocation {
-
-	private Pattern pattern = null;
-	
-	public AbstractStaticMethodInvocation() {
-		super();
-	}
-
-	public void setPattern(Pattern pattern) {
-		this.pattern = pattern;
-	}
-	
-	protected Pattern getPattern() {
-		return pattern;
-	}
-
-	public boolean isMethodMatch(String methodName) {
-		return this.pattern.matcher(methodName.subSequence(0, methodName.length())).matches();
-	}
-
-	public abstract Object invoke(Class clazz, String methodName, Object[] arguments);
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return new ToStringBuilder(this)
-						.append("Pattern",this.pattern)
-						.toString();
-	}
-
-	
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DelegatingMetaClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DelegatingMetaClass.java
deleted file mode 100644
index c2c38f2..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DelegatingMetaClass.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.MetaClassImpl;
-
-import java.beans.IntrospectionException;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public class DelegatingMetaClass extends MetaClassImpl {
-
-	DynamicMethods dynamicMethods = null;
-	
-	public DelegatingMetaClass(Class clazz, DynamicMethods dynamicMethods)
-			throws IntrospectionException {
-		this(clazz,dynamicMethods,true);
-	}
-	
-	public DelegatingMetaClass(Class clazz, DynamicMethods dynamicMethods, boolean inRegistry)
-			throws IntrospectionException {
-		super(InvokerHelper.getInstance().getMetaRegistry(), clazz);
-		this.dynamicMethods = dynamicMethods;
-		if(inRegistry) {
-			registry.setMetaClass(clazz, this);
-		}
-	}	
-
-	public Object invokeMethod(Object target, String methodName, Object[] arguments) {
-		InvocationCallback callback = new InvocationCallback();
-		Object returnValue = this.dynamicMethods.invokeMethod(target, methodName, arguments, callback);
-		if (callback.isInvoked()) {
-			return returnValue;
-		} else {
-			return super.invokeMethod(target, methodName, arguments);
-		}
-	}
-	
-	public Object invokeStaticMethod(Object target, String methodName, Object[] arguments) {
-		InvocationCallback callback = new InvocationCallback();
-		Object returnValue = this.dynamicMethods.invokeStaticMethod(target, methodName, arguments, callback);
-		if (callback.isInvoked()) {
-			return returnValue;
-		} else {
-			return super.invokeStaticMethod(target, methodName, arguments);
-		}
-	}
-
-	public void setProperty(Object object, String property, Object newValue) {
-		InvocationCallback callback = new InvocationCallback();
-		this.dynamicMethods.setProperty(object,property,newValue,callback);
-		if (!callback.isInvoked()) {
-			super.setProperty(object, property, newValue);
-		}		
-	}
-
-	public Object getProperty(Object object, String property) {
-		InvocationCallback callback = new InvocationCallback();
-		Object returnValue = this.dynamicMethods.getProperty(object,property,callback);
-		if (callback.isInvoked()) {
-			return returnValue;
-		} else {
-			return super.getProperty(object,property);
-		}	
-	}
-	
-	
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethodInvocation.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethodInvocation.java
deleted file mode 100644
index 45c0fb6..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethodInvocation.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-/**
- * <p>Dynamic method invocation callback interface. Implementation classes
- * can add a persistence functionality to Grails like save and delete.
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public interface DynamicMethodInvocation {
-
-	/**
-	 * <p>Checks if a method name matches the criteria of the implementation class.
-	 * 
-	 * @param methodName the static method name
-	 * @return result of criteria match test
-	 */
-	public boolean isMethodMatch(String methodName);
-	/**
-	 * <p>Returns the method name for this method implementation.
-	 * 
-	 * @return method name
-	 */
-	public String getMethodName();
-	
-	/**
-	 * <p>Invokes the actual method. The target object and arguments are supplied.
-	 * 
-	 * @param target the target on which the method is invoked.
-	 * @param argumetns the arguments passed in the method call
-	 * @param the return value of the dynamic method invocation.
-	 */
-	public Object invoke(Object target, Object[] arguments);
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethods.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethods.java
deleted file mode 100644
index 82264c9..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicMethods.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-/**
- * An interface that defines methods for a handling dynamic method, static method and property 
- * invocations
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public interface DynamicMethods {
-
-	/**
-	 * Adds a new dynamic method invocation
-	 * @param methodInvocation
-	 */
-	public abstract void addDynamicMethodInvocation(
-			DynamicMethodInvocation methodInvocation);
-
-	/**
-	 * Adds a new static method invocation
-	 * @param methodInvocation
-	 */
-	public abstract void addStaticMethodInvocation(
-			StaticMethodInvocation methodInvocation);
-
-	/**
-	 * Adds a new dynamic property
-	 * @param property
-	 */
-	public abstract void addDynamicProperty(DynamicProperty property);
-
-	/**
-	 * Retrieves a dynamic property for the specified property name
-	 * @param propertyName The name of the property
-	 * @return A DynamicProperty instance of null if none exists
-	 */
-	public abstract DynamicProperty getDynamicProperty(String propertyName);
-	
-	public abstract Object getProperty(Object object, String propertyName,
-			InvocationCallback callback);
-
-	public abstract void setProperty(Object object, String propertyName,
-			Object newValue, InvocationCallback callback);
-
-	public abstract Object invokeMethod(Object object, String methodName,
-			Object[] arguments, InvocationCallback callback);
-
-	public abstract Object invokeStaticMethod(Object object, String methodName,
-			Object[] arguments, InvocationCallback callBack);
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicProperty.java
deleted file mode 100644
index 571dc8b..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/DynamicProperty.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-/**
- * <p>A Dynamic class property getter interface
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public interface DynamicProperty {
-
-	/**
-	 * Whether the target class contains the specified property
-	 * @param propertyName The name of the property
-	 * @return True if the class has the property
-	 */
-	boolean isPropertyMatch(String propertyName);
-
-	/**
-	 * Call the getter on the given object
-	 * @param object The target object
-	 * @return The result of the getter
-	 */
-	Object get(Object object);
-	
-	/**
-	 * Call the setter on the given object
-	 * @param object The target object
-	 * @param newValue The new value of the property
-	 */
-	void set(Object object, Object newValue);
-
-	/**
-	 * @return The name of the property
-	 */
-	String getPropertyName();	
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GenericDynamicProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GenericDynamicProperty.java
deleted file mode 100644
index 37d61fd..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GenericDynamicProperty.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.MissingPropertyException;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A generic dyanmic property for any type
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public class GenericDynamicProperty extends AbstractDynamicProperty {
-
-	private Class type;
-	private boolean readyOnly;
-	private Map propertyToInstanceMap = Collections.synchronizedMap(new HashMap());
-	private Object initialValue;
-	/**
-	 * 
-	 * @param propertyName The name of the property
-	 * @param type The type of the property
-	 * @param initialValue The initial value of the property
-	 * @param readOnly True for read-only property
-	 */
-	public GenericDynamicProperty(String propertyName, Class type,Object initialValue,boolean readOnly) {
-		super(propertyName);
-		if(type == null)
-			throw new IllegalArgumentException("Constructor argument 'type' cannot be null");
-		this.readyOnly = readOnly;
-		this.type = type;;
-		this.initialValue = initialValue;
-	}
-	/**
-	 * 
-	 * @param propertyName The name of the property
-	 * @param type The type of the property
-	 * @param readOnly True for read-only property
-	 */
-	public GenericDynamicProperty(String propertyName, Class type,boolean readOnly) {
-		super(propertyName);
-		if(type == null)
-			throw new IllegalArgumentException("Constructor argument 'type' cannot be null");
-		this.readyOnly = readOnly;
-		this.type = type;;
-	}
-	
-
-	public Object get(Object object) {			
-		String propertyKey = System.identityHashCode(object) + getPropertyName();
-		if(propertyToInstanceMap.containsKey(propertyKey)) {
-			return propertyToInstanceMap.get(propertyKey);
-		}
-		else if(this.initialValue != null) {
-			propertyToInstanceMap.put(propertyKey, this.initialValue);
-			return this.initialValue;
-		}
-		return null;
-	}
-
-	public void set(Object object, Object newValue) {		
-		if(!readyOnly) {
-            if(newValue == null) {
-                propertyToInstanceMap.put(String.valueOf(System.identityHashCode(object)) + getPropertyName(), null );
-            }
-            else if(this.type.isInstance(newValue))
-				propertyToInstanceMap.put(String.valueOf(System.identityHashCode(object)) + getPropertyName(), newValue );
-			else
-				throw new MissingPropertyException("Property '"+this.getPropertyName()+"' for object '"+object.getClass()+"' cannot be set with value '"+newValue+"'. Incorrect type.",object.getClass());	
-		}
-		else {
-			throw new MissingPropertyException("Property '"+this.getPropertyName()+"' for object '"+object.getClass()+"' is read-only!",object.getClass());
-		}
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GroovyDynamicMethodsInterceptor.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GroovyDynamicMethodsInterceptor.java
deleted file mode 100644
index 0a3bbbb..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/GroovyDynamicMethodsInterceptor.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.ProxyMetaClass;
-
-import java.beans.IntrospectionException;
-
-/**
- * class for dynamic methods applied to a Groovy object that registers itself with the GroovyObject instances
- * meta class instance
- * 
- * @author Graeme Rocher
- * @since 07-Nov-2005
- */
-public class GroovyDynamicMethodsInterceptor extends
-		AbstractDynamicMethodsInterceptor {
-
-	private ProxyMetaClass pmc;
-	
-	public GroovyDynamicMethodsInterceptor(GroovyObject go) throws IntrospectionException {
-		this.pmc = PropertyAccessProxyMetaClass.getInstance(go.getClass());
-		pmc.setInterceptor( this );
-		go.setMetaClass(pmc);				
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/InvocationCallback.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/InvocationCallback.java
deleted file mode 100644
index 5acc750..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/InvocationCallback.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public class InvocationCallback {
-
-	private boolean invoked = false;
-	
-	public InvocationCallback() {
-		super();
-	}
-
-	public void markInvoked() {
-		this.invoked = true;
-	}
-	
-	public boolean isInvoked() {
-		return this.invoked;
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessInterceptor.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessInterceptor.java
deleted file mode 100644
index b072ee2..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessInterceptor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.Interceptor;
-
-/**
- * <p>An interface that adds the ability to intercept
- * property getters/setters
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public interface PropertyAccessInterceptor extends Interceptor  {
-	
-	/**
-	 * Intercepts a getXXX call and returns a result. The result is replaced by the 
-	 * real value if doGet() return false
-	 * 
-	 * @param object The target object
-	 * @param property The property to get
-	 * @return
-	 */
-	public Object beforeGet(Object object, String property);
-	
-	public void beforeSet(Object object, String property, Object newValue);
-	
-	public boolean doSet();
-	
-	/**
-	 * @return True if the real property getter should be called
-	 */
-	public boolean doGet();
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessProxyMetaClass.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessProxyMetaClass.java
deleted file mode 100644
index b3b207a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/PropertyAccessProxyMetaClass.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import java.beans.IntrospectionException;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import groovy.lang.MetaClass;
-import groovy.lang.MetaClassRegistry;
-import groovy.lang.ProxyMetaClass;
-/**
- * <p>Extends ProxyMetaClass and adds the ability to intercept calls to property getters/setters
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class PropertyAccessProxyMetaClass extends ProxyMetaClass {
-
-    /**
-     * convenience factory method for the most usual case.
-     */
-    public static ProxyMetaClass getInstance(Class theClass) throws IntrospectionException {
-        MetaClassRegistry metaRegistry = InvokerHelper.getInstance().getMetaRegistry();
-        MetaClass meta = metaRegistry.getMetaClass(theClass);
-        return new PropertyAccessProxyMetaClass(metaRegistry, theClass, meta);
-    }
-    
-	public PropertyAccessProxyMetaClass(MetaClassRegistry registry, Class theClass, MetaClass adaptee) throws IntrospectionException {
-		super(registry, theClass, adaptee);
-	}
-
-	public Object getProperty(Object object, String property) {
-        if (null == interceptor) {
-            return super.getProperty(object, property);
-        }
-        if(interceptor instanceof PropertyAccessInterceptor) {
-        	PropertyAccessInterceptor pae = (PropertyAccessInterceptor)interceptor;
-	        Object result = pae.beforeGet(object,property);
-	        if (pae.doGet()) {
-	            result = super.getProperty(object, property);
-	        }
-	        return result;
-        }
-        return super.getProperty(object, property); 
-	}
-
-	public void setProperty(Object object, String property, Object newValue) {
-        if (null == interceptor) {
-            super.setProperty(object, property,newValue);
-        }
-        if(interceptor instanceof PropertyAccessInterceptor) {
-        	PropertyAccessInterceptor pae = (PropertyAccessInterceptor)interceptor;
-	        pae.beforeSet(object,property,newValue);
-	        if (pae.doSet()) {
-	        	super.setProperty(object, property,newValue);
-	        }
-        }
-        else {
-            super.setProperty(object, property, newValue);
-        }
-    }
-
-	
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/StaticMethodInvocation.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/StaticMethodInvocation.java
deleted file mode 100644
index 22d95ae..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/StaticMethodInvocation.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-/**
- * <p>Static method invocation callback interface. Implementation classes
- * can add static persistent functionality to Grails like finder methods.
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public interface StaticMethodInvocation {
-
-	/**
-	 * <p>Checks if a method name matches the criteria of the implementation class.
-	 * 
-	 * @param methodName the static method name
-	 * @return result of criteria match test
-	 */
-	public boolean isMethodMatch(String methodName);
-	
-	/**
-	 * <p>Invokes the actual method. The class, method name and arguments are provided.
-	 * If no arguments are passed the argument array is empty.
-	 * 
-	 * @param clazz the class the static method is called on
-	 * @param methodName the static method name
-	 * @param arguments the arguments supplied
-	 * @return the return value of the static method invocation
-	 */
-	public Object invoke(Class clazz, String methodName, Object[] arguments);
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/WeakGenericDynamicProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/WeakGenericDynamicProperty.java
deleted file mode 100644
index a6945ab..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/metaclass/WeakGenericDynamicProperty.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.metaclass;
-
-import groovy.lang.MissingPropertyException;
-import org.apache.commons.collections.map.ReferenceMap;
-
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * A generic dyanmic property for any type used a soft hashmap implementation for generic properties
- * registered as global in the MetaClass
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public class WeakGenericDynamicProperty extends AbstractDynamicProperty {
-
-    private Class type;
-    private boolean readyOnly;
-    private Map propertyToInstanceMap = Collections.synchronizedMap(new ReferenceMap(ReferenceMap.SOFT,ReferenceMap.SOFT,true));
-    private Object initialValue;
-    /**
-     *
-     * @param propertyName The name of the property
-     * @param type The type of the property
-     * @param initialValue The initial value of the property
-     * @param readOnly True for read-only property
-     */
-    public WeakGenericDynamicProperty(String propertyName, Class type,Object initialValue,boolean readOnly) {
-        super(propertyName);
-        if(type == null)
-            throw new IllegalArgumentException("Constructor argument 'type' cannot be null");
-        this.readyOnly = readOnly;
-        this.type = type;;
-        this.initialValue = initialValue;
-    }
-    /**
-     *
-     * @param propertyName The name of the property
-     * @param type The type of the property
-     * @param readOnly True for read-only property
-     */
-    public WeakGenericDynamicProperty(String propertyName, Class type,boolean readOnly) {
-        super(propertyName);
-        if(type == null)
-            throw new IllegalArgumentException("Constructor argument 'type' cannot be null");
-        this.readyOnly = readOnly;
-        this.type = type;;
-    }
-
-
-    public Object get(Object object) {
-        String propertyKey = System.identityHashCode(object) + getPropertyName();
-        if(propertyToInstanceMap.containsKey(propertyKey)) {
-            return propertyToInstanceMap.get(propertyKey);
-        }
-        else if(this.initialValue != null) {
-            propertyToInstanceMap.put(propertyKey, this.initialValue);
-            return this.initialValue;
-        }
-        return null;
-    }
-
-    public void set(Object object, Object newValue) {
-        if(!readyOnly) {
-            if(this.type.isInstance(newValue))
-                propertyToInstanceMap.put(String.valueOf(System.identityHashCode(object)) + getPropertyName(), newValue );
-            else if(newValue != null)
-                throw new MissingPropertyException("Property '"+this.getPropertyName()+"' for object '"+object.getClass()+"' cannot be set with value '"+newValue+"'. Incorrect type.",object.getClass());
-        }
-        else {
-            throw new MissingPropertyException("Property '"+this.getPropertyName()+"' for object '"+object.getClass()+"' is read-only!",object.getClass());
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/GrailsResourceHolder.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/GrailsResourceHolder.java
deleted file mode 100644
index 1b72b70..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/GrailsResourceHolder.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.spring;
-
-import org.springframework.core.io.Resource;
-import org.codehaus.groovy.grails.exceptions.GrailsConfigurationException;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.io.IOException;
-import java.io.File;
-
-/**
- * A class that holds references to all the Grails resource instances to support class reloading
- *
- * @author Graeme Rocher
- * @since 31-Jan-2006
- */
-public class GrailsResourceHolder {
-
-    public static Pattern GRAILS_RESOURCE_PATTERN = Pattern.compile(".+\\\\grails-app\\\\\\w+\\\\(.+)\\.groovy");
-    static{
-            if(File.separator.equals("/")){
-                GRAILS_RESOURCE_PATTERN =
-                    Pattern.compile(".+/grails-app/\\w+/(.+)\\.groovy");
-            }
-    }
-
-
-    public static final String APPLICATION_CONTEXT_ID = "grailsResourceHolder";
-
-    private Resource[] resources;
-
-    public Resource[] getResources() {
-        return resources;
-    }
-
-    public void setResources(Resource[] resources) {
-        this.resources = resources;
-    }
-
-    /**
-     * @param resource
-     * @return Retrieves the class name of the specified resource
-     */
-    public String getClassName(Resource resource) {
-        Matcher m;
-        try {
-            m = GRAILS_RESOURCE_PATTERN.matcher(resource.getFile().getAbsolutePath());
-        } catch (IOException e) {
-            throw new GrailsConfigurationException("I/O error reading class name from resource ["+resource+"]: " + e.getMessage(),e );
-        }
-        if(m.find()) {
-            return m.group(1);
-        }
-        return null;
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfig.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfig.java
deleted file mode 100644
index ce7a610..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfig.java
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.spring;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.apache.commons.lang.WordUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.*;
-import org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean;
-import org.codehaus.groovy.grails.orm.hibernate.support.HibernateDialectDetectorFactoryBean;
-import org.codehaus.groovy.grails.orm.hibernate.validation.GrailsDomainClassValidator;
-import org.codehaus.groovy.grails.scaffolding.*;
-import org.codehaus.groovy.grails.support.ClassEditor;
-import org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver;
-import org.codehaus.groovy.grails.web.pageflow.GrailsFlowBuilder;
-import org.codehaus.groovy.grails.web.pageflow.execution.servlet.GrailsServletFlowExecutionManager;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsUrlHandlerMapping;
-import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController;
-import org.codehaus.groovy.grails.web.servlet.view.GrailsViewResolver;
-import org.hibernate.dialect.HSQLDialect;
-import org.hibernate.dialect.MySQLDialect;
-import org.springframework.beans.factory.config.CustomEditorConfigurer;
-import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
-import org.springframework.context.support.ReloadableResourceBundleMessageSource;
-import org.springframework.jdbc.datasource.DriverManagerDataSource;
-import org.springframework.orm.hibernate3.HibernateTransactionManager;
-import org.springframework.transaction.interceptor.TransactionProxyFactoryBean;
-import org.springframework.util.Assert;
-import org.springframework.web.servlet.i18n.CookieLocaleResolver;
-import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
-import org.springframework.webflow.config.FlowFactoryBean;
-import org.springframework.webflow.mvc.FlowController;
-import org.springframework.aop.target.HotSwappableTargetSource;
-import org.springframework.aop.framework.ProxyFactoryBean;
-import org.springmodules.beans.factory.config.MapToPropertiesFactoryBean;
-import org.springmodules.beans.factory.drivers.Bean;
-import org.springmodules.db.hsqldb.ServerBean;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * <p>Creates beans and bean references for a Grails application.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class SpringConfig {
-
-	private GrailsApplication application = null;
-	private static final Log LOG = LogFactory.getLog(SpringConfig.class);
-
-	public SpringConfig(GrailsApplication application) {
-		super();
-		this.application = application;
-	}
-
-	public Collection getBeanReferences() {
-		Collection beanReferences = new ArrayList();
-		Map urlMappings = new HashMap();
-		
-		Assert.notNull(application);
-
-		// configure general references
-		Bean classLoader = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-		classLoader.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-		classLoader.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getClassLoader"));
-		
-		Bean classEditor = SpringConfigUtils.createSingletonBean(ClassEditor.class);
-		classEditor.setProperty("classLoader", classLoader);
-		
-		Bean propertyEditors = SpringConfigUtils.createSingletonBean(CustomEditorConfigurer.class);
-		Map customEditors = new HashMap();
-		customEditors.put(SpringConfigUtils.createLiteralValue("java.lang.Class"), classEditor);
-		propertyEditors.setProperty("customEditors", SpringConfigUtils.createMap(customEditors));
-		beanReferences.add(SpringConfigUtils.createBeanReference("customEditors", propertyEditors));
-			
-		// configure exception handler
-		Bean exceptionHandler = SpringConfigUtils.createSingletonBean(GrailsExceptionResolver.class);
-		exceptionHandler.setProperty("exceptionMappings", SpringConfigUtils.createLiteralValue("java.lang.Exception=error"));
-		beanReferences.add(SpringConfigUtils.createBeanReference("exceptionHandler", exceptionHandler));
-
-        // configure multipart support
-        Bean multipartResolver = SpringConfigUtils.createSingletonBean(CommonsMultipartResolver.class);
-        beanReferences.add(SpringConfigUtils.createBeanReference("multipartResolver", multipartResolver));
-
-        // configure data source & hibernate
-		LOG.info("[SpringConfig] Configuring i18n support");
-		populateI18nSupport(beanReferences);		
-		
-		// configure data source & hibernate
-		LOG.info("[SpringConfig] Configuring Grails data source");
-		populateDataSourceReferences(beanReferences);
-		
-		// configure domain classes
-		LOG.info("[SpringConfig] Configuring Grails domain");
-		populateDomainClassReferences(beanReferences, classLoader);
-				
-		// configure services
-		LOG.info("[SpringConfig] Configuring Grails services");
-		populateServiceClassReferences(beanReferences);
-		
-		// configure grails page flows
-		LOG.info("[SpringConfig] Configuring Grails page flows");
-		populatePageFlowReferences(beanReferences, urlMappings);
-	
-		// configure grails controllers
-		LOG.info("[SpringConfig] Configuring Grails controllers");
-		populateControllerReferences(beanReferences, urlMappings);
-		
-		// configure scaffolding
-		LOG.info("[SpringConfig] Configuring Grails scaffolding");
-		populateScaffoldingReferences(beanReferences);
-		
-				
-		return beanReferences;
-	}
-	private void populateI18nSupport(Collection beanReferences) {
-		// setup message source
-		Bean messageSource = SpringConfigUtils.createSingletonBean( ReloadableResourceBundleMessageSource.class );
-		messageSource.setProperty( "basename", SpringConfigUtils.createLiteralValue("classpath:messages"));				
-		beanReferences.add(SpringConfigUtils.createBeanReference("messageSource", messageSource));
-		
-		// setup locale change interceptor
-		Bean localeChangeInterceptor = SpringConfigUtils.createSingletonBean(LocaleChangeInterceptor.class);
-		localeChangeInterceptor.setProperty("paramName", SpringConfigUtils.createLiteralValue("lang"));
-		beanReferences.add(SpringConfigUtils.createBeanReference("localeChangeInterceptor", localeChangeInterceptor));
-		
-		// setup locale resolver
-		Bean localeResolver = SpringConfigUtils.createSingletonBean(CookieLocaleResolver.class);
-		beanReferences.add(SpringConfigUtils.createBeanReference("localeResolver", localeResolver));
-	}
-	// configures scaffolding
-	private void populateScaffoldingReferences(Collection beanReferences) {
-		// go through all the controllers
-		GrailsControllerClass[] simpleControllers = application.getControllers();
-		for (int i = 0; i < simpleControllers.length; i++) {
-            // retrieve appropriate domain class
-            Class scaffoldedClass = simpleControllers[i].getScaffoldedClass();
-            GrailsDomainClass domainClass;
-            if(scaffoldedClass == null) {
-                domainClass = application.getGrailsDomainClass(simpleControllers[i].getName());
-                if(domainClass != null) {
-                    scaffoldedClass = domainClass.getClazz();
-                }
-            }
-
-            if(scaffoldedClass == null) {
-                LOG.info("[Spring] Scaffolding disabled for controller ["+simpleControllers[i].getFullName()+"], no equivalent domain class named ["+simpleControllers[i].getName()+"]");
-            }
-            else {
-                Bean scaffolder = SpringConfigUtils.createSingletonBean(DefaultGrailsScaffolder.class);
-
-                // create scaffold domain
-                Collection constructorArguments = new ArrayList();
-                constructorArguments.add(SpringConfigUtils.createLiteralValue(scaffoldedClass.getName()));
-
-                constructorArguments.add(SpringConfigUtils.createBeanReference("sessionFactory"));
-
-                Bean domain = SpringConfigUtils.createSingletonBean(GrailsScaffoldDomain.class, constructorArguments);
-//                domain.setProperty("validator", SpringConfigUtils.createBeanReference( domainClass.getFullName() + "Validator"));
-
-                beanReferences.add( SpringConfigUtils.createBeanReference( scaffoldedClass.getName() + "ScaffoldDomain",domain ) );
-
-                // create and configure request handler
-                Bean requestHandler = SpringConfigUtils.createSingletonBean(DefaultScaffoldRequestHandler.class);
-                requestHandler.setProperty("scaffoldDomain", SpringConfigUtils.createBeanReference(scaffoldedClass.getName() + "ScaffoldDomain"));
-
-                // create response factory
-                constructorArguments = new ArrayList();
-                constructorArguments.add(SpringConfigUtils.createBeanReference("grailsApplication"));
-
-                // configure default response handler
-                Bean defaultResponseHandler = SpringConfigUtils.createSingletonBean(ViewDelegatingScaffoldResponseHandler.class);
-
-                // configure a simple view delegating resolver
-                Bean defaultViewResolver = SpringConfigUtils.createSingletonBean(DefaultGrailsScaffoldViewResolver.class,constructorArguments);
-                defaultResponseHandler.setProperty("scaffoldViewResolver", defaultViewResolver);
-
-                // create constructor arguments response handler factory
-                constructorArguments = new ArrayList();
-                constructorArguments.add(SpringConfigUtils.createBeanReference("grailsApplication"));
-                constructorArguments.add(defaultResponseHandler);
-
-                Bean responseHandlerFactory = SpringConfigUtils.createSingletonBean( DefaultGrailsResponseHandlerFactory.class,constructorArguments );
-
-                scaffolder.setProperty( "scaffoldResponseHandlerFactory", responseHandlerFactory );
-                scaffolder.setProperty("scaffoldRequestHandler", requestHandler);
-
-                beanReferences.add( SpringConfigUtils.createBeanReference( simpleControllers[i].getFullName() + "Scaffolder",scaffolder  ) );
-            }
-		}
-	}
-
-	private void populateControllerReferences(Collection beanReferences, Map urlMappings) {
-		Bean simpleGrailsController = SpringConfigUtils.createSingletonBean(SimpleGrailsController.class);
-		simpleGrailsController.setAutowire("byType");
-		beanReferences.add(SpringConfigUtils.createBeanReference(SimpleGrailsController.APPLICATION_CONTEXT_ID, simpleGrailsController));
-		
-		Bean grailsViewResolver = SpringConfigUtils.createSingletonBean(GrailsViewResolver.class);
-		
-		grailsViewResolver.setProperty("viewClass",SpringConfigUtils.createLiteralValue("org.springframework.web.servlet.view.JstlView"));
-		grailsViewResolver.setProperty("prefix", SpringConfigUtils.createLiteralValue("/WEB-INF/grails-app/views/"));
-		grailsViewResolver.setProperty("suffix", SpringConfigUtils.createLiteralValue(".jsp"));
-		beanReferences.add(SpringConfigUtils.createBeanReference("jspViewResolver", grailsViewResolver));
-		
-		Bean simpleUrlHandlerMapping = null;
-		if (application.getControllers().length > 0 || application.getPageFlows().length > 0) {
-			simpleUrlHandlerMapping = SpringConfigUtils.createSingletonBean(GrailsUrlHandlerMapping.class);
-			//beanReferences.add(SpringConfigUtils.createBeanReference(GrailsUrlHandlerMapping.APPLICATION_CONTEXT_ID + "Target", simpleUrlHandlerMapping));
-
-            Collection args = new ArrayList();
-            args.add(simpleUrlHandlerMapping);
-            Bean simpleUrlHandlerMappingTargetSource = SpringConfigUtils.createSingletonBean(HotSwappableTargetSource.class, args);
-            beanReferences.add(SpringConfigUtils.createBeanReference(GrailsUrlHandlerMapping.APPLICATION_CONTEXT_TARGET_SOURCE,simpleUrlHandlerMappingTargetSource));
-
-            Bean simpleUrlHandlerMappingProxy = SpringConfigUtils.createSingletonBean(ProxyFactoryBean.class);
-            simpleUrlHandlerMappingProxy.setProperty("targetSource", SpringConfigUtils.createBeanReference(GrailsUrlHandlerMapping.APPLICATION_CONTEXT_TARGET_SOURCE));
-            simpleUrlHandlerMappingProxy.setProperty("proxyInterfaces", SpringConfigUtils.createLiteralValue("org.springframework.web.servlet.HandlerMapping"));
-            beanReferences.add(SpringConfigUtils.createBeanReference(GrailsUrlHandlerMapping.APPLICATION_CONTEXT_ID, simpleUrlHandlerMappingProxy));
-        }
-		
-		GrailsControllerClass[] simpleControllers = application.getControllers();
-		for (int i = 0; i < simpleControllers.length; i++) {
-			GrailsControllerClass simpleController = simpleControllers[i];
-			if (!simpleController.getAvailable()) {
-				continue;
-			}
-            // setup controller class by retrieving it from the  grails application
-            Bean controllerClass = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-			controllerClass.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-			controllerClass.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getController"));
-			controllerClass.setProperty("arguments", SpringConfigUtils.createLiteralValue(simpleController.getFullName()));
-			beanReferences.add(SpringConfigUtils.createBeanReference(simpleController.getFullName() + "Class", controllerClass));
-
-            // configure controller class as hot swappable target source
-            Collection args = new ArrayList();
-            args.add(SpringConfigUtils.createBeanReference(simpleController.getFullName() + "Class"));
-            Bean controllerTargetSource = SpringConfigUtils.createSingletonBean(HotSwappableTargetSource.class, args);
-            beanReferences.add(SpringConfigUtils.createBeanReference(simpleController.getFullName() + "TargetSource", controllerTargetSource));
-
-            // setup AOP proxy that uses hot swappable target source
-            Bean controllerClassProxy = SpringConfigUtils.createSingletonBean(ProxyFactoryBean.class);
-            controllerClassProxy.setProperty("targetSource", SpringConfigUtils.createBeanReference(simpleController.getFullName() + "TargetSource"));
-            controllerClassProxy.setProperty("proxyInterfaces", SpringConfigUtils.createLiteralValue("org.codehaus.groovy.grails.commons.GrailsControllerClass"));
-            beanReferences.add(SpringConfigUtils.createBeanReference(simpleController.getFullName() + "Proxy", controllerClassProxy));
-
-            // create prototype bean that uses the controller AOP proxy controller class bean as a factory
-            Bean controller = SpringConfigUtils.createPrototypeBean();
-			controller.setFactoryBean(SpringConfigUtils.createBeanReference(simpleController.getFullName() + "Proxy"));
-			controller.setFactoryMethod("newInstance");
-			controller.setAutowire("byName");
-
-            beanReferences.add(SpringConfigUtils.createBeanReference(simpleController.getFullName(), controller));
-			for (int x = 0; x < simpleController.getURIs().length; x++) {
-				if(!urlMappings.containsKey(simpleController.getURIs()[x]))
-					urlMappings.put(simpleController.getURIs()[x], SimpleGrailsController.APPLICATION_CONTEXT_ID);
-			}		
-		}		
-		if (simpleUrlHandlerMapping != null) {
-			simpleUrlHandlerMapping.setProperty("mappings", SpringConfigUtils.createProperties(urlMappings));
-		}
-
-        GrailsTagLibClass[] tagLibs = application.getGrailsTabLibClasses();
-        for (int i = 0; i < tagLibs.length; i++) {
-            GrailsTagLibClass grailsTagLib = tagLibs[i];
-            // setup taglib class by retrieving it from the grails application bean
-            Bean taglibClass = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-            taglibClass.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-            taglibClass.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getGrailsTagLibClass"));
-            taglibClass.setProperty("arguments", SpringConfigUtils.createLiteralValue(grailsTagLib.getFullName()));
-            beanReferences.add(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "Class", taglibClass));
-
-            // configure taglib class as hot swappable target source
-            Collection args = new ArrayList();
-            args.add(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "Class"));
-            Bean taglibTargetSource = SpringConfigUtils.createSingletonBean(HotSwappableTargetSource.class, args);
-
-            // setup AOP proxy that uses hot swappable target source
-            beanReferences.add(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "TargetSource", taglibTargetSource));
-            Bean taglibClassProxy = SpringConfigUtils.createSingletonBean(ProxyFactoryBean.class);
-            taglibClassProxy.setProperty("targetSource", SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "TargetSource"));
-            taglibClassProxy.setProperty("proxyInterfaces", SpringConfigUtils.createLiteralValue("org.codehaus.groovy.grails.commons.GrailsTagLibClass"));
-            beanReferences.add(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "Proxy", taglibClassProxy));
-
-            // create prototype bean that refers to the AOP proxied taglib class uses it as a factory
-            Bean taglib = SpringConfigUtils.createPrototypeBean();
-            taglib.setFactoryBean(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName() + "Proxy"));
-            taglib.setFactoryMethod("newInstance");
-            taglib.setAutowire("byName");
-
-            beanReferences.add(SpringConfigUtils.createBeanReference(grailsTagLib.getFullName(), taglib));
-        }
-    }
-
-	private void populateDataSourceReferences(Collection beanReferences) {
-		boolean dependsOnHsqldbServer = false;
-		GrailsDataSource grailsDataSource = application.getGrailsDataSource();
-        Bean localSessionFactoryBean = SpringConfigUtils.createSingletonBean(ConfigurableLocalSessionFactoryBean.class);
-
-        if (grailsDataSource != null) {
-			
-			Bean dataSource;
-			if (grailsDataSource.isPooled()) {
-				dataSource = SpringConfigUtils.createSingletonBean(BasicDataSource.class);
-				dataSource.setDestroyMethod("close");
-			} else {
-				dataSource = SpringConfigUtils.createSingletonBean(DriverManagerDataSource.class);
-			}
-			dataSource.setProperty("driverClassName", SpringConfigUtils.createLiteralValue(grailsDataSource.getDriverClassName()));
-			dataSource.setProperty("url", SpringConfigUtils.createLiteralValue(grailsDataSource.getUrl()));
-			dataSource.setProperty("username", SpringConfigUtils.createLiteralValue(grailsDataSource.getUsername()));
-			dataSource.setProperty("password", SpringConfigUtils.createLiteralValue(grailsDataSource.getPassword()));
-            if(grailsDataSource.getConfigurationClass() != null) {
-                LOG.info("[SpringConfig] Using custom Hibernate configuration class ["+grailsDataSource.getConfigurationClass()+"]");
-                localSessionFactoryBean.setProperty("configClass", SpringConfigUtils.createLiteralValue(grailsDataSource.getConfigurationClass().getName()));
-            }
-            beanReferences.add(SpringConfigUtils.createBeanReference("dataSource", dataSource));
-		} else {
-			Bean dataSource = SpringConfigUtils.createSingletonBean(BasicDataSource.class);
-			dataSource.setDestroyMethod("close");
-			dataSource.setProperty("driverClassName", SpringConfigUtils.createLiteralValue("org.hsqldb.jdbcDriver"));
-			dataSource.setProperty("url", SpringConfigUtils.createLiteralValue("jdbc:hsqldb:hsql://localhost:9101/"));
-			dataSource.setProperty("username", SpringConfigUtils.createLiteralValue("sa"));
-			dataSource.setProperty("password", SpringConfigUtils.createLiteralValue(""));
-			beanReferences.add(SpringConfigUtils.createBeanReference("dataSource", dataSource));
-			
-			Bean hsqldbServer = SpringConfigUtils.createSingletonBean(ServerBean.class);
-			hsqldbServer.setProperty("dataSource", SpringConfigUtils.createBeanReference("dataSource"));
-			Map hsqldbProperties = new HashMap();
-			hsqldbProperties.put("server.port", "9101");
-			hsqldbProperties.put("server.database.0", "mem:temp");
-			hsqldbServer.setProperty("serverProperties", SpringConfigUtils.createProperties(hsqldbProperties));
-			beanReferences.add(SpringConfigUtils.createBeanReference("hsqldbServer", hsqldbServer));
-			dependsOnHsqldbServer = true;
-		}
-		
-		Map vendorNameDialectMappings = new HashMap();
-		vendorNameDialectMappings.put("HSQL Database Engine", HSQLDialect.class.getName());
-		vendorNameDialectMappings.put("MySQL", MySQLDialect.class.getName());
-			
-		Bean dialectDetector = SpringConfigUtils.createSingletonBean(HibernateDialectDetectorFactoryBean.class);
-		dialectDetector.setProperty("dataSource", SpringConfigUtils.createBeanReference("dataSource"));
-		dialectDetector.setProperty("vendorNameDialectMappings", SpringConfigUtils.createProperties(vendorNameDialectMappings));
-		if (dependsOnHsqldbServer) {
-			Collection dependsOn = new ArrayList();
-			dependsOn.add(SpringConfigUtils.createBeanReference("hsqldbServer"));
-			dialectDetector.setDependsOn(dependsOn);
-		}
-		
-		Map hibernatePropertiesMap = new HashMap();
-		hibernatePropertiesMap.put(SpringConfigUtils.createLiteralValue("hibernate.dialect"), dialectDetector);
-		if(grailsDataSource == null ) {
-			hibernatePropertiesMap.put(SpringConfigUtils.createLiteralValue("hibernate.hbm2ddl.auto"), SpringConfigUtils.createLiteralValue("create-drop"));
-		}
-		else {
-			if(grailsDataSource.getDbCreate() != null) {
-				hibernatePropertiesMap.put(SpringConfigUtils.createLiteralValue("hibernate.hbm2ddl.auto"), SpringConfigUtils.createLiteralValue(grailsDataSource.getDbCreate()));
-			}
-		}
-		Bean hibernateProperties = SpringConfigUtils.createSingletonBean(MapToPropertiesFactoryBean.class);
-		hibernateProperties.setProperty("map", SpringConfigUtils.createMap(hibernatePropertiesMap));
-				
-		Bean grailsClassLoader = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-		grailsClassLoader.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-		grailsClassLoader.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getClassLoader"));
-		
-
-		localSessionFactoryBean.setProperty("dataSource", SpringConfigUtils.createBeanReference("dataSource"));
-		ClassLoader cl = this.application.getClassLoader();
-		URL hibernateConfig = cl.getResource("hibernate.cfg.xml");
-		if(hibernateConfig != null) {
-			localSessionFactoryBean.setProperty("configLocation", SpringConfigUtils.createLiteralValue("classpath:hibernate.cfg.xml"));
-		}
-        localSessionFactoryBean.setProperty("hibernateProperties", hibernateProperties);
-		localSessionFactoryBean.setProperty("grailsApplication", SpringConfigUtils.createBeanReference("grailsApplication"));
-		localSessionFactoryBean.setProperty("classLoader", grailsClassLoader);
-		beanReferences.add(SpringConfigUtils.createBeanReference("sessionFactory", localSessionFactoryBean));
-		
-		Bean transactionManager = SpringConfigUtils.createSingletonBean(HibernateTransactionManager.class);
-		transactionManager.setProperty("sessionFactory", SpringConfigUtils.createBeanReference("sessionFactory"));
-		beanReferences.add(SpringConfigUtils.createBeanReference("transactionManager", transactionManager));
-	}
-
-	private void populateDomainClassReferences(Collection beanReferences, Bean classLoader) {
-		GrailsDomainClass[] grailsDomainClasses = application.getGrailsDomainClasses();
-		for (int i = 0; i < grailsDomainClasses.length; i++) {
-			GrailsDomainClass grailsDomainClass = grailsDomainClasses[i];
-			
-			Bean domainClassBean = 	SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-			domainClassBean.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-			domainClassBean.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getGrailsDomainClass"));
-			domainClassBean.setProperty("arguments", SpringConfigUtils.createLiteralValue(grailsDomainClass.getFullName()));
-			beanReferences.add(SpringConfigUtils.createBeanReference(grailsDomainClass.getFullName() + "DomainClass", domainClassBean));
-			
-			// create persistent class bean references
-			Bean persistentClassBean = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-			persistentClassBean.setProperty("targetObject", SpringConfigUtils.createBeanReference(grailsDomainClass.getFullName() + "DomainClass"));
-			persistentClassBean.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getClazz"));
-			
-			beanReferences.add(SpringConfigUtils.createBeanReference(grailsDomainClass.getFullName() + "PersistentClass", persistentClassBean));
-			
-			/*Collection constructorArguments = new ArrayList();
-			// configure persistent methods
-			constructorArguments.add(SpringConfigUtils.createBeanReference("grailsApplication"));
-			constructorArguments.add(SpringConfigUtils.createLiteralValue(grailsDomainClass.getClazz().getName()));
-			constructorArguments.add(SpringConfigUtils.createBeanReference("sessionFactory"));
-			constructorArguments.add(classLoader);
-			Bean hibernatePersistentMethods = SpringConfigUtils.createSingletonBean(DomainClassMethods.class, constructorArguments);
-			beanReferences.add(SpringConfigUtils.createBeanReference(grailsDomainClass.getFullName() + "PersistentMethods", hibernatePersistentMethods));*/
-
-			// configure validator			
-			Bean validatorBean = SpringConfigUtils.createSingletonBean( GrailsDomainClassValidator.class);
-			validatorBean.setProperty( "domainClass" ,SpringConfigUtils.createBeanReference(grailsDomainClass.getFullName() + "DomainClass") );
-			validatorBean.setProperty( "sessionFactory" ,SpringConfigUtils.createBeanReference("sessionFactory") );
-			beanReferences.add( SpringConfigUtils.createBeanReference( grailsDomainClass.getFullName() + "Validator", validatorBean ) );			
-		}
-	}
-
-	private void populateServiceClassReferences(Collection beanReferences) {
-		GrailsServiceClass[] serviceClasses = application.getGrailsServiceClasses();
-		for (int i = 0; i <serviceClasses.length; i++) {
-			GrailsServiceClass grailsServiceClass = serviceClasses[i];
-			Bean serviceClass = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-			serviceClass.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-			serviceClass.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getGrailsServiceClass"));
-			serviceClass.setProperty("arguments", SpringConfigUtils.createLiteralValue(grailsServiceClass.getFullName()));
-			beanReferences.add(SpringConfigUtils.createBeanReference(grailsServiceClass.getFullName() + "Class", serviceClass));
-			
-			Bean serviceInstance = SpringConfigUtils.createSingletonBean();
-			serviceInstance.setFactoryBean(SpringConfigUtils.createBeanReference(grailsServiceClass.getFullName() + "Class"));
-			serviceInstance.setFactoryMethod("newInstance");
-			if (grailsServiceClass.byName()) {
-				serviceInstance.setAutowire("byName");
-			} else if (grailsServiceClass.byType()) {
-				serviceInstance.setAutowire("byType");
-			}
-            // configure the service instance as a hotswappable target source
-
-            // if its transactional configure transactional proxy
-            if (grailsServiceClass.isTransactional()) {
-				Map transactionAttributes = new HashMap();
-				transactionAttributes.put("*", "PROPAGATION_REQUIRED");
-				Bean transactionalProxy = SpringConfigUtils.createSingletonBean(TransactionProxyFactoryBean.class);
-				transactionalProxy.setProperty("target", serviceInstance);
-				transactionalProxy.setProperty("proxyTargetClass", SpringConfigUtils.createLiteralValue("true"));
-				transactionalProxy.setProperty("transactionAttributes", SpringConfigUtils.createProperties(transactionAttributes));
-				transactionalProxy.setProperty("transactionManager", SpringConfigUtils.createBeanReference("transactionManager"));
-				beanReferences.add(SpringConfigUtils.createBeanReference(WordUtils.uncapitalize(grailsServiceClass.getName()) + "Service", transactionalProxy));
-			} else {
-                // otherwise configure a standard proxy
-                beanReferences.add(SpringConfigUtils.createBeanReference(WordUtils.uncapitalize(grailsServiceClass.getName()) + "Service", serviceInstance));
-			}
-		}
-	}
-
-	/**
-	 * Configures Grails page flows
-	 */
-	private void populatePageFlowReferences(Collection beanReferences, Map urlMappings) {
-		GrailsPageFlowClass[] pageFlows = application.getPageFlows();
-		
-		for (int i = 0; i < pageFlows.length; i++) {
-			GrailsPageFlowClass pageFlow = pageFlows[i];
-			if (!pageFlow.getAvailable()) {
-				continue;
-			}
-			Bean pageFlowClass = SpringConfigUtils.createSingletonBean(MethodInvokingFactoryBean.class);
-			pageFlowClass.setProperty("targetObject", SpringConfigUtils.createBeanReference("grailsApplication"));
-			pageFlowClass.setProperty("targetMethod", SpringConfigUtils.createLiteralValue("getPageFlow"));
-			pageFlowClass.setProperty("arguments", SpringConfigUtils.createLiteralValue(pageFlow.getFullName()));
-			beanReferences.add(SpringConfigUtils.createBeanReference(pageFlow.getFullName() + "Class", pageFlowClass));
-			
-			Bean pageFlowInstance = SpringConfigUtils.createSingletonBean();
-			pageFlowInstance.setFactoryBean(SpringConfigUtils.createBeanReference(pageFlow.getFullName() + "Class"));
-			pageFlowInstance.setFactoryMethod("newInstance");
-			if (pageFlow.byType()) {
-				pageFlowInstance.setAutowire("byType");
-			} else if (pageFlow.byName()) {
-				pageFlowInstance.setAutowire("byName");
-			}
-			beanReferences.add(SpringConfigUtils.createBeanReference(pageFlow.getFullName(), pageFlowInstance));
-			
-			Bean flowBuilder = SpringConfigUtils.createSingletonBean(GrailsFlowBuilder.class);
-			flowBuilder.setProperty("pageFlowClass", SpringConfigUtils.createBeanReference(pageFlow.getFullName() + "Class"));
-			
-			Bean flowFactoryBean = SpringConfigUtils.createSingletonBean(FlowFactoryBean.class);
-			flowFactoryBean.setProperty("flowBuilder", flowBuilder);
-			beanReferences.add(SpringConfigUtils.createBeanReference(pageFlow.getFlowId(), flowFactoryBean));
-
-			if (pageFlow.getAccessible()) {
-				Bean flowExecutionManager = SpringConfigUtils.createSingletonBean(GrailsServletFlowExecutionManager.class);
-				flowExecutionManager.setProperty("flow", SpringConfigUtils.createBeanReference(pageFlow.getFlowId()));
-				
-				Bean flowController = SpringConfigUtils.createSingletonBean(FlowController.class);
-				flowController.setProperty("flowExecutionManager", flowExecutionManager);
-				beanReferences.add(SpringConfigUtils.createBeanReference(pageFlow.getFullName() + "Controller", flowController));
-				
-				urlMappings.put(pageFlow.getUri(), pageFlow.getFullName() + "Controller");
-			}
-			
-		}
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfigUtils.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfigUtils.java
deleted file mode 100644
index 5248741..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/commons/spring/SpringConfigUtils.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons.spring;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.springmodules.beans.factory.drivers.Bean;
-import org.springmodules.beans.factory.drivers.BeanReference;
-import org.springmodules.beans.factory.drivers.Instance;
-import org.springmodules.beans.factory.drivers.LiteralList;
-import org.springmodules.beans.factory.drivers.LiteralMap;
-import org.springmodules.beans.factory.drivers.LiteralProperties;
-import org.springmodules.beans.factory.drivers.LiteralValue;
-
-/**
- * <p>Helper class to create Spring configuration objects for loading the application context.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class SpringConfigUtils {
-
-	private SpringConfigUtils() {
-		super();
-	}
-
-	public static Bean createSingletonBean() {
-		return createSingletonBean(null);
-	}
-	
-	public static Bean createSingletonBean(Class clazz) {
-		return createSingletonBean(clazz, null, null);
-	}
-	
-	public static Bean createSingletonBean(Class clazz, Collection constructorArguments) {
-		return createSingletonBean(clazz, null, constructorArguments);
-	}
-	
-	public static Bean createPrototypeBean() {
-		return createPrototypeBean(null, null, null);
-	}
-	
-	public static Bean createPrototypeBean(Class clazz) {
-		return createPrototypeBean(clazz, null, null);
-	}
-	
-	public static Bean createPrototypeBean(Class clazz, Collection constructorArguments) {
-		return createPrototypeBean(clazz, null, constructorArguments);
-	}	
-	
-	public static Bean createPrototypeBean(Class clazz,  BeanReference parent, Collection constructorArguments) {
-		return createBean(clazz, parent, false, constructorArguments,false);
-	}
-
-	public static Bean createSingletonBean(Class clazz, BeanReference parent) {
-		return createSingletonBean(clazz, parent, null);
-	}
-	
-	public static Bean createSingletonBean(Class clazz, BeanReference parent, Collection constructorArguments) {
-		return createBean(clazz, parent, false, constructorArguments,true);
-	}
-	
-	public static Bean createAbstractSingletonBean(Class clazz) {
-		return createAbstractSingletonBean(clazz, null);
-	}
-	
-	public static Bean createAbstractSingletonBean(Class clazz, Collection constructorArguments) {
-		return createBean(clazz, null, true, constructorArguments,true);
-	}
-	
-	public static Bean createBean(final Class clazz, final BeanReference parent, final boolean _abstract, final Collection constructorArguments, final boolean isSingleton) {
-		return new Bean() {
-			private String autowire = null;
-			private Collection dependsOn = null;
-			private String description = null;
-			private String destroyMethod = null;
-			private String initMethod = null;
-			private Map properties = new HashMap();
-			private BeanReference factoryBean = null;
-			private String factoryMethod = null;
-			
-			public String getAutowire() {
-				return autowire;
-			}
-			
-			public Class getClazz() {
-				return clazz;
-			}
-			
-			public Collection getConstructorArguments() {
-				return constructorArguments;
-			}
-			
-			public Collection getDependsOn() {
-				return dependsOn;
-			}
-			
-			public String getDescription() {
-				return description;
-			}
-			
-			public String getDestroyMethod() {
-				return destroyMethod;
-			}
-			
-			public String getInitMethod() {
-				return initMethod;
-			}
-			
-			public BeanReference getParent() {
-				return parent;
-			}
-			
-			public Map getProperties() {
-				return properties;
-			}
-			
-			public boolean isAbstract() {
-				return _abstract;
-			}
-			
-			public boolean isLazy() {
-				return false;
-			}
-			
-			public boolean isSingleton() {
-				return isSingleton;
-			}
-			
-			public void setAutowire(String autowire) {
-				this.autowire = autowire;
-			}
-			
-			public void setDependsOn(Collection dependsOn) {
-				this.dependsOn = dependsOn;
-			}
-			
-			public void setDescription(String description) {
-				this.description = description;
-			}
-			
-			public void setDestroyMethod(String destroyMethod) {
-				this.destroyMethod = destroyMethod;
-			}
-			
-			public void setInitMethod(String initMethod) {
-				this.initMethod = initMethod;
-			}
-			
-			public void setProperty(String name, Instance value) {
-				this.properties.put(name, value);
-			}
-			
-			public BeanReference getFactoryBean() {
-				return this.factoryBean;
-			}
-			
-			public void setFactoryBean(BeanReference factoryBean) {
-				this.factoryBean = factoryBean;
-			}
-			
-			public String getFactoryMethod() {
-				return this.factoryMethod;
-			}
-			
-			public void setFactoryMethod(String factoryMethod) {
-				this.factoryMethod = factoryMethod;
-			}
-		};
-	}
-	
-	public static BeanReference createBeanReference(final String beanName, final Bean bean) {
-		return new BeanReference() {
-			public Bean getBean() {
-				return bean;
-			}
-			
-			public String getBeanName() {
-				return beanName;
-			}
-		};
-	}
-
-	public static BeanReference createBeanReference(String beanName) {
-		return createBeanReference(beanName, null);
-	}
-	
-	public static LiteralValue createLiteralValue(final String value) {
-		return new LiteralValue() {
-			public String getValue() {
-				return value;
-			}
-		};
-	}
-	
-	public static LiteralProperties createProperties(Map properties) {
-		final Map tmpProps = new HashMap();
-		for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
-			Map.Entry entry = (Map.Entry)iter.next();
-			tmpProps.put(createLiteralValue(entry.getKey().toString()), createLiteralValue(entry.getValue() != null ? entry.getValue().toString() : ""));
-		}
-		return new LiteralProperties() {
-			public Map getProperties() {
-				return tmpProps;
-			}
-		};
-	}
-	
-	public static LiteralMap createMap(final Map map) {
-		return new LiteralMap() {
-			public Map getMap() {
-				return map;
-			}
-		};
-	}
-	
-	public static LiteralList createList(final Collection list) {
-		return new LiteralList() {
-			public Collection getElements() {
-				return list;
-			}			
-		};
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/CompilationFailedException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/CompilationFailedException.java
deleted file mode 100644
index 5e8036d..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/CompilationFailedException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Thrown when a compilation error occurs.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class CompilationFailedException extends GrailsException {
-
-	public CompilationFailedException() {
-		super();
-	}
-
-	public CompilationFailedException(String arg0) {
-		super(arg0);
-	}
-
-	public CompilationFailedException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public CompilationFailedException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/DataSourceRequiredPropertyMissingException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/DataSourceRequiredPropertyMissingException.java
deleted file mode 100644
index b14e89a..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/DataSourceRequiredPropertyMissingException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Thrown when a missing property on a Grails data source is missing. 
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class DataSourceRequiredPropertyMissingException extends
-		GrailsDataSourceException {
-
-	public DataSourceRequiredPropertyMissingException() {
-		super();
-	}
-
-	public DataSourceRequiredPropertyMissingException(String arg0) {
-		super(arg0);
-	}
-
-	public DataSourceRequiredPropertyMissingException(String arg0,
-			Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public DataSourceRequiredPropertyMissingException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsConfigurationException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsConfigurationException.java
deleted file mode 100644
index 9ea46a3..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsConfigurationException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * @author Graeme Rocher
- * @since 31-Jan-2006
- */
-public class GrailsConfigurationException extends GrailsException {
-
-    public GrailsConfigurationException() {
-    }
-
-    public GrailsConfigurationException(String arg0) {
-        super(arg0);
-    }
-
-    public GrailsConfigurationException(String arg0, Throwable arg1) {
-        super(arg0, arg1);
-    }
-
-    public GrailsConfigurationException(Throwable arg0) {
-        super(arg0);
-    }
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDataSourceException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDataSourceException.java
deleted file mode 100644
index 5f66ec9..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDataSourceException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Base exception for errors related to Grails data sources.
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public abstract class GrailsDataSourceException extends GrailsException {
-
-	public GrailsDataSourceException() {
-		super();
-	}
-
-	public GrailsDataSourceException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsDataSourceException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsDataSourceException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDomainException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDomainException.java
deleted file mode 100644
index d0696e5..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsDomainException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-
-/**
- * <p>Occurs when creation of the Grails domain from the Grails domain classes fails</p>
- * 
- * @author Graeme Rocher
- * @since 06-Jul-2005
- */
-public class GrailsDomainException extends GrailsException {
-
-	public GrailsDomainException() {
-		super();
-	}
-
-	public GrailsDomainException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsDomainException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsDomainException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsException.java
deleted file mode 100644
index ed33172..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/GrailsException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Base class for all Grails exceptions that are not recoverable. 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public abstract class GrailsException extends RuntimeException {
-
-	public GrailsException() {
-		super();
-	}
-
-	public GrailsException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/InvalidPropertyException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/InvalidPropertyException.java
deleted file mode 100644
index 7904179..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/InvalidPropertyException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-
-/**
- * 
- * Exception which is thrown when a property of a Grails class is invalidated.
- * 
- * @author Graeme Rocher
- * @since 06-Jul-2005
- * 
- */
-public class InvalidPropertyException extends GrailsException {
-
-	public InvalidPropertyException() {
-		super();
-	}
-
-	public InvalidPropertyException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public InvalidPropertyException(String arg0) {
-		super(arg0);
-	}
-
-	public InvalidPropertyException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/MoreThanOneActiveDataSourceException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/MoreThanOneActiveDataSourceException.java
deleted file mode 100644
index c159cf4..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/MoreThanOneActiveDataSourceException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Thrown when more than one active data source is configured. 
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class MoreThanOneActiveDataSourceException extends
-		GrailsDataSourceException {
-
-	public MoreThanOneActiveDataSourceException() {
-		super();
-	}
-
-	public MoreThanOneActiveDataSourceException(String arg0) {
-		super(arg0);
-	}
-
-	public MoreThanOneActiveDataSourceException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public MoreThanOneActiveDataSourceException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/NewInstanceCreationException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/NewInstanceCreationException.java
deleted file mode 100644
index 64e82b1..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/NewInstanceCreationException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-/**
- * <p>Occurs when the creation of a new instance fails.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class NewInstanceCreationException extends GrailsException {
-
-	public NewInstanceCreationException() {
-		super();
-	}
-
-	public NewInstanceCreationException(String arg0) {
-		super(arg0);
-	}
-
-	public NewInstanceCreationException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public NewInstanceCreationException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/RequiredPropertyMissingException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/RequiredPropertyMissingException.java
deleted file mode 100644
index f1255e3..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/exceptions/RequiredPropertyMissingException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.exceptions;
-
-import java.lang.String;
-import java.lang.Throwable;
-
-/**
- * <p>Thrown when a named property of a specific type is not present in a class.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public class RequiredPropertyMissingException extends GrailsException {
-
-	public RequiredPropertyMissingException() {
-		super();
-	}
-
-	public RequiredPropertyMissingException(String arg0) {
-		super(arg0);
-	}
-
-	public RequiredPropertyMissingException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public RequiredPropertyMissingException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/ClassEditor.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/ClassEditor.java
deleted file mode 100644
index 1b96fd9..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/ClassEditor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.support;
-
-import java.beans.PropertyEditorSupport;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public class ClassEditor extends PropertyEditorSupport {
-
-	private ClassLoader classLoader = null;
-	
-	public ClassEditor() {
-		super();
-	}
-
-	public ClassEditor(Object arg0) {
-		super(arg0);
-	}
-
-	public void setClassLoader(ClassLoader classLoader) {
-		this.classLoader = classLoader;
-	}
-	
-	public String getAsText() {
-		return ((Class)getValue()).getName();
-	}
-	
-	public void setAsText(String className) throws IllegalArgumentException {
-		try {
-			setValue(this.classLoader.loadClass(className));
-		} catch (ClassNotFoundException e) {
-			throw new IllegalArgumentException("Could not load class [" + className + "]!");
-		}
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/GrailsTestSuite.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/GrailsTestSuite.java
deleted file mode 100644
index dacc9bb..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/support/GrailsTestSuite.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.support;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestResult;
-import junit.framework.TestSuite;
-
-import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
-import org.springframework.util.Assert;
-
-/**
- * IoC class to inject properties of Grails test case classes.
- * 
- * 
- * @author Steven Devijver
- * @since Aug 28, 2005
- */
-public class GrailsTestSuite extends TestSuite {
-
-	private AutowireCapableBeanFactory beanFactory = null;
-	
-	public GrailsTestSuite(AutowireCapableBeanFactory beanFactory, Class clazz) {
-		super(clazz);
-		Assert.notNull(beanFactory, "Bean factory should not be null!");
-		this.beanFactory = beanFactory;
-	}
-
-	public void runTest(Test test, TestResult result) {
-		if (test instanceof TestCase) {
-			beanFactory.autowireBeanProperties(test, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false);
-		}
-		test.run(result);
-	}
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedProperty.java
deleted file mode 100644
index f956b8d..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedProperty.java
+++ /dev/null
@@ -1,1795 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.validation;
-
-
-import groovy.lang.MissingPropertyException;
-import groovy.lang.Range;
-import groovy.lang.IntRange;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.builder.ToStringBuilder;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.validator.CreditCardValidator;
-import org.apache.commons.validator.EmailValidator;
-import org.apache.commons.validator.UrlValidator;
-import org.codehaus.groovy.grails.validation.exceptions.ConstraintException;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.validation.Errors;
-
-import java.lang.reflect.Array;
-import java.text.MessageFormat;
-import java.util.*;
-
-/**
- * Provides the ability to set contraints against a properties of a class. Constraints can either be
- * set via the property setters or via the <pre>applyConstraint(String constraintName, Object constrainingValue)</pre>
- * in combination with a constraint constant. Example:
- * 
- * <code>
- *      ...
- *      
- * 		ConstrainedProperty cp = new ConstrainedProperty(owningClass, propertyName, propertyType);
- *      if(cp.supportsConstraint( ConstrainedProperty.EMAIL_CONSTRAINT ) ) {
- *      	cp.applyConstraint( ConstrainedProperty.EMAIL_CONSTRAINT, new Boolean(true) );      
- *      }
- * </code>
- *
- * Alternatively constraints can be applied directly using the java bean getters/setters if a static (as oposed to dynamic)
- * approach to constraint creation is possible:
- *
- * <code>
- *       cp.setEmail(true)
- * </code>
- * @author Graeme Rocher
- * @since 07-Nov-2005
- */
-public class ConstrainedProperty   {
-
-    public static final String CREDIT_CARD_CONSTRAINT = "creditCard";
-    public static final String EMAIL_CONSTRAINT = "email";
-	public static final String BLANK_CONSTRAINT = "blank";
-	public static final String RANGE_CONSTRAINT = "range";
-	public static final String IN_LIST_CONSTRAINT = "inList";
-	public static final String URL_CONSTRAINT = "url";
-	public static final String MATCHES_CONSTRAINT = "matches";
-	public static final String LENGTH_CONSTRAINT = "length";
-	public static final String SIZE_CONSTRAINT = "size";
-	public static final String MIN_CONSTRAINT = "min";
-	public static final String MAX_CONSTRAINT = "max";
-	public static final String MAX_SIZE_CONSTRAINT = "maxSize";
-	public static final String MIN_SIZE_CONSTRAINT = "minSize";
-	public static final String MAX_LENGTH_CONSTRAINT = "maxLength";
-	public static final String MIN_LENGTH_CONSTRAINT = "minLength";	
-	public static final String NOT_EQUAL_CONSTRAINT = "notEqual";
-	public static final String NULLABLE_CONSTRAINT = "nullable";
-	
-	protected static final String INVALID_SUFFIX = ".invalid";
-	protected static final String EXCEEDED_SUFFIX = ".exceeded";
-	protected static final String NOTMET_SUFFIX = ".notmet";
-	protected static final String NOT_PREFIX = ".not.";
-	protected static final String TOOBIG_SUFFIX = ".toobig";
-	protected static final String TOOLONG_SUFFIX = ".toolong";
-	protected static final String TOOSMALL_SUFFIX = ".toosmall";
-	protected static final String TOOSHORT_SUFFIX = ".tooshort";
-	
-	protected static Map constraints = new HashMap();
-	
-	static {
-        constraints.put( CREDIT_CARD_CONSTRAINT, CreditCardConstraint.class );
-        constraints.put( EMAIL_CONSTRAINT, EmailConstraint.class );
-		constraints.put( BLANK_CONSTRAINT, BlankConstraint.class );
-		constraints.put( RANGE_CONSTRAINT, RangeConstraint.class );
-		constraints.put( IN_LIST_CONSTRAINT, InListConstraint.class );
-		constraints.put( URL_CONSTRAINT, UrlConstraint.class );
-		constraints.put( LENGTH_CONSTRAINT, SizeConstraint.class );
-		constraints.put( SIZE_CONSTRAINT, SizeConstraint.class );
-		constraints.put( MATCHES_CONSTRAINT, MatchesConstraint.class );
-		constraints.put( MIN_CONSTRAINT, MinConstraint.class );
-		constraints.put( MAX_CONSTRAINT, MaxConstraint.class );
-		constraints.put( MAX_SIZE_CONSTRAINT, MaxSizeConstraint.class );
-		constraints.put( MAX_LENGTH_CONSTRAINT, MaxSizeConstraint.class );
-		constraints.put( MIN_SIZE_CONSTRAINT, MinSizeConstraint.class );
-		constraints.put( MIN_LENGTH_CONSTRAINT, MinSizeConstraint.class );
-		constraints.put( NULLABLE_CONSTRAINT, NullableConstraint.class );
-		constraints.put( NOT_EQUAL_CONSTRAINT, NotEqualConstraint.class );
-	}
-	
-	protected static final ResourceBundle bundle = ResourceBundle.getBundle( "defaultErrorMessages" );
-	protected static final Log LOG = LogFactory.getLog(ConstrainedProperty.class);
-	
-	private static final String DEFAULT_BLANK_MESSAGE = bundle.getString( "default.blank.message" );
-	private static final String DEFAULT_DOESNT_MATCH_MESSAGE = bundle.getString( "default.doesnt.match.message" );
-	private static final String DEFAULT_INVALID_URL_MESSAGE = bundle.getString( "default.invalid.url.message" );
-    private static final String DEFAULT_INVALID_CREDIT_CARD_MESSAGE = bundle.getString( "default.invalid.creditCard.message" );
-    //private static final String DEFAULT_INVALID_MESSAGE = bundle.getString( "default.invalid.message" );
-	private static final String DEFAULT_INVALID_EMAIL_MESSAGE  = bundle.getString( "default.invalid.email.message" );
-	private static final String DEFAULT_INVALID_RANGE_MESSAGE = bundle.getString( "default.invalid.range.message" );	
-	private static final String DEFAULT_NOT_IN_LIST_MESSAGE = bundle.getString( "default.not.inlist.message" );
-	private static final String DEFAULT_INVALID_SIZE_MESSAGE = bundle.getString( "default.invalid.size.message" );
-	private static final String DEFAULT_INVALID_LENGTH_MESSAGE = bundle.getString( "default.invalid.length.message" );
-	private static final String DEFAULT_INVALID_MAX_MESSAGE = bundle.getString( "default.invalid.max.message" );
-	private static final String DEFAULT_INVALID_MIN_MESSAGE = bundle.getString( "default.invalid.min.message" );
-	private static final String DEFAULT_NOT_EQUAL_MESSAGE = bundle.getString( "default.not.equal.message" );
-	private static final String DEFAULT_INVALID_MAX_LENGTH_MESSAGE = bundle.getString( "default.invalid.max.length.message" );
-	private static final String DEFAULT_INVALID_MAX_SIZE_MESSAGE = bundle.getString( "default.invalid.max.size.message" );
-	private static final String DEFAULT_INVALID_MIN_LENGTH_MESSAGE = bundle.getString( "default.invalid.min.length.message" );
-	private static final String DEFAULT_INVALID_MIN_SIZE_MESSAGE = bundle.getString( "default.invalid.min.size.message" );
-	private static final String DEFAULT_NULL_MESSAGE = bundle.getString( "default.null.message" );
-	// move these to subclass	
-
-	protected String propertyName;
-	protected Class propertyType;
-	
-	protected Map appliedConstraints = new HashMap();
-	protected Class owningClass;
-	private BeanWrapper bean;
-	
-	// simple constraints
-	private boolean display = true; // whether the property should be displayed
-	private boolean editable = true; // whether the property is editable
-    private boolean file; // whether the property is a file
-    private int order; // what order to property appears in
-    private String format; // the format of the property (for example a date pattern)
-    private String widget; // the widget to use to render the property
-    private boolean password; // whether the property is a password
-    private Map attributes = Collections.EMPTY_MAP; // a map of attributes of property
-
-
-    /**
-	 * 
-	 * Abstract class for constraints to implement
-	 */
-	abstract protected static class AbstractConstraint implements Constraint {
-		protected String constraintPropertyName;
-		protected Class constraintOwningClass;
-		protected Object constraintParameter;
-        protected String classShortName;
-
-        public String getPropertyName() {
-            return this.constraintPropertyName;
-        }
-
-        /**
-		 * @param constraintOwningClass The constraintOwningClass to set.
-		 */
-		public void setOwningClass(Class constraintOwningClass) {
-			this.constraintOwningClass = constraintOwningClass;
-            this.classShortName = GrailsClassUtils.getPropertyNameRepresentation(constraintOwningClass);
-        }
-		/**
-		 * @param constraintPropertyName The constraintPropertyName to set.
-		 */
-		public void setPropertyName(String constraintPropertyName) {
-			this.constraintPropertyName = constraintPropertyName;
-		}				
-		/**
-		 * @param constraintParameter The constraintParameter to set.
-		 */
-		public void setParameter(Object constraintParameter) {
-			this.constraintParameter = constraintParameter;
-		}
-		public void validate(Object propertyValue, Errors errors) {
-			//ValidationUtils.rejectIfEmpty( errors, constraintPropertyName, constraintPropertyName+".empty" );
-			if(StringUtils.isBlank(this.constraintPropertyName))
-				throw new IllegalStateException("Property 'propertyName' must be set on the constraint");
-			if(constraintOwningClass == null)
-				throw new IllegalStateException("Property 'owningClass' must be set on the constraint");
-			if(constraintParameter == null)
-				throw new IllegalStateException("Property 'constraintParameter' must be set on the constraint");
-			
-			processValidate(propertyValue, errors);
-		}		
-		public void rejectValue(Errors errors, String code,String defaultMessage) {
-			errors.rejectValue(constraintPropertyName,classShortName + '.'  + constraintPropertyName + '.' + code, defaultMessage);
-		}
-		public void rejectValue(Errors errors, String code,Object[] args,String defaultMessage) {
-			errors.rejectValue(constraintPropertyName,classShortName + '.'  + constraintPropertyName + '.' + code, args,defaultMessage);
-		}		
-		protected abstract void processValidate(Object propertyValue, Errors errors);
-
-		/* (non-Javadoc)
-		 * @see java.lang.Object#toString()
-		 */
-		public String toString() {
-			return new ToStringBuilder(this)
-							.append( constraintParameter )
-							.toString();
-		}
-		
-		
-	}
-	
-	/**
-	 * A Constraint that validates not equal to something
-	 */		
-	static class NotEqualConstraint extends AbstractConstraint {
-		
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			return true;
-		}
-
-        public String getName() {
-            return NOT_EQUAL_CONSTRAINT;
-        }
-
-        /**
-         * @return Returns the notEqualTo.
-         */
-        public Object getNotEqualTo() {
-            return this.constraintParameter;
-        }
-
-		protected void processValidate(Object propertyValue, Errors errors) {			
-			if(!this.constraintParameter.equals( propertyValue )) {
-				Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, constraintParameter  };
-				super.rejectValue( errors, NOT_EQUAL_CONSTRAINT,args, MessageFormat.format( DEFAULT_NOT_EQUAL_MESSAGE, args ) );
-			}			
-		}
-		
-	}
-	/**
-	 * A Constraint that validates not equal to something
-	 */		
-	static class NullableConstraint extends AbstractConstraint {
-
-		private boolean nullable;
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			return true;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+NULLABLE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-			
-			this.nullable = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return NULLABLE_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(!nullable && propertyValue == null) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass};
-                super.rejectValue( errors, NULLABLE_CONSTRAINT,args, MessageFormat.format( DEFAULT_NULL_MESSAGE, args ) );
-            }
-        }
-		
-	}	
-	/**
-	 * A Constraint that validates a string is not blank
-	 */	
-	static class BlankConstraint extends AbstractConstraint {
-		
-		private boolean blank;
-		
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return String.class.isAssignableFrom(type);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+BLANK_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-			
-			this.blank = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return BLANK_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-
-            if(!blank) {
-                if(propertyValue instanceof String) {
-                    if(StringUtils.isBlank((String)propertyValue)) {
-                        Object[] args = new Object[] { constraintPropertyName, constraintOwningClass };
-                        super.rejectValue( errors, BLANK_CONSTRAINT,args, MessageFormat.format( DEFAULT_BLANK_MESSAGE, args ) );
-                    }
-                }
-            }
-        }
-	}
-
-    /**
-     * A constraint class that validates a credit card number
-     */
-    static class CreditCardConstraint extends AbstractConstraint {
-        private boolean creditCard;
-
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(creditCard) {
-                CreditCardValidator validator = new CreditCardValidator();
-
-                if(!validator.isValid(propertyValue.toString())  ) {
-                    Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue };
-                    super.rejectValue(errors,CREDIT_CARD_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_CREDIT_CARD_MESSAGE, args ));
-                }
-            }
-        }
-
-        public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean))
-				throw new IllegalArgumentException("Parameter for constraint ["+EMAIL_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-
-			this.creditCard = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-        }
-
-        public String getName() {
-            return CREDIT_CARD_CONSTRAINT;
-        }
-
-        public boolean supports(Class type) {
-            if(type == null)
-                return false;
-
-            return String.class.isAssignableFrom(type);
-        }
-    }
-    /**
-	 * 
-	 * A Constraint that validates an email address
-	 */	
-	static class EmailConstraint extends AbstractConstraint {						
-
-		private boolean email;
-		
-		
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return String.class.isAssignableFrom(type);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+EMAIL_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-			
-			this.email = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return EMAIL_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(email) {
-                EmailValidator emailValidator = EmailValidator.getInstance();
-                if(!emailValidator.isValid(propertyValue.toString())  ) {
-                    Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue };
-                    super.rejectValue(errors,EMAIL_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_EMAIL_MESSAGE, args ));
-                }
-            }
-        }
-	}
-	
-	/**
-	 * 
-	 * A Constraint that validates a url
-	 */		
-	static class UrlConstraint extends AbstractConstraint {
-
-		private boolean url;
-		
-	
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return String.class.isAssignableFrom(type);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+URL_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-			
-			this.url = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return URL_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(url) {
-                UrlValidator urlValidator = new UrlValidator(UrlValidator.ALLOW_ALL_SCHEMES + UrlValidator.ALLOW_2_SLASHES);
-
-                if(!urlValidator.isValid(propertyValue.toString())) {
-                    Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue };
-                    super.rejectValue(errors,URL_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_URL_MESSAGE, args ));
-                }
-            }
-        }
-		
-	}
-	/**
-	 * 
-	 * A Constraint that validates a range
-	 */	
-	static class RangeConstraint extends AbstractConstraint {
-		Range range;		
-		/**
-		 * @return Returns the range.
-		 */
-		public Range getRange() {
-			return range;
-		}
-
-		
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return Comparable.class.isAssignableFrom(type) ||
-					Number.class.isAssignableFrom(type);
-		}
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Range)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+RANGE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a of type [groovy.lang.Range]");
-			
-			this.range = (Range)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return RANGE_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(!this.range.contains(propertyValue)) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, range.getFrom(), range.getTo()  };
-
-                if(propertyValue == null) {
-                    super.rejectValue(errors,RANGE_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_RANGE_MESSAGE, args ));
-                }
-                else if(range.getFrom().compareTo( propertyValue ) == 1) {
-                    super.rejectValue(errors,SIZE_CONSTRAINT + TOOSMALL_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                }
-                else if(range.getTo().compareTo(propertyValue) == -1) {
-                    super.rejectValue(errors,SIZE_CONSTRAINT + TOOBIG_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                }
-
-
-            }
-        }
-	}
-	
-	/**
-	 * 
-	 * A Constraint that implements a maximum value constraint
-	 */		
-	static class MaxConstraint extends AbstractConstraint {
-
-
-		private Comparable maxValue;
-		
-		/**
-		 * @return Returns the maxValue.
-		 */
-		public Comparable getMaxValue() {
-			return maxValue;
-		}
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return Comparable.class.isAssignableFrom(type) ||
-					Number.class.isAssignableFrom(type);
-		}
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Comparable)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+MAX_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must implement the interface [java.lang.Comparable]");
-			
-			this.maxValue = (Comparable)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return MAX_CONSTRAINT;
-        }
-
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(maxValue.compareTo(propertyValue) > 0) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, maxValue  };
-                super.rejectValue(errors,MAX_CONSTRAINT + EXCEEDED_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MAX_MESSAGE, args ));
-            }
-        }
-	}
-	
-	/**
-	 * 
-	 * A Constraint that implements a minimum value constraint
-	 */		
-	static class MinConstraint extends AbstractConstraint {
-
-		private Comparable minValue;
-
-		
-		/**
-		 * @return Returns the minValue.
-		 */
-		public Comparable getMinValue() {
-			return minValue;
-		}
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return Comparable.class.isAssignableFrom(type) ||
-					Number.class.isAssignableFrom(type);
-		}
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Comparable)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+MIN_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must implement the interface [java.lang.Comparable]");
-			
-			this.minValue = (Comparable)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return MIN_CONSTRAINT;
-        }
-
-
-        protected void processValidate(Object propertyValue, Errors errors)		{
-            if(minValue.compareTo(propertyValue) < 0) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, minValue  };
-                super.rejectValue(errors,MIN_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_MESSAGE, args ));
-            }
-        }
-	}	
-	/**
-	 * A constraint that validates the property is contained within the supplied list
-	 */	
-	static class InListConstraint extends AbstractConstraint {
-
-		List list;
-
-		/**
-		 * @return Returns the list.
-		 */
-		public List getList() {
-			return list;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			return true;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof List)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+IN_LIST_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must implement the interface [java.util.List]");
-			
-			this.list = (List)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return IN_LIST_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(!this.list.contains(propertyValue)) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, list  };
-                super.rejectValue(errors,NOT_PREFIX + IN_LIST_CONSTRAINT,args,MessageFormat.format( DEFAULT_NOT_IN_LIST_MESSAGE,args ));
-            }
-        }
-		
-	}
-	
-	/**
-	 * A constraint that validates the property against a supplied regular expression
-	 */		
-	static class MatchesConstraint extends AbstractConstraint {
-
-		private String regex;
-		
-		/**
-		 * @return Returns the regex.
-		 */
-		public String getRegex() {
-			return regex;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return String.class.isAssignableFrom(type);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof String)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+MATCHES_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be of type [java.lang.String]");
-			
-			this.regex = (String)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return MATCHES_CONSTRAINT;
-        }
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-            if(propertyValue.toString().matches( regex )) {
-                Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, regex  };
-                super.rejectValue(errors,MATCHES_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_DOESNT_MATCH_MESSAGE, args ));
-            }
-
-        }
-		
-	}
-	
-	/**
-	 * A constraint that validates size of the property, for strings and arrays this is the length, collections
-	 * the size and numbers the value
-	 */		
-	static class SizeConstraint extends AbstractConstraint {
-
-		private IntRange range;
-
-		/**
-		 * @return Returns the range.
-		 */
-		public IntRange getRange() {
-			return range;
-		}
-		
-		
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-		 */
-		public boolean supports(Class type) {
-			if(type == null)
-				return false;
-			
-			return Comparable.class.isAssignableFrom(type) ||
-					Number.class.isAssignableFrom(type) ||
-					Collection.class.isAssignableFrom(type) ||
-					type.isArray();
-		}
-
-
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof IntRange))
-				throw new IllegalArgumentException("Parameter for constraint ["+SIZE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a of type [groovy.lang.IntRange]");
-			
-			this.range = (IntRange)constraintParameter;
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return SIZE_CONSTRAINT;
-        }
-
-
-        protected void processValidate(Object propertyValue, Errors errors) {
-
-            Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue,  range.getFrom(), range.getTo()  };
-            if(propertyValue == null) {
-                super.rejectValue(errors,SIZE_CONSTRAINT + INVALID_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                return;
-            }
-            if(propertyValue.getClass().isArray()) {
-                Integer length = new Integer(Array.getLength( propertyValue ));
-                if(!range.contains(length)) {
-
-                    if(range.getFrom().compareTo( length ) == 1) {
-                        super.rejectValue(errors,LENGTH_CONSTRAINT + TOOSHORT_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_LENGTH_MESSAGE, args ));
-                    }
-                    else if(range.getTo().compareTo(length) == -1) {
-                        super.rejectValue(errors,LENGTH_CONSTRAINT + TOOLONG_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_LENGTH_MESSAGE, args ));
-                    }
-                    return;
-                }
-            }
-            if(propertyValue instanceof Collection) {
-                Integer collectionSize = new Integer(((Collection)propertyValue).size());
-                if(!range.contains( collectionSize )) {
-                    if(range.getFrom().compareTo( collectionSize ) == 1) {
-                        super.rejectValue(errors,SIZE_CONSTRAINT + TOOSMALL_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                    }
-                    else if(range.getTo().compareTo(collectionSize) == -1) {
-                        super.rejectValue(errors,SIZE_CONSTRAINT + TOOBIG_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                    }
-                }
-            }
-            else if(propertyValue instanceof Number) {
-                if(range.getFrom().compareTo( propertyValue ) == 1) {
-                    super.rejectValue(errors,SIZE_CONSTRAINT + TOOSMALL_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                }
-                else if(range.getTo().compareTo(propertyValue) == -1) {
-                    super.rejectValue(errors,SIZE_CONSTRAINT + TOOBIG_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_SIZE_MESSAGE, args ));
-                }
-            }
-            else if(propertyValue instanceof String) {
-                Integer stringLength =  new Integer(((String)propertyValue ).length());
-                if(!range.contains(stringLength)) {
-                    if(range.getFrom().compareTo( stringLength ) == 1) {
-                        super.rejectValue(errors,LENGTH_CONSTRAINT + TOOSHORT_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_LENGTH_MESSAGE, args ));
-                    }
-                    else if(range.getTo().compareTo(stringLength) == -1) {
-                        super.rejectValue(errors,LENGTH_CONSTRAINT + TOOLONG_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_LENGTH_MESSAGE, args ));
-                    }
-                }
-            }
-        }
-	}
-	
-	/**
-	 * A constraint that validates maximum size of the property, for strings and arrays this is the length, collections
-	 * the size and numbers the value
-	 */		
-	static class MaxSizeConstraint extends AbstractConstraint {
-
-		private int maxSize;
-
-		/**
-		 * @return Returns the maxSize.
-		 */
-		public int getMaxSize() {
-			return maxSize;
-		}
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Integer)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+MAX_SIZE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a of type [java.lang.Integer]");
-			
-			this.maxSize = ((Integer)constraintParameter).intValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return MAX_SIZE_CONSTRAINT;
-        }
-
-        /* (non-Javadoc)
-           * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-           */
-        public boolean supports(Class type) {
-            if(type == null)
-                return false;
-
-            return Comparable.class.isAssignableFrom(type) ||
-                    Number.class.isAssignableFrom(type) ||
-                    Collection.class.isAssignableFrom(type) ||
-                    type.isArray();
-        }
-
-		protected void processValidate(Object propertyValue, Errors errors) {
-			Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, new Integer(maxSize) };
-			if(propertyValue == null) {
-				super.rejectValue(errors,MAX_LENGTH_CONSTRAINT + EXCEEDED_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MAX_LENGTH_MESSAGE, args ));
-            }
-			else if(propertyValue.getClass().isArray()) {
-				int length = Array.getLength( propertyValue );
-				if(length > maxSize) {
-					super.rejectValue(errors,MAX_LENGTH_CONSTRAINT + EXCEEDED_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MAX_LENGTH_MESSAGE, args ));
-                }
-			}
-			else if(propertyValue instanceof Collection) {
-                if (((Collection) propertyValue).size() > maxSize) {
-                    super.rejectValue(errors, MAX_SIZE_CONSTRAINT + EXCEEDED_SUFFIX, args, MessageFormat.format(DEFAULT_INVALID_MAX_SIZE_MESSAGE, args));
-                } else if (propertyValue instanceof Number) {
-                    int numberSize = ((Number) propertyValue).intValue();
-                    if (numberSize > maxSize) {
-                        super.rejectValue(errors, MAX_SIZE_CONSTRAINT + EXCEEDED_SUFFIX, args, MessageFormat.format(DEFAULT_INVALID_MAX_SIZE_MESSAGE, args));
-                    }
-                }
-            }
-            else if (propertyValue instanceof String) {
-                if (((String) propertyValue).length() > maxSize) {
-                    super.rejectValue(errors, MAX_LENGTH_CONSTRAINT + EXCEEDED_SUFFIX, args, MessageFormat.format(DEFAULT_INVALID_MAX_LENGTH_MESSAGE, args));
-                }
-            }
-        }
-	}
-	
-	/**
-	 * A constraint that validates minimum size or length of the property, for strings and arrays this is the length, collections
-	 * the size and numbers the value
-	 */		
-	static class MinSizeConstraint extends AbstractConstraint {
-
-		private int minSize;
-
-
-		/**
-		 * @return Returns the minSize.
-		 */
-		public int getMinSize() {
-			return minSize;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Integer)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+MIN_SIZE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a of type [java.lang.Integer]");
-			
-			this.minSize = ((Integer)constraintParameter).intValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return MIN_SIZE_CONSTRAINT;
-        }
-
-
-        /* (non-Javadoc)
-           * @see org.codehaus.groovy.grails.validation.Constraint#supports(java.lang.Class)
-           */
-        public boolean supports(Class type) {
-            if(type == null)
-                return false;
-
-            return Comparable.class.isAssignableFrom(type) ||
-                    Number.class.isAssignableFrom(type) ||
-                    Collection.class.isAssignableFrom(type) ||
-                    type.isArray();
-        }
-		
-		protected void processValidate(Object propertyValue, Errors errors) {
-			Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue, new Integer(minSize) };
-			if(propertyValue == null) {
-				super.rejectValue(errors,MIN_LENGTH_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_LENGTH_MESSAGE, args ));
-            }
-			else if(propertyValue.getClass().isArray()) {
-				int length = Array.getLength( propertyValue );
-				if(length < minSize) {
-					super.rejectValue(errors,MIN_LENGTH_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_LENGTH_MESSAGE, args ));
-                }
-			}
-			else if(propertyValue instanceof Collection) {
-				if( ((Collection)propertyValue).size() < minSize ) {
-					super.rejectValue(errors,MIN_SIZE_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_SIZE_MESSAGE, args ));
-				}
-			}
-			else if(propertyValue instanceof Number) {				
-				int numberSize = ((Number)propertyValue).intValue();
-				if( numberSize < minSize ) {
-					super.rejectValue(errors,MIN_SIZE_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_SIZE_MESSAGE, args ));
-                }
-			}
-			else if(propertyValue instanceof String) {
-				if(((String)propertyValue ).length() < minSize) {
-					super.rejectValue(errors,MIN_LENGTH_CONSTRAINT + NOTMET_SUFFIX,args,MessageFormat.format( DEFAULT_INVALID_MIN_LENGTH_MESSAGE, args ));
-				}
-			}
-		}		
-	}	
-	
-	public ConstrainedProperty(Class clazz,String propertyName, Class propertyType) {
-		super();
-		this.owningClass = clazz;
-		this.propertyName = propertyName;
-		this.propertyType = propertyType;
-		this.bean = new BeanWrapperImpl(this);
-	}
-
-	
-	/**
-	 * @return Returns the appliedConstraints.
-	 */
-	public Collection getAppliedConstraints() {
-		return appliedConstraints.values();
-	}
-
-	/**
-	 * @return Returns the propertyType.
-	 */
-	public Class getPropertyType() {
-		return propertyType;
-	}
-
-
-	/**
-	 * @return Returns the max.
-	 */
-	public Comparable getMax() {
-		MaxConstraint c = (MaxConstraint)this.appliedConstraints.get( MAX_CONSTRAINT );
-		if(c == null) {
-			Range r = getRange();
-			if(r == null) {
-				return null;
-			}
-			else {
-				return r.getTo();
-			}
-		}
-		return c.getMaxValue();		
-	}
-
-
-	/**
-	 * @param max The max to set.
-	 */
-	public void setMax(Comparable max) {
-		if(max == null) {
-			this.appliedConstraints.remove( MAX_CONSTRAINT );
-			return;
-		}
-        if(!propertyType.equals( max.getClass() )) {
-			throw new MissingPropertyException(MAX_CONSTRAINT,propertyType);
-		}
-		Range r = getRange();
-		if(r != null) {
-			LOG.warn("Range constraint already set ignoring constraint ["+MAX_CONSTRAINT+"] for value ["+max+"]");
-			return;
-		}
-		Constraint c = (MaxConstraint)this.appliedConstraints.get( MAX_CONSTRAINT );
-		if(c != null) {
-			c.setParameter(max);		
-		}
-		else {
-			c = new MaxConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(max);
-			this.appliedConstraints.put( MAX_CONSTRAINT, c );
-		}
-	}
-
-
-	/**
-	 * @return Returns the min.
-	 */
-	public Comparable getMin() {
-		MinConstraint c = (MinConstraint)this.appliedConstraints.get( MIN_CONSTRAINT );
-		if(c == null) {
-			Range r = getRange();
-			if(r == null) {
-				return null;
-			}
-			else {
-				return r.getFrom();
-			}
-		}
-		return c.getMinValue();		
-	}
-
-
-	/**
-	 * @param min The min to set.
-	 */
-	public void setMin(Comparable min) {
-		if(min == null) {
-			this.appliedConstraints.remove( MIN_CONSTRAINT );
-			return;
-		}
-        if(!propertyType.equals( min.getClass() )) {
-			throw new MissingPropertyException(MIN_CONSTRAINT,propertyType);
-		}
-		Range r = getRange();
-		if(r != null) {
-			LOG.warn("Range constraint already set ignoring constraint ["+MIN_CONSTRAINT+"] for value ["+min+"]");
-			return;
-		}
-		Constraint c = (MinConstraint)this.appliedConstraints.get( MIN_CONSTRAINT );
-		if(c != null) {
-			c.setParameter(min);			
-		}
-		else {
-			c = new MinConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(min);			
-			this.appliedConstraints.put( MIN_CONSTRAINT, c );
-		}
-	}
-
-
-	/**
-	 * @return Returns the inList.
-	 */
-	public List getInList() {
-		InListConstraint c = (InListConstraint)this.appliedConstraints.get( IN_LIST_CONSTRAINT );
-		if(c == null)
-			return null;
-			
-		return c.getList();
-	}
-
-	/**
-	 * @param inList The inList to set.
-	 */
-	public void setInList(List inList) {
-		Constraint c = (Constraint)this.appliedConstraints.get( IN_LIST_CONSTRAINT );
-		if(inList == null) {
-			this.appliedConstraints.remove( IN_LIST_CONSTRAINT );			
-		}
-		else {
-			if(c != null) {
-				c.setParameter(inList);
-			}
-			else {
-				c = new InListConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(inList);			
-				this.appliedConstraints.put( IN_LIST_CONSTRAINT, c );
-			}
-		}
-	}
-
-	/**
-	 * @return Returns the range.
-	 */
-	public Range getRange() {
-		RangeConstraint c = (RangeConstraint)this.appliedConstraints.get( RANGE_CONSTRAINT );
-		if(c == null)
-			return null;
-			
-		return c.getRange();
-	}
-
-	/**
-	 * @param range The range to set.
-	 */
-	public void setRange(Range range) {				
-		if(this.appliedConstraints.containsKey( MAX_CONSTRAINT )) {
-			LOG.warn("Setting range constraint on property ["+propertyName+"] of class ["+owningClass+"] forced removal of max constraint");
-			this.appliedConstraints.remove( MAX_CONSTRAINT );
-		}
-		if(this.appliedConstraints.containsKey( MIN_CONSTRAINT )) {
-			LOG.warn("Setting range constraint on property ["+propertyName+"] of class ["+owningClass+"] forced removal of min constraint");
-			this.appliedConstraints.remove( MIN_CONSTRAINT );
-		}
-		if(range == null) {
-			this.appliedConstraints.remove( RANGE_CONSTRAINT );			
-		}
-		else {
-			Constraint c = (Constraint)this.appliedConstraints.get(RANGE_CONSTRAINT);
-			if(c != null) {
-				c.setParameter(range);
-			}
-			else {
-				c = new RangeConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(range);		
-				
-				this.appliedConstraints.put( RANGE_CONSTRAINT,c);
-			}
-		}
-	}
-
-	/**
-	 * @return Returns the length.
-	 */
-	public IntRange getLength() {
-		if(!(String.class == propertyType) && !propertyType.isArray()) {
-			throw new MissingPropertyException("Length constraint only applies to a String or Array property",LENGTH_CONSTRAINT,owningClass);
-		}		
-		SizeConstraint c = (SizeConstraint)this.appliedConstraints.get( LENGTH_CONSTRAINT );
-		if(c == null)
-			return null;
-			
-		return c.getRange();
-	}
-
-	/**
-	 * @param length The length to set.
-	 */
-	public void setLength(IntRange length) {
-		if(!(String.class == propertyType)  && !propertyType.isArray()) {
-			throw new MissingPropertyException("Length constraint can only be applied to a String or Array property",LENGTH_CONSTRAINT,owningClass);
-		}			
-		Constraint c = (Constraint)this.appliedConstraints.get( LENGTH_CONSTRAINT );
-		if(length == null) {
-			this.appliedConstraints.remove( LENGTH_CONSTRAINT );			
-		}
-		else {
-			if(c != null) {
-				c.setParameter(length);
-			}
-			else {
-				c = new SizeConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(length);					
-				this.appliedConstraints.put( LENGTH_CONSTRAINT, c );
-			}			
-		}
-	}
-
-	
-	/**
-	 * @return Returns the size.
-	 */
-	public Range getSize() {
-		SizeConstraint c = (SizeConstraint)this.appliedConstraints.get( SIZE_CONSTRAINT );
-		if(c == null)
-			return null;
-			
-		return c.getRange();
-	}
-
-
-	/**
-	 * @param size The size to set.
-	 */
-	public void setSize(Range size) {
-		Constraint c = (Constraint)this.appliedConstraints.get( SIZE_CONSTRAINT );
-		if(size == null) {
-			this.appliedConstraints.remove( SIZE_CONSTRAINT );			
-		}
-		else {
-			if(c != null) {
-				c.setParameter(size);
-			}
-			else {
-				c = new SizeConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(size);					
-				this.appliedConstraints.put( SIZE_CONSTRAINT, c );
-			}			
-		}
-	}
-
-
-	/**
-	 * @return Returns the blank.
-	 */
-	public boolean isBlank() {
-		return this.appliedConstraints.containsKey(BLANK_CONSTRAINT);
-	}
-
-	/**
-	 * @param blank The blank to set.
-	 */
-	public void setBlank(boolean blank) {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("Blank constraint can only be applied to a String property",BLANK_CONSTRAINT,owningClass);
-		}
-		
-		Constraint c = (Constraint)this.appliedConstraints.get( BLANK_CONSTRAINT );
-		if(c != null) {
-			c.setParameter(Boolean.valueOf(blank) );
-		}
-		else {
-			c = new BlankConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(Boolean.valueOf(blank));
-			this.appliedConstraints.put( BLANK_CONSTRAINT,c );				
-		}		
-
-	}
-
-
-
-	/**
-	 * @return Returns the email.
-	 */
-	public boolean isEmail() {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("Email constraint only applies to a String property",EMAIL_CONSTRAINT,owningClass);
-		}
-		
-		return this.appliedConstraints.containsKey( EMAIL_CONSTRAINT );
-	}
-
-	/**
-	 * @param email The email to set.
-	 */
-	public void setEmail(boolean email) {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("Email constraint can only be applied to a String property",EMAIL_CONSTRAINT,owningClass);
-		}
-		
-		Constraint c = (Constraint)this.appliedConstraints.get( EMAIL_CONSTRAINT );
-		if(email) {			
-			if(c != null) {
-				c.setParameter(Boolean.valueOf(email) );
-			}
-			else {
-				c = new EmailConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(Boolean.valueOf(email));
-				this.appliedConstraints.put( EMAIL_CONSTRAINT,c );				
-			}
-		}
-		else {
-			if(c != null) {
-				this.appliedConstraints.remove( EMAIL_CONSTRAINT );
-			}
-		}		
-
-	}
-
-
-    /**
-     * @return Returns the creditCard.
-     */
-    public boolean isCreditCard() {
-        if(!String.class.isInstance( propertyType )) {
-            throw new MissingPropertyException("CreditCard constraint only applies to a String property",CREDIT_CARD_CONSTRAINT,owningClass);
-        }
-
-        return this.appliedConstraints.containsKey( CREDIT_CARD_CONSTRAINT );
-    }
-
-    /**
-     * @param creditCard The creditCard to set.
-     */
-    public void setCreditCard(boolean creditCard) {
-        if(!String.class.isInstance( propertyType )) {
-            throw new MissingPropertyException("CreditCard constraint only applies to a String property",CREDIT_CARD_CONSTRAINT,owningClass);
-        }
-
-        Constraint c = (Constraint)this.appliedConstraints.get( CREDIT_CARD_CONSTRAINT );
-        if(creditCard) {
-            if(c != null) {
-                c.setParameter(Boolean.valueOf(creditCard) );
-            }
-            else {
-                c = new CreditCardConstraint();
-                c.setOwningClass(this.owningClass);
-                c.setPropertyName(this.propertyName);
-                c.setParameter(Boolean.valueOf(creditCard));
-                this.appliedConstraints.put( CREDIT_CARD_CONSTRAINT,c );
-            }
-        }
-        else {
-            if(c != null) {
-                this.appliedConstraints.remove( CREDIT_CARD_CONSTRAINT );
-            }
-        }
-
-    }
-
-    /**
-	 * @return Returns the matches.
-	 */
-	public String getMatches() {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("Matches constraint only applies to a String property",MATCHES_CONSTRAINT,owningClass);
-		}		
-		MatchesConstraint c = (MatchesConstraint)this.appliedConstraints.get( MATCHES_CONSTRAINT );
-		if(c == null)
-			return null;
-		
-		return c.getRegex();
-	}
-
-	/**
-	 * @param regex The matches to set.
-	 */
-	public void setMatches(String regex) {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("Matches constraint can only be applied to a String property",MATCHES_CONSTRAINT,owningClass);
-		}
-		
-		Constraint c = (Constraint)this.appliedConstraints.get( MATCHES_CONSTRAINT );
-		if(regex == null) {
-			this.appliedConstraints.remove( MATCHES_CONSTRAINT );			
-		}
-		else {
-			if(c != null) {
-				c.setParameter( regex );				
-			}
-			else {
-				c = new MatchesConstraint();
-				c.setOwningClass(this.owningClass);
-				c.setPropertyName(this.propertyName);
-				c.setParameter(regex);					
-				this.appliedConstraints.put( MATCHES_CONSTRAINT,c );				
-			}			
-		}
-	}
-
-
-	/**
-	 * @return Returns the maxLength.
-	 */
-	public int getMaxLength() {
-		MaxSizeConstraint c = (MaxSizeConstraint)this.appliedConstraints.get( MAX_LENGTH_CONSTRAINT );
-
-        if(c == null) {
-            if(this.appliedConstraints.containsKey( LENGTH_CONSTRAINT )) {
-                SizeConstraint sc = (SizeConstraint)this.appliedConstraints.get(LENGTH_CONSTRAINT);
-                return sc.getRange().getToInt();
-            }
-            return Integer.MAX_VALUE;
-        }
-
-		
-		return c.getMaxSize();
-	}
-
-	/**
-	 * @param maxLength The maxLength to set.
-	 */
-	public void setMaxLength(int maxLength) {
-		Constraint c = (MaxSizeConstraint)this.appliedConstraints.get( MAX_LENGTH_CONSTRAINT );
-		if( c != null) {
-			c.setParameter( new Integer(maxLength));
-		}
-		else {
-			c = new MaxSizeConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(new Integer(maxLength));					
-			this.appliedConstraints.put( MAX_LENGTH_CONSTRAINT,c );			
-		}		
-	}
-
-
-
-
-	/**
-	 * @return Returns the minLength.
-	 */
-	public int getMinLength() {
-		MinSizeConstraint c = (MinSizeConstraint)this.appliedConstraints.get( MIN_LENGTH_CONSTRAINT );
-		if(c == null) {
-            if(this.appliedConstraints.containsKey( LENGTH_CONSTRAINT )) {
-                SizeConstraint sc = (SizeConstraint)this.appliedConstraints.get(LENGTH_CONSTRAINT);
-                return sc.getRange().getFromInt();
-            }
-            return 0;
-        }
-
-		return c.getMinSize();
-	}
-
-
-	/**
-	 * @param minLength The minLength to set.
-	 */
-	public void setMinLength(int minLength) {
-		Constraint c = (MinSizeConstraint)this.appliedConstraints.get( MIN_LENGTH_CONSTRAINT );
-		if( c != null) {
-			c.setParameter( new Integer(minLength));
-		}
-		else {
-			c = new MinSizeConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(new Integer(minLength));					
-			this.appliedConstraints.put( MIN_LENGTH_CONSTRAINT,c );			
-		}	
-	}
-
-
-	
-	
-	/**
-	 * @return Returns the notEqual.
-	 */
-	public Object getNotEqual() {
-		NotEqualConstraint c = (NotEqualConstraint)this.appliedConstraints.get( NOT_EQUAL_CONSTRAINT );
-		if(c == null)
-			return null;
-			
-		return c.getNotEqualTo();
-	}
-
-	/**
-	 * @return Returns the maxSize.
-	 */
-	public int getMaxSize() {
-		MaxSizeConstraint c = (MaxSizeConstraint)this.appliedConstraints.get( MAX_SIZE_CONSTRAINT );
-		if(c == null)
-			return Integer.MAX_VALUE;
-		
-		return c.getMaxSize();
-	}
-
-	/**
-	 * @param mazSize The mazSize to set.
-	 */
-	public void setMaxSize(int mazSize) {
-		Constraint c = (MaxSizeConstraint)this.appliedConstraints.get( MAX_SIZE_CONSTRAINT );
-		if( c != null) {
-			c.setParameter( new Integer(mazSize));
-		}
-		else {
-			c = new MaxSizeConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(new Integer(mazSize));					
-			this.appliedConstraints.put( MAX_SIZE_CONSTRAINT,c );			
-		}		
-	}
-
-
-
-
-	/**
-	 * @return Returns the minSize.
-	 */
-	public int getMinSize() {
-		MinSizeConstraint c = (MinSizeConstraint)this.appliedConstraints.get( MIN_SIZE_CONSTRAINT );
-		if(c == null)
-			return Integer.MIN_VALUE;
-		
-		return c.getMinSize();
-	}
-
-
-	/**
-	 * @param minSize The minLength to set.
-	 */
-	public void setMinSize(int minSize) {
-		Constraint c = (MinSizeConstraint)this.appliedConstraints.get( MIN_SIZE_CONSTRAINT );
-		if( c != null) {
-			c.setParameter( new Integer(minSize));
-		}
-		else {
-			c = new MinSizeConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(new Integer(minSize));					
-			this.appliedConstraints.put( MIN_SIZE_CONSTRAINT,c );			
-		}	
-	}	
-	/**
-	 * @param notEqual The notEqual to set.
-	 */
-	public void setNotEqual(Object notEqual) {
-		if(notEqual == null) {
-			this.appliedConstraints.remove( NOT_EQUAL_CONSTRAINT );			
-		}
-		else {
-			Constraint c = new NotEqualConstraint();
-			c.setOwningClass(owningClass);
-			c.setPropertyName(propertyName);
-			c.setParameter(notEqual);
-			this.appliedConstraints.put( NOT_EQUAL_CONSTRAINT, c );
-		}
-	}
-
-	
-
-	/**
-	 * @return Returns the nullable.
-	 */
-	public boolean isNullable() {
-		return this.appliedConstraints.containsKey(NULLABLE_CONSTRAINT);
-	}
-
-
-	/**
-	 * @param nullable The nullable to set.
-	 */
-	public void setNullable(boolean nullable) {
-		if(nullable) {
-			this.appliedConstraints.remove(NULLABLE_CONSTRAINT);
-		}
-		else {
-			Constraint c = new NullableConstraint();
-			c.setOwningClass(owningClass);
-			c.setPropertyName(propertyName);
-			c.setParameter(Boolean.valueOf(nullable));
-			this.appliedConstraints.put( NULLABLE_CONSTRAINT, c );			
-		}
-	}
-
-
-	/**
-	 * @return Returns the propertyName.
-	 */
-	public String getPropertyName() {
-		return propertyName;
-	}
-
-	/**
-	 * @param propertyName The propertyName to set.
-	 */
-	public void setPropertyName(String propertyName) {
-		this.propertyName = propertyName;
-	}
-
-
-	/**
-	 * @return Returns the url.
-	 */
-	public boolean isUrl() {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("URL constraint can only be applied to a String property",URL_CONSTRAINT,owningClass);
-		}		
-		return this.appliedConstraints.containsKey( URL_CONSTRAINT );
-	}
-
-	/**
-	 * @param url The url to set.
-	 */
-	public void setUrl(boolean url) {
-		if(!String.class.isInstance( propertyType )) {
-			throw new MissingPropertyException("URL constraint can only be applied to a String property",URL_CONSTRAINT,owningClass);
-		}		
-		Constraint c = (Constraint)this.appliedConstraints.get( URL_CONSTRAINT );		
-		if(url) {			
-			if(c != null) {
-				c.setParameter(Boolean.valueOf(url));
-			}
-			else {
-				c = new UrlConstraint();
-				c.setOwningClass(owningClass);
-				c.setPropertyName(propertyName);
-				c.setParameter(Boolean.valueOf(url));
-				this.appliedConstraints.put( URL_CONSTRAINT, c );
-			}
-		}
-		else {
-			if(c != null) {
-				this.appliedConstraints.remove( URL_CONSTRAINT );
-			}
-		}
-	}
-
-	
-	/**
-	 * @return Returns the display.
-	 */
-	public boolean isDisplay() {
-		return display;
-	}
-
-
-	/**
-	 * @param display The display to set.
-	 */
-	public void setDisplay(boolean display) {
-		this.display = display;
-	}
-
-
-	/**
-	 * @return Returns the editable.
-	 */
-	public boolean isEditable() {
-		return editable;
-	}
-
-
-	/**
-	 * @param editable The editable to set.
-	 */
-	public void setEditable(boolean editable) {
-		this.editable = editable;
-	}
-
-
-	/**
-	 * @return Returns the order.
-	 */
-	public int getOrder() {
-		return order;
-	}
-
-
-	/**
-	 * @param order The order to set.
-	 */
-	public void setOrder(int order) {
-		this.order = order;
-	}
-
-    public String getFormat() {
-        return format;
-    }
-
-    public void setFormat(String format) {
-        this.format = format;
-    }
-
-    public boolean isPassword() {
-        return password;
-    }
-
-    public void setPassword(boolean password) {
-        this.password = password;
-    }
-
-    public Map getAttributes() {
-        return attributes;
-    }
-    public void setAttributes(Map attributes) {
-        this.attributes = attributes;
-    }
-
-    public String getWidget() {
-        return widget;
-    }
-
-    public void setWidget(String widget) {
-        this.widget = widget;
-    }
-
-    /**
-	 * Validate this constrainted property against specified property value
-	 * 
-	 * @param propertyValue
-	 * @param errors
-	 */
-	public void validate(Object propertyValue, Errors errors) {
-		
-		for (Iterator i = this.appliedConstraints.values().iterator(); i.hasNext();) {
-			Constraint c = (Constraint) i.next();			
-			c.validate( propertyValue, errors);
-		}
-	}
-
-	/**
-	 * Checks with this ConstraintedProperty instance supports applying the specified constraint
-	 * 
-	 * @param constraintName The name of the constraint
-	 * @return True if the constraint is supported
-	 */
-	public boolean supportsContraint(String constraintName) {
-		
-		if(!constraints.containsKey(constraintName)) {
-            return this.bean.isWritableProperty(constraintName);
-		}					
-		Class constraintClass = (Class)constraints.get(constraintName);
-		try {
-			Constraint c = (Constraint)constraintClass.newInstance();
-			return c.supports(propertyType);
-			
-		} catch (Exception e) {
-			LOG.error("Exception thrown instantiating constraint ["+constraintName+"] to class ["+owningClass+"]", e);
-			throw new ConstraintException("Exception thrown instantiating  constraint ["+constraintName+"] to class ["+owningClass+"]");
-		}		
-	}
-
-	/**
-	 * Applies a constraint for the specified name and consraint value
-	 * 
-	 * @param constraintName The name of the constraint
-	 * @param constrainingValue The constraining value
-	 * 
-	 * @throws ConstraintException Thrown when the specified constraint is not supported by this ConstrainedProperty. Use <code>supportsContraint(String constraintName)</code> to check before calling 
-	 */
-	public void applyConstraint(String constraintName, Object constrainingValue) {
-		
-		if(constraints.containsKey(constraintName)) {
-			if(constrainingValue == null) {
-				this.appliedConstraints.remove(constraintName);
-			}
-			else {
-				Class constraintClass = (Class)constraints.get(constraintName);
-				try {
-					Constraint c = (Constraint)constraintClass.newInstance();
-					c.setOwningClass(this.owningClass);
-					c.setPropertyName(this.propertyName);
-					c.setParameter( constrainingValue );
-					this.appliedConstraints.put( constraintName, c );
-				} catch (Exception e) {
-					LOG.error("Exception thrown applying constraint ["+constraintName+"] to class ["+owningClass+"] for value ["+constrainingValue+"]: " + e.getMessage(), e);
-					throw new ConstraintException("Exception thrown applying constraint ["+constraintName+"] to class ["+owningClass+"] for value ["+constrainingValue+"]: " + e.getMessage());
-				}
-			}
-		}
-		else if(this.bean.isWritableProperty(constraintName)) {
-			this.bean.setPropertyValue( constraintName, constrainingValue );
-		}
-		else {
-			throw new ConstraintException("Constraint ["+constraintName+"] is not supported for property ["+propertyName+"] of class ["+owningClass+"] with type ["+propertyType+"]");
-		}
-
-	}
-
-
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return new ToStringBuilder(this)
-						.append( this.owningClass )
-						.append( this.propertyName )
-						.append( this.propertyType )
-						.append( this.appliedConstraints )
-						.toString();
-	}
-
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyBuilder.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyBuilder.java
deleted file mode 100644
index 1ca03e5..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyBuilder.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.validation;
-
-import java.beans.PropertyDescriptor;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.codehaus.groovy.grails.orm.hibernate.validation.ConstrainedPersistentProperty;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.beans.InvalidPropertyException;
-
-import groovy.lang.MissingMethodException;
-import groovy.util.BuilderSupport;
-/**
- * Builder used as a delegate within the "constraints" closure of GrailsDomainClass instances 
- * 
- * @author Graeme Rocher
- * @since 10-Nov-2005
- */
-public class ConstrainedPropertyBuilder extends BuilderSupport {
-
-	private Object target;
-	private BeanWrapper bean;
-	private Map constrainedProperties = new HashMap();
-	private int order = 1;
-	
-	public ConstrainedPropertyBuilder(Object target) {
-		super();
-		this.target = target;
-		this.bean = new BeanWrapperImpl(target);
-	}
-
-
-
-	protected Object createNode(Object name, Map attributes) {
-		// we do this so that missing property exception is throw if it doesn't exist
-		try {
-			String property = (String)name;
-			ConstrainedProperty cp;
-			if(constrainedProperties.containsKey(property)) {
-				cp = (ConstrainedProperty)constrainedProperties.get(property);				
-			}
-			else {
-				PropertyDescriptor pd = this.bean.getPropertyDescriptor(property);
-				cp = new ConstrainedPersistentProperty(this.target.getClass(), property, pd.getPropertyType());
-				cp.setOrder(order++);
-				constrainedProperties.put( property, cp );
-			}
-			for (Iterator i = attributes.keySet().iterator(); i.hasNext();) {
-				String constraintName = (String) i.next();
-				if(cp.supportsContraint(constraintName)) {
-					cp.applyConstraint(constraintName, attributes.get(constraintName));
-				}					
-			}				
-			return cp;
-		}
-		catch(InvalidPropertyException ipe) {
-			throw new MissingMethodException((String)name,target.getClass(),new Object[]{ attributes});
-		}		
-	}
-
-	protected Object createNode(Object name, Map attributes, Object value) {
-		throw new MissingMethodException((String)name,target.getClass(),new Object[]{ attributes,value});
-	}
-
-	protected void setParent(Object parent, Object child) {
-		// do nothing
-	}	
-	protected Object createNode(Object name) {
-		return createNode(name, Collections.EMPTY_MAP);
-	}
-	
-	protected Object createNode(Object name, Object value) {
-		return createNode(name,Collections.EMPTY_MAP,value);
-	}	
-	
-	public Map getConstrainedProperties() {
-		return this.constrainedProperties;
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/Constraint.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/Constraint.java
deleted file mode 100644
index 2e89b98..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/Constraint.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.validation;
-
-import org.springframework.validation.Errors;
-/**
- * Interface that defines a validatable constraint 
- * 
- * @author Graeme Rocher
- * @since 10-Nov-2005
- */
-public interface Constraint {
-	/**
-	 * Returns whether the constraint supports being applied against the specified type;
-	 * 
-	 * @param type The type to support
-	 * @return True if the constraint can be applied against the specified type
-	 */
-	boolean supports(Class type);
-	/**
-	 * Validate this constraint against a property value
-	 * 
-	 * @param propertyValue The property value to validate
-	 * @param errors The errors instance to record errors against
-	 */
-	void validate(Object propertyValue, Errors errors);
-	
-	/**
-	 * The parameter which the constraint is validated against
-	 * 
-	 * @param parameter
-	 */
-	void setParameter(Object parameter);
-	
-	/**
-	 * The class the constraint applies to
-	 * 
-	 * @param owningClass
-	 */
-	void setOwningClass(Class owningClass);
-	
-	/**
-	 * The name of the property the constraint applies to
-	 * 
-	 * @param propertyName
-	 */
-	void setPropertyName(String propertyName);
-
-    /**
-     *
-     * @return The name of the constraint
-     */
-    String getName();
-
-    /**
-     *
-     * @return The property name of the constraint
-     */
-    String getPropertyName();
-
-    
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/DefaultErrorMessages.properties b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/DefaultErrorMessages.properties
deleted file mode 100644
index a51d212..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/DefaultErrorMessages.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
-default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
-default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
-default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address.
-default.invalid.message=Property [{0}] of class [{1}] is not a valid [{2}].
-default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
-default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
-default.invalid.length.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid length range from [{3}] to [{4}]
-default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
-default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maxim value [{3}]
-default.invalid.max.length.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maxim length of [{3}]
-default.invalid.min.length.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum length of [{3}]
-default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maxim size of [{3}]
-default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
-default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
-default.blank.message=Property [{0}] of class [{1}] cannot be blank
-default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] must equal [{3}]
-default.null.message=Property [{0}] of class [{1}] cannot be null
-default.not.unique.message=Property [{0}] of class [{1}] with value [{3}] must be unique
-default.not.editable.message=Property [{0}] of class [{1}] with value [{3}] cannot be changed from [{4}] 
\ No newline at end of file
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/exceptions/ConstraintException.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/exceptions/ConstraintException.java
deleted file mode 100644
index c96d4fc..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/exceptions/ConstraintException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.validation.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-/**
- * An exception thrown when an error occurs applying a constraint to a property 
- * 
- * @author Graeme Rocher
- * @since 10-Nov-2005
- */
-public class ConstraintException extends GrailsException {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -4866968714197516789L;
-
-	public ConstraintException() {
-		super();
-	}
-
-	public ConstraintException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public ConstraintException(String arg0) {
-		super(arg0);
-	}
-
-	public ConstraintException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/metaclass/ConstraintsDynamicProperty.java b/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/metaclass/ConstraintsDynamicProperty.java
deleted file mode 100644
index ce85853..0000000
--- a/groovy/modules/grails/src/commons/org/codehaus/groovy/grails/validation/metaclass/ConstraintsDynamicProperty.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.validation.metaclass;
-
-import groovy.lang.Closure;
-
-
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicProperty;
-import org.codehaus.groovy.grails.validation.ConstrainedPropertyBuilder;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-/**
- * This is a dynamic property that instead of returning the closure sets a new proxy meta class for the scope 
- * of the call and invokes the closure itself which builds up a list of ConstrainedProperty instances
- * 
- * @author Graeme Rocher
- * @since 07-Nov-2005
- */
-public class ConstraintsDynamicProperty extends AbstractDynamicProperty {
-	public static final String PROPERTY_NAME = "constraints";
-	
-	public ConstraintsDynamicProperty() {
-		super(PROPERTY_NAME);
-	}
-
-	public Object get(Object object) {
-		BeanWrapper bean = new BeanWrapperImpl(object);
-		Closure c = (Closure)bean.getPropertyValue(PROPERTY_NAME);
-		ConstrainedPropertyBuilder delegate = new ConstrainedPropertyBuilder(object);
-		c.setDelegate(delegate);
-		c.call();
-		return delegate.getConstrainedProperties();
-	}
-
-	public void set(Object object, Object newValue) {
-		throw new UnsupportedOperationException("Cannot set read-only property ["+PROPERTY_NAME+"]");
-	}
-
-}
diff --git a/groovy/modules/grails/src/grails/build.xml b/groovy/modules/grails/src/grails/build.xml
deleted file mode 100644
index 9a994c4..0000000
--- a/groovy/modules/grails/src/grails/build.xml
+++ /dev/null
@@ -1,565 +0,0 @@
-<project name="grails" default="help">
-
-	<property name="servlet.version" value="2.3"/>
-	<property name="path" value="" />
-
-    <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" />
-    <taskdef name="groovy"  classname="org.codehaus.groovy.ant.Groovy" />
-
-    <target name="help">
-		<echo>Usage: grails [target]
-
-Targets:
-"create-app"          - Create a new grails app
-"create-controller"   - Create a new controller
-"create-service"      - Create a new service
-"create-domain-class" - Create a new domain class
-"create-test-suite"   - Create a new test suite
-"generate-controller" - Generates a controller from a domain class
-"generate-views"      - Generates the views from a domain class
-"generate-all"        - Generates the all artifacts from a domain class
-"test-app"            - Run current app's unit tests
-"run-app"             - Run the application locally and wait
-"create-webtest"      - Create the functional test layout
-"run-webtest"         - Run the functional tests for a running app
-        </echo>
-	</target>
-
-
-    <target name="init-props">
-        <property environment="env"/>
-        <fail unless="env.GRAILS_HOME" message="GRAILS_HOME is not set."/>
-        <property name="grails.home" location="${env.GRAILS_HOME}"/>
-        <groovy >
-            // reusable code blocks, a pitty we cannot store Closures in the project...
-            properties.lower = 'x[0].toLowerCase() + x[1..-1]'
-            properties.caps  = 'x[0].toUpperCase() + x[1..-1]'
-            properties.normCaps = '''
-                x = x.replaceAll(' ','')
-                x = x[0].toUpperCase() + x[1..-1]
-                if (x.endsWith(y)) x = x[0..(x.size()-y.size()-1)]
-                return x
-            '''
-        </groovy>
-    </target>
-
-    <target name="init" depends="init-props" description="Initialise the current app">
-        <mkdir dir="${path}src"/>
-        <mkdir dir="${path}src/java"/>
-        <mkdir dir="${path}src/groovy"/>
-        <mkdir dir="${path}grails-app"/>
-        <mkdir dir="${path}grails-app/controllers"/>
-        <mkdir dir="${path}grails-app/services"/>
-        <mkdir dir="${path}grails-app/domain"/>
-        <mkdir dir="${path}grails-app/taglib"/>
-        <mkdir dir="${path}grails-app/views"/>
-        <mkdir dir="${path}grails-app/views/layouts"/>
-        <mkdir dir="${path}grails-app/i18n"/>
-        <mkdir dir="${path}grails-app/conf"/>
-        <mkdir dir="${path}grails-tests"/>
-        <mkdir dir="${path}web-app"/>
-        <mkdir dir="${path}web-app"/>
-        <mkdir dir="${path}web-app"/>
-        <mkdir dir="${path}web-app/js"/>
-        <mkdir dir="${path}web-app/css"/>
-        <mkdir dir="${path}web-app/WEB-INF/classes"/>
-        <!--<mkdir dir="${path}
-"/>-->
-        <!--<mkdir dir="${path}html"/>-->
-        <mkdir dir="${path}lib"/>
-        <mkdir dir="${path}spring"/>
-        <mkdir dir="${path}hibernate"/>
-        <mkdir dir="${grails.home}/dist"/>
-
-        <copy todir="${path}web-app/WEB-INF">
-            <fileset dir="${grails.home}/src/war/WEB-INF">
-                <include name="applicationContext.xml"/>
-            </fileset>
-        </copy>
-        <copy todir="${path}grails-app">
-            <fileset dir="${grails.home}/src/grails/grails-app" />
-        </copy>
-        <copy file="${grails.home}/src/war/WEB-INF/web${servlet.version}.template.xml" tofile="${path}web-app/WEB-INF/web.template.xml"/>
-        <copy file="${grails.home}/src/war/WEB-INF/sitemesh.xml" tofile="${path}web-app/WEB-INF/sitemesh.xml"/>
-        <copy todir="${path}web-app/js">
-            <fileset dir="${grails.home}/src/war/js"/>
-        </copy>
-        <copy todir="${path}web-app/css">
-            <fileset dir="${grails.home}/src/war/css"/>
-        </copy>
-        <copy todir="${path}web-app/WEB-INF/tld">
-            <fileset dir="${grails.home}/src/war/WEB-INF/tld/${servlet.version}"/>
-            <fileset dir="${grails.home}/src/war/WEB-INF/tld" includes="spring.tld"/>
-            <fileset dir="${grails.home}/src/war/WEB-INF/tld" includes="grails.tld"/>
-        </copy>
-        <copy todir="${path}spring">
-            <fileset dir="${grails.home}/src/war/WEB-INF/spring">
-                <include name="*.xml"/>
-            </fileset>
-        </copy>
-        <touch file="${path}grails-app/i18n/messages.properties"></touch>
-    </target>
-
-    <target name="generate-controller" depends="init-props" description="Generates a controller from a domain class">
-
-		<path id="test.classpath">
-			<!--<pathelement location="${grails.home}/src/web-app/WEB-INF"/>-->
-            <pathelement location="${basedir}/tmp/war/WEB-INF"/>
-            <pathelement location="${basedir}/tmp/war/WEB-INF/classes"/>
-            <fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-			<fileset dir="lib"/>
-		</path>
-		<java classpathref="test.classpath" classname="grails.util.GenerateUtils" fork="true">
-             <arg value="controller" />
-             <arg value="${domain.class.name}" />
-<!--			<jvmarg value="-Xdebug"/>
-			<jvmarg value="-Xrunjdwp:transport=dt_socket,address=50010,suspend=y,server=y"/> -->
-		</java>
-    </target>
-
-    <target name="generate-views" depends="package" description="Generates the views from a domain class">
-
-		<input addproperty="domain.class.name" message="Enter domain class name:" />
-
-		<path id="test.classpath">
-            <pathelement location="${basedir}/tmp/war/WEB-INF"/>
-            <pathelement location="${basedir}/tmp/war/WEB-INF/classes"/>
-            <fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-			<fileset dir="lib"/>
-		</path>
-		<java classpathref="test.classpath" classname="grails.util.GenerateUtils" fork="true">
-             <arg value="view" />
-             <arg value="${domain.class.name}" />
-		</java>
-    </target>
-
-    <target name="generate-all" depends="package" description="Generates the all artifacts from a domain class">
-
-		<input addproperty="domain.class.name" message="Enter domain class name:" />
-
-		<path id="test.classpath">
-            <pathelement location="${basedir}/tmp/war/WEB-INF"/>
-            <pathelement location="${basedir}/tmp/war/WEB-INF/classes"/>
-            <fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-			<fileset dir="lib"/>
-		</path>
-		<java classpathref="test.classpath" classname="grails.util.GenerateUtils" fork="true">
-             <arg value="view" />
-             <arg value="${domain.class.name}" />
-		</java>
-		<java classpathref="test.classpath" classname="grails.util.GenerateUtils" fork="true">
-             <arg value="controller" />
-             <arg value="${domain.class.name}" />
-		</java>
-    </target>
-
-
-    <target name="create-app" depends="init-props" description="Create a new grails app">
-
-		<input addproperty="project.name" message="Enter application name:" />
-
-		<antcall target="init">
-			<param name="path" value="${project.name}/"/>
-		</antcall>
-
-		<groovy>
-			def projName = properties."project.name"
-			properties."project.class.name" =  Eval.x(projName, properties.lower)
-		</groovy>
-
-			<copy 	file="${grails.home}/src/grails/templates/artifacts/DataSource.groovy"
-				    tofile="${project.name}/grails-app/conf/ApplicationDataSource.groovy"/>
-			<copy 	file="${grails.home}/src/grails/templates/artifacts/BootStrap.groovy"
-					tofile="${project.name}/grails-app/conf/ApplicationBootStrap.groovy"/>
-	</target>
-
-	<target name="create-controller" depends="init-props" description="Create a new controller">
-
-		<input addproperty="controller.name" message="Enter controller name:" />
-
-		<groovy>
-			def ctrlName = properties."controller.name"
-			properties."controller.class.name" = Eval.xy(ctrlName,'Controller', properties.normCaps)
-		</groovy>
-
-		<copy 	file="${grails.home}/src/grails/templates/artifacts/Controller.groovy"
-				tofile="grails-app/controllers/${controller.class.name}Controller.groovy"
-                overwrite="false"/>
-
-		<replace 	file="grails-app/controllers/${controller.class.name}Controller.groovy"
-					token="@controller.name@"
-					value="${controller.class.name}" />
-		<echo>Created controller: grails-app/controllers/${controller.class.name}Controller.groovy</echo>
-        <property name="test.suite.name" value="${controller.class.name}" />
-        <antcall target="internal-create-test-suite"  />
-    </target>
-
-	<target name="create-service" depends="init-props" description="Create a new service">
-
-		<input addproperty="service.name" message="Enter service name:" />
-
-        <groovy>
-			def serviceName = properties."service.name"
-			properties."service.class.name" = Eval.xy(serviceName,'Service', properties.normCaps)
-		</groovy>
-
-        <copy 	file="${grails.home}/src/grails/templates/artifacts/Service.groovy"
-				tofile="grails-app/services/${service.class.name}Service.groovy"
-                overwrite="false"/>
-
-		<replace 	file="grails-app/services/${service.class.name}Service.groovy"
-					token="@service.name@"
-					value="${service.class.name}" />
-		<echo>Created service: grails-app/services/${service.class.name}Service.groovy</echo>
-        <property name="test.suite.name" value="${service.class.name}" />
-        <antcall target="internal-create-test-suite" inheritall="true" />
-    </target>
-
-	<target name="create-domain-class" depends="init-props" description="Create a new domain class">
-
-		<input addproperty="domain.class.name" message="Enter domain class name:" />
-
-         <groovy>
-			def domainName = properties."domain.class.name"
-			properties."domain.class.name" = Eval.x(domainName, properties.caps)
-		</groovy>
-
-
-        <copy 	file="${grails.home}/src/grails/templates/artifacts/DomainClass.groovy"
-            tofile="grails-app/domain/${domain.class.name}.groovy"
-            overwrite="false"/>
-
-        <replace 	file="grails-app/domain/${domain.class.name}.groovy"
-            token="@domain.class.name@"
-            value="${domain.class.name}" />
-        <echo>Domain class created: grails-app/domain/${domain.class.name}.groovy</echo>
-        <property name="test.suite.name" value="${domain.class.name}" />
-        <antcall target="internal-create-test-suite" inheritall="true" />
-    </target>
-
-    <target name="create-test-suite" depends="init-props" description="Create a new test suite">
-
-        <input addproperty="test.suite.name" message="Enter test suite name:" />
-
-        <antcall target="internal-create-test-suite" inheritall="true" />
-
-    </target>
-
-    <target name="internal-create-test-suite">
-        <groovy>
-			def suiteName = properties."test.suite.name"
-			properties."test.suite.name" = Eval.xy(suiteName,'Tests', properties.normCaps)
-		</groovy>
-
-        <copy 	file="${grails.home}/src/grails/templates/artifacts/Tests.groovy"
-            tofile="grails-tests/${test.suite.name}Tests.groovy"
-            overwrite="false"/>
-
-        <replace 	file="grails-tests/${test.suite.name}Tests.groovy"
-            token="@test.suite.name@"
-            value="${test.suite.name}" />
-        <echo>Created test suite: grails-tests/${test.suite.name}Tests.groovy</echo>
-    </target>
-
-	<target name="clean">
-		<delete file="grails-app.war"/>
-		<delete dir="tmp" />
-	</target>
-
-	<target name="build" depends="init-props">
-		<path id="classpath">
-			<fileset dir="lib"/>
-			<fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-		</path>
-		<delete failonerror="false">
-			<fileset dir="web-app/WEB-INF/classes"/>
-		</delete>
-		<javac srcdir="src/java" destdir="web-app/WEB-INF/classes" classpathref="classpath" debug="on" deprecation="on" optimize="off"/>
-
-		<groovyc srcdir="src/groovy" destdir="web-app/WEB-INF/classes" classpathref="classpath" />
-	</target>
-
-	<target name="test" depends="build">
-		<delete dir="tmp/reports"/>
-		<mkdir dir="tmp/reports"/>
-		<path id="test_classpath">
-			<fileset dir="lib"/>
-			<fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-			<path location="web-app/WEB-INF/classes"/>
-		</path>
-		<junit>
-			<classpath refid="test_classpath"/>
-
-			<formatter type="plain" usefile="no"/>
-			<formatter type="xml"/>
-			<batchtest todir="tmp/reports" fork="yes">
-				<fileset dir="web-app/WEB-INF/classes" includes="**/*Tests.class" excludes="**/Abstract*"/>
-			</batchtest>
-		</junit>
-	</target>
-
-	<target name="test-app" depends="package" description="Run current app's unit tests">
-		<mkdir dir="${basedir}/tmp/war/WEB-INF/grails-app/tests" />
-		<copy todir="${basedir}/tmp/war/WEB-INF/grails-app/tests">
-			<fileset dir="${basedir}/grails-tests/" includes="**" />
-		</copy>
-		<path id="test.classpath">
-			<!--<pathelement location="${grails.home}/src/web-app/WEB-INF"/>-->
-            <pathelement location="${basedir}/tmp/war/WEB-INF"/>
-            <pathelement location="${basedir}/tmp/war/WEB-INF/classes"/>
-            <fileset dir="${grails.home}/lib"/>
-			<fileset dir="${grails.home}/dist"/>
-			<fileset dir="lib"/>
-		</path>
-		<java classpathref="test.classpath" classname="grails.util.RunTests" fork="true">
-<!--			<jvmarg value="-Xdebug"/>
-			<jvmarg value="-Xrunjdwp:transport=dt_socket,address=50010,suspend=y,server=y"/> -->
-		</java>
-		<delete dir="${basedir}/tmp/war/WEB-INF/grails-app/tests"></delete>
-	</target>
-
-    <target name="dev">
-        <property name="dev.run" value="true" />
-    </target>
-
-    <target name="package" depends="build">
-        <mkdir dir="tmp/war"/>
-        <copy todir="tmp/war">
-            <fileset dir="web-app">
-                <include name="**/**"/>
-                <exclude name="WEB-INF/*.template.xml"/>
-            </fileset>
-        </copy>
-
-        <property name="controllers.home" location="grails-app/controllers"></property>
-        <property name="web.xml.template"  location="web-app/WEB-INF/web.template.xml"></property>
-        <property name="target.web.xml"  location="tmp/war/WEB-INF/web.xml"></property>
-        <property name="tmp.war.dir"  location="tmp/war"></property>
-        <property name="project.base.dir"  location="."></property>
-
-        <groovy><![CDATA[
-            import groovy.text.SimpleTemplateEngine
-
-            def controllersHome = properties."controllers.home"
-            def controllers = []
-            def flows = []
-            new File("${controllersHome}").eachFileRecurse {
-                def match = it.name =~ "(\\w+)(Controller.groovy\$)"
-                if(match) {
-                    def controllerName = match[0][1]
-                    controllerName = Eval.x(controllerName, properties.lower)
-                    controllers << controllerName
-                }
-                match = it.name =~ "(\\w+)(PageFlow.groovy\$)"
-                if(match) {
-                    def flowName = match[0][1]
-                    flowName = Eval.x(flowName, properties.lower)
-                    flows << flowName
-                }
-            }
-
-            def devRun = ("true" == properties."dev.run")
-
-            def binding = [ "controllers" : controllers,
-                            "flows" : flows,
-                            "basedir" : properties."project.base.dir",
-                            "destdir" : properties."tmp.war.dir",
-                            "dev" : devRun     ]
-            def engine = new SimpleTemplateEngine()
-            def template = engine.createTemplate( new File( properties."web.xml.template" ).text ).make(binding)
-
-            new File( properties."target.web.xml" ).write( template.toString() )
-        ]]></groovy>
-
-
-        <mkdir dir="tmp/war/WEB-INF/classes"/>
-        <touch file="tmp/war/WEB-INF/classes/.dummy"/>
-        <mkdir dir="tmp/war/WEB-INF/lib"/>
-        <touch file="tmp/war/WEB-INF/lib/.dummy"/>
-        <mkdir dir="tmp/war/WEB-INF/spring"/>
-        <touch file="tmp/war/WEB-INF/spring/.dummy"/>
-        <mkdir dir="tmp/war/WEB-INF/tld"/>
-        <mkdir dir="tmp/war/js"/>
-        <copy todir="tmp/war/WEB-INF/lib">
-            <fileset dir="${grails.home}/lib">
-                <include name="antlr-2.7.6rc1.jar"/>
-                <include name="asm.jar"/>
-                <include name="asm-attrs.jar"/>
-                <include name="cglib-2.1.3.jar"/>
-                <include name="dom4j-1.6.1.jar"/>
-                <include name="ehcache-1.1.jar"/>
-                <include name="ejb-3.0-edr2.jar"/>
-                <include name="hibernate3.jar"/>
-                <include name="jdbc2_0-stdext.jar"/>
-                <include name="jta.jar"/>
-                <include name="junit.jar"/>
-                <include name="asm-2.0.jar"/>
-                <include name="asm-util-2.0.jar"/>
-                <include name="commons-logging.jar"/>
-                <include name="sitemesh-2.2.1.jar"/>
-                <include name="spring-webflow.jar"/>
-                <include name="spring-binding.jar"/>
-                <include name="spring.jar"/>
-                <include name="groovy-all-1.0-jsr-05-SNAPSHOT.jar"/>
-                <include name="springmodules-sandbox.jar"/>
-                <include name="standard-${servlet.version}.jar"/>
-                <include name="jstl-${servlet.version}.jar"/>
-                <include name="commons-lang-2.0.jar"/>
-                <include name="log4j-1.2.8.jar"/>
-                <include name="ognl-2.7.jar"/>
-                <include name="hsqldb.jar"/>
-                <include name="commons-collections-3.0.jar"/>
-                <include name="commons-pool-1.2.jar"/>
-                <include name="commons-dbcp-1.2.1.jar"/>
-                <include name="commons-cli-1.0.jar"/>
-                <include name="commons-validator.jar"/>
-                <include name="commons-fileupload.jar"/>
-                <include name="jakarta-oro-2.0.8.jar"/>
-            </fileset>
-            <fileset dir="${grails.home}/dist"/>
-            <fileset dir="lib"/>
-        </copy>
-        <antcall target="package:java5"></antcall>
-        <copy todir="tmp/war/WEB-INF/grails-app">
-            <fileset dir="grails-app" includes="**"/>
-        </copy>
-        <copy todir="tmp/war/WEB-INF/classes">
-            <fileset dir="grails-app/i18n" includes="**"/>
-        </copy>
-        <copy todir="tmp/war/WEB-INF/spring">
-            <fileset dir="spring" includes="**"/>
-        </copy>
-        <copy todir="tmp/war/WEB-INF/classes">
-            <fileset dir="hibernate" includes="**"/>
-        </copy>
-        <copy todir="tmp/war/WEB-INF">
-            <fileset dir="${grails.home}/src/war/WEB-INF">
-                <include name="log4j.properties"/>
-            </fileset>
-        </copy>
-    </target>
-    <target name="package:checkj5">
-        <condition property="is.java.5">
-              <equals arg1="${ant.java.version}" arg2="1.5"/>
-        </condition>
-    </target>
-
-    <target name="package:java5" depends="package:checkj5" if="is.java.5">
-        <copy todir="tmp/war/WEB-INF/lib">
-            <fileset dir="${grails.home}/lib">
-                <include name="hibernate-annotations.jar"/>
-                <include name="ejb3-persistence.jar"/>
-            </fileset>
-        </copy>
-    </target>
-
-    <target name="war" depends="clean,package">
-		<basename property="project.dir" file="."/>
-		<jar destfile="${project.dir}.war" basedir="tmp/war" />
-	</target>
-
-    <target name="run-app:impl">
-		<basename property="project.dir" file="."/>
-
-		<groovy>
-			import org.mortbay.jetty.*
-			import org.mortbay.http.*
-
-            System.setProperty('org.mortbay.xml.XmlParser.NotValidating', 'true')
-            def server = new Server()
-            try {
-                def listener = new SocketListener()
-                listener.setPort(8080)
-                server.addListener(listener)
-                server.addWebApplication("/" + properties."project.dir", 'tmp/war')
-                server.start()
-                if (properties.'runTests') ant.antcall(target:'webtest-impl')
-            } catch(Throwable t) {
-                t.printStackTrace()
-			} finally {
-                if (properties.'runTests') server.stop()
-            }
-        </groovy>
-    </target>
-
-    <target name="wait-forever" >
-        <script language="groovy">
-            while(true) {
-                sleep(Long.MAX_VALUE)
-			}
-		</script>
-	</target>
-
-    <target name="run-app" depends="dev, package" description="Run the application locally and wait">
-        <antcall target="run-app:impl" />
-        <antcall target="wait-forever" />
-    </target>
-
-    <target name="init-webtest" depends="init-props" >
-        <!--
-            Download WebTest distro if needed.
-            Users may need to use the <setproxy/> task to when behind a firewall!
-            Downloads are expanded below the downloads dir.
-            Todo: expanded dirs need to deleted if download cache is updated
-            Todo: fail gracefully if not online
-            Todo: fetch by release tag
-        -->
-        <mkdir  dir="${grails.home}/downloads/webtest" />
-        <get    dest="${grails.home}/downloads/webtest.zip" src="http://webtest.canoo.com/webtest/build.zip"
-                verbose="true" usetimestamp="true"/>
-        <unzip  dest="${grails.home}/downloads/webtest" src="${grails.home}/downloads/webtest.zip" overwrite="false" />
-
-    </target>
-
-    <target name="create-webtest" description="Create a functional testing layout" depends="init-webtest" >
-        <copy todir=".">
-            <fileset dir="${grails.home}/src/grails/templates/" includes="webtest/"/>
-        </copy>
-    </target>
-
-    <target name="generate-webtest" description="Create a webtest for a domain class" depends="init-props" >
-        <input addproperty="domain.class.name" message="Enter domain class name:" />
-
-        <groovy>
-            def domainName = properties."domain.class.name"
-            properties."webtest.name" = Eval.x(domainName, properties.caps)
-        </groovy>
-
-        <copy file="${grails.home}/src/grails/templates/artifacts/WebTest.groovy"
-            tofile="webtest/tests/${webtest.name}Test.groovy" />
-        <replace file="webtest/tests/${webtest.name}Test.groovy"
-            token="@webtest.name.caps@"
-            value="${webtest.name}" />
-        <replace file="webtest/tests/${webtest.name}Test.groovy"
-            token="@webtest.name.lower@"
-            value="${domain.class.name}" />
-        <echo>Webtest created: webtest/tests/${webtest.name}Test.groovy</echo>
-
-    </target>
-
-    <target name="run-webtest" depends="init-props" description="Run the functional tests for a running app">
-        <antcall target="run-app:impl">
-            <param name="runTests" value="true"/>
-        </antcall>
-    </target>
-
-    <target name="webtest-impl">
-        <java classname="groovy.ui.GroovyMain" >
-            <arg line="webtest/tests/TestSuite"/>
-            <classpath>
-                <pathelement location="webtest/tests"/>
-                <fileset dir="${grails.home}/lib" includes="*.jar"/>
-                <fileset dir="${grails.home}/dist" includes="*.jar"/>
-                <pathelement location="${grails.home}/downloads/webtest/lib"/>
-                <fileset dir="${grails.home}/downloads/webtest/lib" includes="**/*.jar"/>
-            </classpath>
-        </java>
-    </target>
-
-
-</project>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/i18n/defaultErrorMessages.properties b/groovy/modules/grails/src/grails/grails-app/i18n/defaultErrorMessages.properties
deleted file mode 100644
index a51d212..0000000
--- a/groovy/modules/grails/src/grails/grails-app/i18n/defaultErrorMessages.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
-default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
-default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
-default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address.
-default.invalid.message=Property [{0}] of class [{1}] is not a valid [{2}].
-default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
-default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
-default.invalid.length.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid length range from [{3}] to [{4}]
-default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
-default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maxim value [{3}]
-default.invalid.max.length.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maxim length of [{3}]
-default.invalid.min.length.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum length of [{3}]
-default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maxim size of [{3}]
-default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
-default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
-default.blank.message=Property [{0}] of class [{1}] cannot be blank
-default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] must equal [{3}]
-default.null.message=Property [{0}] of class [{1}] cannot be null
-default.not.unique.message=Property [{0}] of class [{1}] with value [{3}] must be unique
-default.not.editable.message=Property [{0}] of class [{1}] with value [{3}] cannot be changed from [{4}] 
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/taglib/ApplicationTagLib.groovy b/groovy/modules/grails/src/grails/grails-app/taglib/ApplicationTagLib.groovy
deleted file mode 100644
index f4efab1..0000000
--- a/groovy/modules/grails/src/grails/grails-app/taglib/ApplicationTagLib.groovy
+++ /dev/null
@@ -1,201 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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 c;pWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /**
- * The base application tag library for Grails many of which take inspiration from Rails helpers (thanks guys! :)
- * This tag library tends to get extended by others as tags within here can be re-used in said libraries
- *
- * @author Graeme Rocher
- * @since 17-Jan-2006
- */
-import org.springframework.validation.Errors;
-import org.springframework.context.NoSuchMessageException;
-import org.springframework.web.servlet.support.RequestContextUtils as RCU;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
-
-class ApplicationTagLib {
-    /**
-     * Creates a link to a resource, generally used as a method rather than a tag.
-     *
-     * eg. <link type="text/css" href="${createLinkTo(dir:'css',file:'main.css')}" />
-     */
-    @Property createLinkTo = { attrs, body ->
-         out << grailsAttributes.getApplicationUri(request)
-         if(attrs['dir']) {
-            out << "/${attrs['dir']}"
-         }
-         if(attrs['file']) {
-            out << "/${attrs['file']}"
-         }
-    }
-
-    /**
-     *  General linking to controllers, actions etc. Examples:
-     *
-     *  <g:link action="myaction">link 1</gr:link>
-     *  <g:link controller="myctrl" action="myaction">link 2</gr:link>
-     */
-    @Property link = { attrs, body ->
-        out << "<a href=\""
-        // create the link
-        createLink(attrs)
-
-        out << '\" '
-        // process remaining attributes
-        attrs.each { k,v ->
-            out << k << "=\"" << v << "\" "
-        }
-        out << ">"
-        // output the body
-        body()
-
-        // close tag
-        out << "</a>"
-    }
-
-
-    /**
-     * Creates a grails application link from a set of attributes. This
-     * link can then be included in links, ajax calls etc. Generally used as a method call
-     * rather than a tag eg.
-     *
-     *  <a href="${createLink(action:'list')}">List</a>
-     */
-    @Property createLink = { attrs ->
-        out << grailsAttributes.getApplicationUri(request)
-        // prefer a URL attribute
-        if(attrs['url']) {
-             attrs = attrs.remove('url')
-        }
-        // if the current attribute null set the controller uri to the current controller
-        if(attrs["controller"]) {
-            out << '/' << attrs.remove("controller")
-        }
-        else {
-           out << grailsAttributes.getControllerUri(request)
-        }
-        if(attrs["action"]) {
-            out << '/' << attrs.remove("action")
-        }
-        if(attrs["id"]) {
-            out << '/' << attrs.remove("id")
-        }
-        if(attrs['params']) {
-            def pms = attrs.remove('params')
-            out << '?'
-            def i = 0
-            pms.each { k,v ->
-                out << "${k}=${v}"
-                if(++i < pms.size())
-                   out << '&'
-            }
-        }
-    }
-
-
-
-    /**
-     *  allows rendering of templates inside views for collections, models and beans. Examples:
-     *
-     *  <g:render template="atemplate" collection="${users}" />
-     *  <g:render template="atemplate" model="[user:user,company:company]" />
-     *  <g:render template="atemplate" bean="${user}" />
-     */
-    @Property render = { attrs, body ->
-        if(!attrs['template'])
-            throwTagError("Tag [render] is missing required attribute [template]")
-
-        def engine = grailsAttributes.getPagesTemplateEngine()
-        def uri = '/WEB-INF/grails-app/views' << grailsAttributes.getControllerUri(request)
-        uri << "/_${attrs['template']}.gsp"
-        uri = uri.toString()
-
-        def url = servletContext.getResource(uri)
-        if(!url)
-            throwTagError("No template found for name [${attrs['template']}] in tag [render]")
-
-        def t = engine.createTemplate(  uri,
-                                        servletContext,
-                                        request,
-                                        response)
-
-        if(attrs['model'] instanceof Map) {
-            t.make( attrs['model'] ).writeTo(out)
-        }
-        else if(attrs['collection']) {
-            attrs['collection'].each {
-                t.make( ['it': it] ).writeTo(out)
-            }
-        }
-        else if(attrs['bean']) {
-            t.make( [ 'it' : attrs['bean'] ] ).writeTo(out)
-        }
-    }
-
-    /**
-     * Attempts to render input for a property value based by attempting to choose a rendering component
-     * to use based on the property type
-     */
-    @Property renderInput = { attrs, body ->
-        def bean = attrs['bean']
-        if(!bean) {
-            throwTagError("Tag [renderInput] is missing required attribute [bean]")
-        }
-        if(!attrs['property']) {
-            throwTagError("Tag [renderInput] is missing required attribute [property]")
-        }
-
-       def app = grailsAttributes.getGrailsApplication()
-       def dc = app.getGrailsDomainClass(bean.class.name)
-       def pv = bean.metaPropertyValues.find {
-            it.name == attrs['property']
-       }
-       if(!pv) {
-          throwTagError("Property [${attrs['property']}] does not exist in tag [renderInput] for bean [${bean}]")
-       }
-       def engine = grailsAttributes.getPagesTemplateEngine()
-       def uri = findUriForType(pv.type)
-
-       if(!uri)
-            throwTagError("Type [${pv.type}] is unsupported by tag [renderInput]. No template found.")
-
-       def t = engine.createTemplate(   uri,
-                                        servletContext,
-                                        request,
-                                        response)
-       if(!t) {
-            throwTagError("Type [${pv.type}] is unsupported by tag [renderInput]. No template found.")
-       }
-
-       def binding = [ name:pv.name,value:pv.value]
-       binding['constraints'] = (dc ? dc.constrainedProperties : null)
-
-       t.make(binding).writeTo(out)
-    }
-
-    private String findUriForType(type) {
-        if(type == Object.class)
-            return null;
-        def uri = "/WEB-INF/internal/render/${type.name}.gsp";
-        def url = servletContext.getResource(uri)
-
-        if(url != null) {
-            return uri
-        }
-        else {
-            return findUriForType(type.superClass)
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/taglib/FormTagLib.groovy b/groovy/modules/grails/src/grails/grails-app/taglib/FormTagLib.groovy
deleted file mode 100644
index c11eaf3..0000000
--- a/groovy/modules/grails/src/grails/grails-app/taglib/FormTagLib.groovy
+++ /dev/null
@@ -1,299 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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 c;pWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.springframework.validation.Errors;
-import org.springframework.context.NoSuchMessageException;
-import org.springframework.web.servlet.support.RequestContextUtils as RCU;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
-
- /**
- *  A  tag lib that provides tags for working with form controls
- *
- * @author Graeme Rocher
- * @since 17-Jan-2006
- */
-
-class FormTagLib extends ApplicationTagLib {
-    /**
-     *  General linking to controllers, actions etc. Examples:
-     *
-     *  <g:form action="myaction">...</gr:form>
-     *  <g:form controller="myctrl" action="myaction">...</gr:form>
-     */
-    @Property form = { attrs, body ->
-        out << "<form action=\""
-        // create the link
-        createLink(attrs)
-
-        out << '\" '
-        // default to post
-        if(!attrs['method']) {
-            out << 'method="post" '
-        }
-        // process remaining attributes
-        attrs.each { k,v ->
-
-            out << k << "=\"" << v << "\" "
-        }
-        out << ">"
-        // output the body
-        body()
-
-        // close tag
-        out << "</form>"
-    }
-    /**
-     * Creates a submit button that submits to an action in the controller specified by the form action
-     * The value of the action attribute is translated into the action name, for example "Edit" becomes
-     * "edit" or "List People" becomes "listPeople"
-     *
-     *  <g:actionSubmit value="Edit" />
-     *
-     */
-    @Property actionSubmit = { attrs ->
-        out << '<input type="submit" name="_action" '
-        def value = attrs.remove('value')
-        if(value) {
-             out << "value='${value}'"
-        }
-        // process remaining attributes
-        attrs.each { k,v ->
-            out << k << "=\"" << v << "\" "
-        }
-        // close tag
-        out.println '/>'
-
-    }
-    /**
-     * A simple date picker that renders a date as selects
-     * eg. <g:datePicker name="myDate" value="${new Date()}" />
-     */
-    @Property datePicker = { attrs ->
-        def value = (attrs['value'] ? attrs['value'] : new Date())
-        def name = attrs['name']
-        def c = new GregorianCalendar();
-        c.setTime(value)
-        def day = c.get(GregorianCalendar.DAY_OF_MONTH)
-        def month = c.get(GregorianCalendar.MONTH)
-        def year = c.get(GregorianCalendar.YEAR)
-        def hour = c.get(GregorianCalendar.HOUR_OF_DAY)
-        def minute = c.get(GregorianCalendar.MINUTE)
-		def dfs = new java.text.DateFormatSymbols(RCU.getLocale(request))
-
-
-        out << "<input type='hidden' name='${name}' value='struct' />"
-
-		// create day select
-        out.println "<select name='${name}_day'>"
-
-        for(i in 1..(day-1)) {
-               out.println "<option value='${i}'>${i}</option>"
-        }
-        out.println "<option value='${day}' selected='selected'>${day}</option>"
-        for(i in (day+1)..31) {
-               out.println "<option value='${i}'>${i}</option>"
-        }
-        out.println '</select>'
-		// create month select
-		out.println "<select name='${name}_month'>"
-		dfs.months.eachWithIndex { m,i ->
-			if(m) {
-				def monthIndex = i + 1
-				out << "<option value='${i}'"
-				if(month == i) out << 'selected="selected"'
-				out << '>'
-				out << m
-				out.println '</option>'
-			}
-		}
-		out.println '</select>'
-		// create year select
-		out.println "<select name='${name}_year'>"
-        for(i in (year - 100)..(year-1)) {
-			out.println "<option value='${i}'>${i}</option>"
-        }
-        out.println "<option value='${year}' selected='selected'>${year}</option>"
-        for(i in (year + 1)..(year+100)) {
-            out.println "<option value='${i}'>${i}</option>"
-        }
-		out.println '</select>'
-		// do hour select
-		out.println "<select name='${name}_hour'>"
-        for(i in 0..23) {
-			def h = '' + i
-			if(i < 10) h = '0' + h
-			out << "<option value='${h}' "
-			if(hour == h) out << "selected='selected'"
-			out << '>' << h << '</option>'
-			out.println()
-		}
-		out.println '</select> :'
-
-		// do minute select
-		out.println "<select name='${name}_minute'>"
-        for(i in 0..59) {
-			def m = '' + i
-			if(i < 10) m = '0' + m
-			out << "<option value='${m}' "
-			if(minute == m) out << "selected='selected'"
-			out << '>' << m << '</option>'
-			out.println()
-		}
-		out.println '</select>'
-    }
-
-    /**
-     *  A helper tag for creating TimeZone selects
-     * eg. <g:timeZoneSelect name="myTimeZone" value="${tz}" />
-     */
-    @Property timeZoneSelect = { attrs ->
-        attrs['from'] = TimeZone.getAvailableIDs();
-        attrs['value'] = (attrs['value'] ? attrs['value'].ID : TimeZone.getDefault().ID )
-
-        // set the option value as a closure that formats the TimeZone for display
-        attrs['optionValue'] = {
-            TimeZone tz = TimeZone.getTimeZone(it);
-            def shortName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT);
-            def longName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.LONG);
-
-            def offset = tz.rawOffset;
-            def hour = offset / (60*60*1000);
-            def min = Math.abs(offset / (60*1000)) % 60;
-
-            return "${shortName}, ${longName} ${hour}:${min}"
-        }
-
-        // use generic select
-        select( attrs )
-    }
-
-    /**
-     *  A helper tag for creating locale selects
-     *
-     * eg. <g:localeSelect name="myLocale" value="${locale}" />
-     */
-    @Property localeSelect = {attrs ->
-        attrs['from'] = Locale.getAvailableLocales()
-        attrs['value'] = (attrs['value'] ? attrs['value'] : RCU.getLocale(request) )
-        // set the key as a closure that formats the locale
-        attrs['optionKey'] = { "${it.language}_${it.country}" }
-        // set the option value as a closure that formats the locale for display
-        attrs['optionValue'] = { "${it.language}, ${it.country},  ${it.displayName}" }
-
-        // use generic select
-        select( attrs )
-    }
-
-    /**
-     * A helper tag for creating currency selects
-     *
-     * eg. <g:currencySelect name="myCurrency" value="${currency}" />
-     */
-    @Property currencySelect = { attrs, body ->
-        if(!attrs['from']) {
-            attrs['from'] = ['EUR', 'XCD','USD','XOF','NOK','AUD','XAF','NZD','MAD','DKK','GBP','CHF','XPF','ILS','ROL','TRL']
-        }
-        def currency = (attrs['value'] ? attrs['value'] : Currency.getInstance( RCU.getLocale(request) ))
-        attrs['value'] = currency.currencyCode
-        // invoke generic select
-        select( attrs )
-    }
-
-    /**
-     * A helper tag for creating HTML selects
-     *
-     * Examples:
-     * <g:select name="user.age" from="${18..65}" value="${age}" />
-     * <g:select name="user.company.id" from="${Company.list()}" value="${user?.company.id}" optionKey="id" />
-     */
-    @Property select = { attrs ->
-        def from = attrs.remove('from')
-        def optionKey = attrs.remove('optionKey')
-        def optionValue = attrs.remove('optionValue')
-        def value = attrs.remove('value')
-
-        out << "<select name='${attrs.remove('name')}' "
-        // process remaining attributes
-        attrs.each { k,v ->
-            out << k << "=\"" << v << "\" "
-        }
-        out << '>'
-        out.println()
-        // create options from list
-        if(from) {
-            from.each {
-                out << '<option '
-                if(optionKey) {
-                    if(optionKey instanceof Closure) {
-                         out << 'value="' << optionKey(it) << '" '
-                    }
-                    else {
-                        out << 'value="' << it.properties[optionKey] << '" '
-                    }
-
-                    if(it.properties[optionKey] == value) {
-                        out << 'selected="selected" '
-                    }
-                }
-                else {
-                    out << "value='${it}' "
-                    if(it == value) {
-                        out << 'selected="selected" '
-                    }
-                }
-                out << '>'
-                if(optionValue) {
-                    if(optionValue instanceof Closure) {
-                         out << optionValue(it)
-                    }
-                    else {
-                        out << it.properties[optionValue]
-                    }
-                }
-                else {
-                   out << it
-                }
-                out << '</option>'
-                out.println()
-            }
-        }
-        // close tag
-        out << '</select>'
-    }
-
-    /**
-     * A helper tag for creating checkboxes
-     **/
-    @Property checkBox = { attrs ->
-          def value = attrs.remove('value')
-          def name = attrs.remove('name')
-          if(!value) value = false
-          out << '<input type="hidden"'
-          out << "name='_${name}' />"
-          out << '<input type="checkbox" '
-          out << "name='${name}' "
-          if(value) {
-                out << 'checked="checked" '
-          }
-          out << "value='true' "
-        // process remaining attributes
-        attrs.each { k,v ->
-            out << k << "=\"" << v << "\" "
-        }
-        // close the tag, with no body
-        out << ' />'
-
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/taglib/JavascriptTagLib.groovy b/groovy/modules/grails/src/grails/grails-app/taglib/JavascriptTagLib.groovy
deleted file mode 100644
index 458d058..0000000
--- a/groovy/modules/grails/src/grails/grails-app/taglib/JavascriptTagLib.groovy
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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 c;pWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.springframework.validation.Errors;
-import org.springframework.context.NoSuchMessageException;
-import org.springframework.web.servlet.support.RequestContextUtils as RCU;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
-
- /**
- *  A  tag lib that provides tags for developing javascript and ajax applications
- *
- * @author Graeme Rocher
- * @since 17-Jan-2006
- */
-class JavascriptTagLib extends ApplicationTagLib  {
-
-    /**
-     *  Creates a remote function call using the prototype library
-     */
-    @Property remoteFunction = { attrs  ->
-        // before remote function
-        def after = ''
-        if(attrs["before"])
-            out << "${attrs.remove('before')};"
-        if(attrs["after"])
-            after = "${attrs.remove('after')};"
-
-        out << 'new Ajax.'
-        if(attrs["update"]) {
-            out << 'Updater('
-            if(attrs["update"] instanceof Map) {
-                out << "{"
-                def update = []
-                if(attrs["update"]["success"]) {
-                    update << "success:'${attrs['update']['success']}'"
-                }
-                if(attrs["update"]["failure"]) {
-                    update << "failure:'${attrs['update']['failure']}'"
-                }
-                out << update.join(',')
-                out << "},"
-            }
-            else {
-                out << "'" << attrs["update"] << "',"
-            }
-            attrs.remove("update")
-        }
-        else {
-            out << "Request("
-        }
-
-        out << "'"
-        if(attrs['url']) {
-            createLink(attrs['url'])
-        }
-        else {
-            createLink(attrs)
-        }
-
-        out << "',"
-
-        // process options
-        out << getAjaxOptions(attrs)
-        // close
-        out << ');'
-
-        // after remote function
-        if(after)
-           out <<  after
-    }
-
-    // helper function to build ajax options
-    def getAjaxOptions(options) {
-        def ajaxOptions = []
-
-        if(options) {
-            // process callbacks
-            def callbacks = options.findAll { k,v ->
-                k ==~ /on(\p{Upper}|\d){1}\w+/
-            }
-            callbacks.each { k,v ->
-                ajaxOptions << "${k}:function(e){${v}}"
-                options.remove(k)
-            }
-
-            // necessary defaults
-            if(options['asynchronous'])
-                ajaxOptions << "asynchronous:${options.remove('asynchronous')}"
-            else
-                ajaxOptions << "asynchronous:true"
-
-
-            if(options['evalScripts'])
-                ajaxOptions << "evalScripts:${options.remove('evalScripts')}"
-            else
-                ajaxOptions << "evalScripts:true"
-
-            if(options['parameters']) {
-                ajaxOptions << "parameters:${options.remove('parameters')}"
-            }
-            // remaining options
-            options.each { k, v ->
-                 switch(v) {
-                    case 'true': ajaxOptions << "${k}:${v}"; break;
-                    case 'false': ajaxOptions << "${k}:${v}"; break;
-                    case ~/\s*function(\w*)\s*/: ajaxOptions << "${k}:${v}"; break;
-                    default:ajaxOptions << "${k}:'${v}'"; break;
-                 }
-            }
-        }
-        // set defaults
-        else {
-             ajaxOptions << "asynchronous:true"
-             ajaxOptions << "evalScripts:true"
-        }
-
-        return "{${ajaxOptions.join(',')}}"
-    }
-
-    /**
-     * A link to a remote uri that used the prototype library to invoke the link via ajax
-     */
-    @Property remoteLink = { attrs, body ->
-       out << "<a href=\"#\" onclick=\""
-        // create remote function
-        remoteFunction(attrs)
-        out << 'return false;" '
-        // process remaining attributes
-        attrs.each { k,v ->
-            out << k << "=\"" << v << "\" "
-        }
-        out << ">"
-        // output the body
-        body()
-
-        // close tag
-        out << "</a>"
-    }
-
-    /**
-     * A form which used prototype to serialize its parameters and submit via an asynchronous ajax call
-     */
-    @Property formRemote = { attrs, body ->
-       attrs['parameters'] = "Form.serialize(this)"
-       out << '<form onsubmit="' << remoteFunction(attrs) << ';return false;" '
-       out << 'method="' <<  (attrs['method'] ? attrs['method'] : 'post') << '" '
-       out << 'action="' <<  (attrs['action'] ? attrs['action'] : createLink(attrs['url'])) << '">'
-
-        // output body
-           body()
-        // close tag
-       out << '</form>'
-    }
-
-    /**
-     *  Creates a form submit button that submits the current form to a remote ajax call
-     */
-    @Property submitToRemote = { attrs, body ->
-        attrs['parameters'] = "Form.serialize(this.form)"
-        out << "<input type='button' name='${attrs.remove('name')}' value='${attrs.remove('value')}' "
-        out << 'onclick="'
-        remoteFunction(attrs)
-        out << ';return false;" />'
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/taglib/ValidationTagLib.groovy b/groovy/modules/grails/src/grails/grails-app/taglib/ValidationTagLib.groovy
deleted file mode 100644
index 737bdfd..0000000
--- a/groovy/modules/grails/src/grails/grails-app/taglib/ValidationTagLib.groovy
+++ /dev/null
@@ -1,289 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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 c;pWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-import org.springframework.validation.Errors;
-import org.springframework.context.NoSuchMessageException;
-import org.springframework.web.servlet.support.RequestContextUtils as RCU;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
-
-/**
-*  A  tag lib that provides tags to handle validation and errors
-*
-* @author Graeme Rocher
-* @since 17-Jan-2006
-*/
-
-class ValidationTagLib extends ApplicationTagLib {
-    /**
-     * Checks if the request has errors either for a field or global errors
-     */
-    @Property hasErrors = { attrs, body ->
-        def model = attrs['model']
-        def checkList = []
-        if(model) {
-            checkList = model.findAll { k,v ->
-                grailsApplication.isGrailsDomainClass(v.class)
-            }
-        }
-        if(attrs['bean']) {
-            checkList << attrs['bean']
-        }
-        else {
-			if(request.attributeNames) {
-				request.attributeNames.each {
-					def ra = request[it]
-					if(ra instanceof Errors)
-						checkList << ra
-					else if(grailsApplication.isGrailsDomainClass(ra.class))
-						checkList << ra
-				}
-			}
-        }
-
-        for(i in checkList) {
-            def errors = null
-            if(grailsApplication.isGrailsDomainClass(i.class)) {
-                if(i.hasErrors())
-                    errors = i.errors
-            }
-            else if(i instanceof Errors) {
-               errors = i
-            }
-            if(errors) {
-                if(attrs['field']) {
-                    if(errors.hasFieldErrors(attrs['field'])) {
-                        body()
-                    }
-                }
-                else {
-                    body()
-                }
-            }
-        }
-    }
-
-    /**
-     * Loops through each error for either field or global errors
-     */
-    @Property eachError = { attrs, body ->
-        def model = attrs['model']
-        def errorList = []
-        if(model) {
-            errorList = model.findAll { k,v ->
-                grailsApplication.isGrailsDomainClass(v.class)
-            }
-        }
-        if(attrs['bean']) {
-            errorList << attrs['bean']
-        }
-        else {
-            request.attributeNames.each {
-                def ra = request[it]
-                if(ra instanceof Errors)
-                    errorList << ra
-                else if(grailsApplication.isGrailsDomainClass(ra.class))
-                    errorList << ra
-            }
-        }
-
-        for(i in errorList) {
-            def errors = null
-            if(grailsApplication.isGrailsDomainClass(i.class)) {
-                if(i.hasErrors())
-                    errors = i.errors
-            }
-            else if(i instanceof Errors) {
-               errors = i
-            }
-            if(errors && errors.hasErrors()) {
-                if(attrs['field']) {
-                    if(errors.hasFieldErrors(attrs['field'])) {
-                        errors.getFieldErrors( attrs["field"] ).each {
-                            body(it)
-                        }
-                    }
-                }
-                else {
-                    errors.allErrors.each {
-                        body( it )
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Loops through each error and renders it using one of the supported mechanisms (defaults to "list" if unsupported)
-     */
-    @Property renderErrors = { attrs, body ->
-        def renderAs = attrs.remove('as')
-        if(!renderAs) renderAs = 'list'
-
-        if(renderAs == 'list') {
-            out << "<ul>"
-            eachError(attrs, {
-                out << "<li>"
-                message(error:it)
-                out << "</li>"
-              }
-            )
-            out << "</ul>"
-        }
-    }
-    /**
-     * Resolves a message code for a given error or code from the resource bundle
-     */
-    @Property message = { attrs ->
-          def messageSource = grailsAttributes
-                                .getApplicationContext()
-                                .getBean("messageSource")
-
-          def locale = RCU.getLocale(request)
-
-          if(attrs['error']) {
-                def error = attrs['error']
-                def defaultMessage = ( attrs['default'] ? attrs['default'] : error.defaultMessage )
-                def message = messageSource.getMessage( error.code,
-                                                        error.arguments,
-                                                        defaultMessage,
-                                                        locale )
-                if(message) {
-                    out << message
-                }
-                else {
-                    out << error.code
-                }
-          }
-          if(attrs['code']) {
-                def code = attrs['code']
-                def defaultMessage = ( attrs['default'] ? attrs['default'] : error.defaultMessage )
-                if(!defaultMessage)
-                    defaultMessage = code
-
-                def message = messageSource.getMessage( code,
-                                                        null,
-                                                        defaultMessage,
-                                                        locale )
-                if(message) {
-                    out << message
-                }
-                else {
-                    out << code
-                }
-          }
-    }
-    // Maps out how Grails contraints map to Apache commons validators
-    static CONSTRAINT_TYPE_MAP = [ email : 'email',
-                                             creditCard : 'creditCard',
-                                             match : 'mask',
-                                             blank: 'required',
-                                             nullable: 'required',
-                                             maxSize: 'maxLength',
-                                             minSize: 'minLength',
-                                             range: 'intRange',
-                                             size: 'intRange',
-                                             length: 'maxLength,minLength' ]
-    /**
-     * Validates a form using Apache commons validator javascript against constraints defined in a Grails
-     * domain class
-     *
-     * TODO: This tag is a work in progress
-     */
-    @Property validate = { attrs, body ->
-        def form = attrs["form"]
-        def againstClass = attrs["against"]
-        if(!form)
-            throwTagError("Tag [validate] is missing required attribute [form]")
-
-        if(!againstClass) {
-            againstClass = form.substring(0,1).toUpperCase() + form.substring(1)
-        }
-
-        def app = grailsAttributes.getGrailsApplication()
-        def dc = app.getGrailsDomainClass(againstClass)
-
-        if(!dc)
-            throwTagError("Tag [validate] could not find a domain class to validate against for name [${againstClass}]")
-
-        def constrainedProperties = dc.constrainedProperties.collect { k,v -> return v }
-        def appliedConstraints = []
-
-        constrainedProperties.each {
-           appliedConstraints += it.collect{ it.appliedConstraints }
-        }
-
-        appliedConstraints = appliedConstraints.flatten()
-        def fieldValidations = [:]
-        appliedConstraints.each {
-            def validateType = CONSTRAINT_TYPE_MAP[it.name]
-            if(validateType) {
-                if(fieldValidations[validateType]) {
-                    fieldValidations[validateType] << it
-                }
-                else {
-                     fieldValidations[validateType] =  [it]
-                }
-            }
-        }
-
-        out << '<script type="text/javascript">\n'
-        fieldValidations.each { k,v ->
-           def validateType = k
-
-           if(validateType) {
-
-                def validateTypes = [validateType]
-
-                if(validateType.contains(",")) {
-                    validateTypes = validateType.split(",")
-                }
-
-
-                validateTypes.each { vt ->
-                    // import required script
-                    def scriptName = "org/apache/commons/validator/javascript/validate" + vt.substring(0,1).toUpperCase() + vt.substring(1) + ".js"
-                    def inStream = getClass().classLoader.getResourceAsStream(scriptName)
-                    if(inStream) {
-                        out << inStream.text
-                    }
-
-                    out << "function ${form}_${vt}() {"
-                    v.each { constraint ->
-                           out << "this.${constraint.propertyName} = new Array("
-                           out << "document.forms['${form}'].elements['${constraint.propertyName}']," // the field
-                           out << '"Test message"' // TODO: Resolve the actual message
-                           switch(vt) {
-                                case 'mask': out << ",function() { return '${constraint.regex}'; }";break;
-                                case 'intRange': out << ",function() { if(arguments[0]=='min') return ${constraint.range.from}; else return ${constraint.range.to} }";break;
-                                case 'floatRange': out << ",function() { if(arguments[0]=='min') return ${constraint.range.from}; else return ${constraint.range.to} }";break;
-                                case 'maxLength': out << ",function() { return ${constraint.maxSize};  }";break;
-                                case 'minLength': out << ",function() { return ${constraint.minSize};  }";break;
-                           }
-                           out << ');\n'
-                    }
-                    out << "}\n"
-                }
-            }
-        }
-        out << 'function validateForm(form) {\n'
-         fieldValidations.each { k,v ->
-               def validateType = k.substring(0,1).toUpperCase() + k.substring(1)
-               out << "if(!validate${validateType}(form)) return false;\n"
-         }
-        out << 'return true;\n';
-        out << '}\n'
-      //  out << "document.forms['${attrs['form']}'].onsubmit = function(e) {return validateForm(this)}\n"
-        out << '</script>'
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/views/error.jsp b/groovy/modules/grails/src/grails/grails-app/views/error.jsp
deleted file mode 100644
index 1f58dfe..0000000
--- a/groovy/modules/grails/src/grails/grails-app/views/error.jsp
+++ /dev/null
@@ -1,48 +0,0 @@
-<%@ page contentType="text/html;charset=UTF-8" %>
-<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
-<html>
-  <head>
-	  <title>Grails Runtime Exception</title>
-	  <style type="text/css">
-	  		.message {
-	  			border: 1px solid black;
-	  			padding: 5px;
-	  			background-color:#E9E9E9;
-	  		}
-	  		.stack {
-	  			border: 1px solid black;
-	  			padding: 5px;	  		
-	  			overflow:auto;
-	  			height: 300px;
-	  		}
-	  		.snippet {
-	  			padding: 5px;
-	  			background-color:white;
-	  			border:1px solid black;
-	  			margin:3px;
-	  			font-family:courier;
-	  		}
-	  </style>
-  </head>
-  
-  <body>
-    <h1>Grails Runtime Exception</h1>
-    <h2>Error Details</h2>
-  	<div class="message">
-  		<strong>Message:</strong> <c:out value="${exception.message}" /> <br />
-  		<strong>Caused by:</strong> <c:out value="${exception.cause.message}" /> <br />
-  		<strong>Class:</strong> <c:out value="${exception.className}" /> <br />  		  		
-  		<strong>At Line:</strong> [<c:out value="${exception.lineNumber}" />] <br />  		
-  		<strong>Code Snippet:</strong><br />   		
-  		<div class="snippet">
-  			<c:forEach var="cs" items="${exception.codeSnippet}"> 
-  				<c:out value="${cs}" /><br />  			
-  			</c:forEach>  	
-  		</div>	  		
-  	</div>
-    <h2>Stack Trace</h2>
-    <div class="stack">
-	    <c:out value="${exception.stackTraceText}" />
-    </div>
-  </body>
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/grails-app/views/layouts/main.jsp b/groovy/modules/grails/src/grails/grails-app/views/layouts/main.jsp
deleted file mode 100644
index fffe7d4..0000000
--- a/groovy/modules/grails/src/grails/grails-app/views/layouts/main.jsp
+++ /dev/null
@@ -1,10 +0,0 @@
-<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
-<html>
-	<head>
-		<title><decorator:title default="Default Title" /></title>
-		<decorator:head />		
-	</head>
-	<body onload="<decorator:getProperty property='body.onload'/>">
-			 <decorator:body />				 	
-	</body>	
-</html>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/BootStrap.groovy b/groovy/modules/grails/src/grails/templates/artifacts/BootStrap.groovy
deleted file mode 100644
index 796af79..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/BootStrap.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-class ApplicationBootStrap {
-
-     @Property Closure init = { servletContext ->
-     }
-     @Property Closure destroy = {
-     }
-} 
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/Controller.groovy b/groovy/modules/grails/src/grails/templates/artifacts/Controller.groovy
deleted file mode 100644
index 05b72bb..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/Controller.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-class @controller.name@Controller {
-	
-	@Property String defaultAction = "list"
-	
-	@Property list = { 
-		return null;
-	}
-}
-
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/DataSource.groovy b/groovy/modules/grails/src/grails/templates/artifacts/DataSource.groovy
deleted file mode 100644
index dfe7c5c..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/DataSource.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-class ApplicationDataSource {
-   @Property boolean pooled = true
-   @Property String dbCreate = "create-drop" // one of 'create', 'create-drop','update'
-   @Property String url = "jdbc:hsqldb:mem:testDB"
-   @Property String driverClassName = "org.hsqldb.jdbcDriver"
-   @Property String username = "sa"
-   @Property String password = ""
-}
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/DomainClass.groovy b/groovy/modules/grails/src/grails/templates/artifacts/DomainClass.groovy
deleted file mode 100644
index 4877797..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/DomainClass.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-class @domain.class.name@ { 
-	@Property Long id; 
-	@Property Long version; 
-}	
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/Service.groovy b/groovy/modules/grails/src/grails/templates/artifacts/Service.groovy
deleted file mode 100644
index 4dffe0a..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/Service.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-class @service.name@Service {
-	
-	@Property boolean transactional = true
-	
-	def serviceMethod() {
-		// TODO
-	}
-}
-
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/Tests.groovy b/groovy/modules/grails/src/grails/templates/artifacts/Tests.groovy
deleted file mode 100644
index 862614d..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/Tests.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-class @test.suite.name@Tests extends GroovyTestCase {
-
-	void testSomething() {
-		
-	}
-}
diff --git a/groovy/modules/grails/src/grails/templates/artifacts/WebTest.groovy b/groovy/modules/grails/src/grails/templates/artifacts/WebTest.groovy
deleted file mode 100644
index db06539..0000000
--- a/groovy/modules/grails/src/grails/templates/artifacts/WebTest.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-
-class @webtest.name.caps@Test extends grails.util.WebTest {
-
-    // Unlike unit tests, functional tests are often sequence dependent.
-    // Specify that sequence here.
-    void suite() {
-        test@webtest.name.caps@ListNewDelete()
-        // add tests for more operations here
-    }
-
-    def test@webtest.name.caps@ListNewDelete() {
-        webtest('@webtest.name.caps@ basic operations: view list, create new entry, back to view, delete, view'){
-            invoke(url:'@webtest.name.lower@')
-            verifyText(text:'Home')
-
-            verifyListPage(0)
-
-            clickLink(label:'New @webtest.name.caps@')
-            verifyText(text:'Create @webtest.name.caps@')
-            clickButton(label:'Create')
-            verifyText(text:'Show @webtest.name.caps@', description:'Detail page')
-            clickElement(xpath:"//button[text()='Back']")
-
-            verifyListPage(1)
-
-            clickLink(href:'delete', description:'delete the first element (there is only one)')
-            verifyXPath(xpath:"//div[@class='message']", text:/@webtest.name.caps@.*deleted./, regex:true)
-
-            verifyListPage(0)
-
-    }   }
-
-    String ROW_COUNT_XPATH = "count(//td[@class='actionButtons']/..)"
-
-    def verifyListPage(int count) {
-        ant.group(description:"verify @webtest.name.caps@ list view with $count row(s)"){
-            verifyText(text:'@webtest.name.caps@ List')
-            verifyXPath(xpath:ROW_COUNT_XPATH, text:count, description:"$count row(s) of data expected")
-    }   }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/templates/webtest/conf/webtest.properties b/groovy/modules/grails/src/grails/templates/webtest/conf/webtest.properties
deleted file mode 100644
index c7eebdb..0000000
--- a/groovy/modules/grails/src/grails/templates/webtest/conf/webtest.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-webtest_host                = localhost
-webtest_port                = 8080
-webtest_protocol            = http
-
-# uncomment to override default
-# webtest_basepath            = projectName
-
-webtest_summary             = true
-webtest_saveresponse        = true
-webtest_resultpath          = webtest/reports
-webtest_resultfile          = WebTestResults.xml
-webtest_haltonerror         = false
-webtest_errorproperty       = webTestError
-webtest_haltonfailure       = false
-webtest_failureproperty     = webTestFailure
-webtest_showhtmlparseroutput= true
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/templates/webtest/reports/readme.txt b/groovy/modules/grails/src/grails/templates/webtest/reports/readme.txt
deleted file mode 100644
index 81b9cf0..0000000
--- a/groovy/modules/grails/src/grails/templates/webtest/reports/readme.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-this directory is for collecting
-
-- the webtest XML  result file
-- the webtest HTML result overview
-- all lastresponse fliles captured when running webtest
\ No newline at end of file
diff --git a/groovy/modules/grails/src/grails/templates/webtest/tests/TestSuite.groovy b/groovy/modules/grails/src/grails/templates/webtest/tests/TestSuite.groovy
deleted file mode 100644
index 5eafa1a..0000000
--- a/groovy/modules/grails/src/grails/templates/webtest/tests/TestSuite.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-// Suite for all webtests in this application.
-
-import grails.util.WebTest
-
-class TestSuite extends WebTest {
-
-    static void main(args) {
-        new TestSuite().runTests()
-    }
-
-    /**
-        Scan trough all test files and call their suite method.
-    */
-    void suite() {
-        def scanner = ant.fileScanner {
-            fileset(dir:'webtest/tests', includes:'**/*Test.groovy')
-        }
-        for (file in scanner) {
-            def test = getClass().classLoader.parseClass(file).newInstance()
-            test.ant = ant
-            test.configMap = configMap
-            test.suite()
-        }
-    }
-
-/*
-    You can alternatively define your suite manually by calling a MyTest.groovy like so
-    instead of the suite impl. above:
-
-        new MyTest(ant:ant, configMap:configMap).suite()
-        new MyOtherTest(ant:ant, configMap:configMap).suite()
-
-    This gives you more fine-grained control over the sequence of test execution.
-*/
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/DomainClassMethods.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/DomainClassMethods.java
deleted file mode 100644
index 5d9b865..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/DomainClassMethods.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.metaclass;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethods;
-import org.codehaus.groovy.grails.commons.metaclass.WeakGenericDynamicProperty;
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
-import org.codehaus.groovy.grails.orm.hibernate.metaclass.*;
-import org.codehaus.groovy.grails.validation.metaclass.ConstraintsDynamicProperty;
-import org.hibernate.SessionFactory;
-import org.springframework.validation.Errors;
-
-import java.beans.IntrospectionException;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public class DomainClassMethods extends AbstractDynamicMethods {
-
-	public static final String HAS_ERRORS_PROPERTY = "hasErrors";
-	public static final String ERRORS_PROPERTY = "errors";
-
-	public DomainClassMethods(GrailsApplication application, Class theClass, SessionFactory sessionFactory, ClassLoader classLoader)
-			throws IntrospectionException {
-		super(theClass);
-		// dynamic methods
-		addDynamicMethodInvocation(new SavePersistentMethod(sessionFactory, classLoader,application));
-		addDynamicMethodInvocation(new DeletePersistentMethod(sessionFactory, classLoader));
-		addDynamicMethodInvocation(new RefreshPersistentMethod(sessionFactory, classLoader));		
-		addDynamicMethodInvocation(new ValidatePersistentMethod(sessionFactory, classLoader, application ));
-        addDynamicMethodInvocation(new AbstractDynamicMethodInvocation(HAS_ERRORS_PROPERTY) {
-            public Object invoke(Object target, Object[] arguments) {
-                Errors errors = (Errors)getDynamicProperty(ERRORS_PROPERTY).get(target);
-                if(errors == null || !errors.hasErrors()) {
-                    return new Boolean(false);
-                }
-                else {
-                    return new Boolean(true);
-                }
-            }
-        });
-
-        // static methods
-		addStaticMethodInvocation(new FindAllPersistentMethod(sessionFactory, classLoader));
-		addStaticMethodInvocation(new FindAllByPersistentMethod(application,sessionFactory, classLoader));
-		addStaticMethodInvocation(new FindByPersistentMethod(application,sessionFactory, classLoader));
-		addStaticMethodInvocation(new FindPersistentMethod(sessionFactory, classLoader));
-		addStaticMethodInvocation(new ListOrderByPersistentMethod(sessionFactory, classLoader));
-		addStaticMethodInvocation(new ListPersistentMethod(sessionFactory, classLoader));
-		addStaticMethodInvocation(new FindWherePersistentMethod(sessionFactory, classLoader));
-		addStaticMethodInvocation(new GetPersistentMethod(application,sessionFactory, classLoader));
-        addStaticMethodInvocation(new ExistsPersistentMethod(application,sessionFactory, classLoader));
-        addStaticMethodInvocation(new CountPersistentMethod(sessionFactory, classLoader));
-        addStaticMethodInvocation(new CreateCriteriaPersistentMethod(sessionFactory, classLoader));
-		
-		// add dynamic properties
-		addDynamicProperty( new SetPropertiesDynamicProperty() );
-		addDynamicProperty( new ConstraintsDynamicProperty() );		
-		addDynamicProperty( new WeakGenericDynamicProperty(ERRORS_PROPERTY, Errors.class,null,false) );
-		
-	}
-	
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/SetPropertiesDynamicProperty.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/SetPropertiesDynamicProperty.java
deleted file mode 100644
index d242b1a..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/metaclass/SetPropertiesDynamicProperty.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.metaclass;
-
-import groovy.lang.MissingPropertyException;
-import ognl.NoSuchPropertyException;
-import ognl.Ognl;
-import ognl.OgnlException;
-import org.apache.commons.collections.BeanMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicProperty;
-import org.codehaus.groovy.grails.web.binding.GrailsDataBinder;
-import org.codehaus.groovy.grails.web.metaclass.GrailsParameterMap;
-import org.springframework.web.bind.ServletRequestDataBinder;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * A dynamic property that uses a Map of OGNL expressions to sets properties on the target object
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class SetPropertiesDynamicProperty extends AbstractDynamicProperty {
-
-	private static final Log LOG = LogFactory.getLog( SetPropertiesDynamicProperty.class );
-	
-	private static final String PROPERTY_NAME = "properties";
-	
-
-	public SetPropertiesDynamicProperty() {
-		super(PROPERTY_NAME);
-	}
-
-	/**
-	 * @return A org.apache.commons.collections.BeanMap instance
-	 */
-	public Object get(Object object) {				
-		return new BeanMap(object);
-	}
-
-	/**
-	 * Sets the property on the specified object with the specified value. The
-	 * value is expected to be a Map containing OGNL expressions for the keys
-	 * and objects for the values.
-	 * 
-	 * @param object The target object
-	 * @param newValue The value to set
-	 */
-	public void set(Object object, Object newValue) {
-		if(newValue == null)
-			return;
-		
-		if(newValue instanceof GrailsParameterMap) {
-			GrailsParameterMap parameterMap = (GrailsParameterMap)newValue;
-			HttpServletRequest request = parameterMap.getRequest();
-			ServletRequestDataBinder dataBinder = GrailsDataBinder.createBinder(object, object.getClass().getName(),request); 
-			dataBinder.bind(request);
-		}
-		else if(newValue instanceof Map) {
-			
-			Map propertyMap = (Map)newValue;
-
-			for (Iterator i = propertyMap.keySet().iterator(); i.hasNext();) {
-				String propertyName = (String) i.next();
-				Object propertyValue = propertyMap.get(propertyName);				
-				// if null skip
-				if(propertyValue == null)
-					continue;
-				
-				if(LOG.isDebugEnabled())
-					LOG.debug("Attempting to set property '"+propertyName+"' to value '"+propertyValue+"' on instance '"+object+"'");
-				
-				try {
-					Ognl.setValue(propertyName,object,propertyValue);
-				} catch (NoSuchPropertyException nspe) {
-					if(LOG.isDebugEnabled())
-						LOG.debug("Unable to set property '"+propertyName+"' to value '"+propertyValue+"' for object '"+object+"' property doesn't exist." + nspe.getMessage());					
-				}catch (OgnlException e) {
-					if(LOG.isDebugEnabled())
-						LOG.debug("OGNL error attempt to set '"+propertyName+"' to value '"+propertyValue+"' for object '"+object+"':" + e.getMessage(),e);
-				} 
-			}
-			
-		}
-		else {
-			throw new MissingPropertyException(PROPERTY_NAME,object.getClass());
-		}
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/ConfigurableLocalSessionFactoryBean.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/ConfigurableLocalSessionFactoryBean.java
deleted file mode 100644
index b42f1ad..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/ConfigurableLocalSessionFactoryBean.java
+++ /dev/null
@@ -1,107 +0,0 @@
-
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration;
-import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfiguration;
-import org.hibernate.HibernateException;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
-import org.springframework.orm.hibernate3.LocalSessionFactoryBean;
-import org.springframework.beans.BeanUtils;
-
-import java.io.IOException;
-
-/**
- * A SessionFactory bean that allows the configuration class to be changed and customise for usage within Grails
- *
- * @author Graeme Rocher
- * @since 07-Jul-2005
- */
-public class ConfigurableLocalSessionFactoryBean extends
-		LocalSessionFactoryBean {
-
-	
-	private ClassLoader classLoader = null;
-	private GrailsApplication grailsApplication;
-    private Class configClass = DefaultGrailsDomainConfiguration.class;
-
-    public void setConfigClass(Class configClass) {
-        this.configClass = configClass;
-    }
-
-    /**
-	 * 
-	 */
-	public ConfigurableLocalSessionFactoryBean() {
-		super();		
-	}
-	
-	/**
-	 * @return Returns the grailsApplication.
-	 */
-	public GrailsApplication getGrailsApplication() {
-		return grailsApplication;
-	}
-
-	/**
-	 * @param grailsApplication The grailsApplication to set.
-	 */
-	public void setGrailsApplication(GrailsApplication grailsApplication) {
-		this.grailsApplication = grailsApplication;
-	}
-	
-	/**
-	 * Overrides default behaviour to allow for a configurable configuration class 
-	 */
-	protected Configuration newConfiguration() {
-		GrailsDomainConfiguration config = (GrailsDomainConfiguration)BeanUtils.instantiateClass(configClass);
-		config.setGrailsApplication(grailsApplication);
-        // we set this to false as Spring might wrap the session factory in a transactional proxy
-        // if configured as such
-        config.setConfigureDynamicMethods(false);
-        return (Configuration)config;
-	}
-
-
-	public void setClassLoader(ClassLoader classLoader) {
-		this.classLoader = classLoader;
-	}
-	
-	public void afterPropertiesSet() throws IllegalArgumentException,
-			HibernateException, IOException {
-		ClassLoader originalClassLoader = null;
-		if (this.classLoader != null) {
-			originalClassLoader = Thread.currentThread().getContextClassLoader();
-			Thread.currentThread().setContextClassLoader(this.classLoader);
-		}
-        super.afterPropertiesSet();
-
-        SessionFactory sf = (SessionFactory)getObject();
-        if(sf != null) {
-            Configuration c = getConfiguration();
-            if(c instanceof GrailsDomainConfiguration) {
-                GrailsDomainConfiguration gc = (GrailsDomainConfiguration)c;
-                gc.configureDynamicMethods(sf);
-            }
-        }
-        if (originalClassLoader != null) {
-			Thread.currentThread().setContextClassLoader(originalClassLoader);
-		}
-	}
-}
-
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClass.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClass.java
deleted file mode 100644
index 80b26a9..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClass.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.orm.hibernate;
-
-import org.codehaus.groovy.grails.commons.AbstractGrailsClass;
-import org.codehaus.groovy.grails.commons.ExternalGrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.codehaus.groovy.grails.orm.hibernate.validation.GrailsDomainClassValidator;
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-import org.hibernate.SessionFactory;
-import org.hibernate.EntityMode;
-import org.hibernate.engine.SessionFactoryImplementor;
-import org.hibernate.metadata.ClassMetadata;
-import org.hibernate.type.Type;
-import org.hibernate.type.AssociationType;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.validation.Validator;
-
-import java.util.*;
-
-/**
- * An implementation of the GrailsDomainClass interface that allows Classes mapped in
- * Hibernate to integrate with Grails' validation, dynamic methods etc. seamlessly
- *
- * @author Graeme Rocher
- * @since 18-Feb-2006
- */
-public class GrailsHibernateDomainClass extends AbstractGrailsClass implements ExternalGrailsDomainClass {
-    private static final String HIBERNATE = "hibernate";
-    private GrailsHibernateDomainClassProperty identifier;
-    private GrailsDomainClassProperty[] properties;
-    private Map propertyMap = new HashMap();
-    private Validator validator;
-
-    /**
-     * <p>Contructor to be used by all child classes to create a
-     * new instance and get the name right.
-     *
-     * @param clazz        the Grails class
-     */
-    public GrailsHibernateDomainClass(Class clazz, SessionFactory sessionFactory,ClassMetadata metaData) {
-        super(clazz, "");
-
-        BeanWrapper bean = getReference();
-        // configure identity property
-        String ident = metaData.getIdentifierPropertyName();
-        Class identType = bean.getPropertyType(ident);
-        this.identifier = new GrailsHibernateDomainClassProperty(this,ident);
-        this.identifier.setIdentity(true);
-        this.identifier.setType(identType);
-
-        propertyMap.put(ident,identifier);
-
-        // configure remaining properties
-        String[] propertyNames = metaData.getPropertyNames();
-        for (int i = 0; i < propertyNames.length; i++) {
-            String propertyName = propertyNames[i];
-            if(!propertyName.equals(ident)) {
-                GrailsHibernateDomainClassProperty prop = new GrailsHibernateDomainClassProperty(this,propertyName);
-                prop.setType(bean.getPropertyType(propertyName));
-                Type hibernateType = metaData.getPropertyType(propertyName);
-                // if its an association type
-                if(hibernateType.isAssociationType()) {
-                    prop.setAssociation(true);
-                    // get the associated type from the session factory
-                    // and set it on the property
-                    AssociationType assType = (AssociationType)hibernateType;
-                    String associatedEntity = assType.getAssociatedEntityName((SessionFactoryImplementor)sessionFactory);
-                    ClassMetadata associatedMetaData = sessionFactory.getClassMetadata(associatedEntity);
-                    prop.setRelatedClassType(associatedMetaData.getMappedClass(EntityMode.POJO));
-                    // configure type of relationship
-                    if(hibernateType.isCollectionType()) {
-                        prop.setOneToMany(true);
-                    }
-                    else if(hibernateType.isEntityType()) {
-                        prop.setManyToOne(true);
-                        // might not really be true, but for our purposes this is ok
-                        prop.setOneToOne(true);
-                    }
-                }
-                propertyMap.put(propertyName,prop);
-            }
-        }
-
-        this.properties = (GrailsDomainClassProperty[])propertyMap.values().toArray(new GrailsDomainClassProperty[propertyMap.size()]);
-    }
-
-    public boolean isOwningClass(Class domainClass) {
-        throw new UnsupportedOperationException("Method 'isOwningClass' is not supported by implementation");
-    }
-
-    public GrailsDomainClassProperty[] getProperties() {
-        return this.properties;
-    }
-
-    public GrailsDomainClassProperty[] getPersistantProperties() {
-        return this.properties;
-    }
-
-    public GrailsDomainClassProperty getIdentifier() {
-        return this.identifier;
-    }
-
-    public GrailsDomainClassProperty getVersion() {
-        throw new UnsupportedOperationException("Method 'getVersion' is not supported by implementation");
-    }
-
-    public GrailsDomainClassProperty getPropertyByName(String name) {
-        return (GrailsDomainClassProperty)propertyMap.get(name);
-    }
-
-    public String getFieldName(String propertyName) {
-        throw new UnsupportedOperationException("Method 'getFieldName' is not supported by implementation");
-    }
-
-    public String getTableName() {
-        throw new UnsupportedOperationException("Method 'getTableName' is not supported by implementation");
-    }
-
-    public boolean isOneToMany(String propertyName) {
-        GrailsDomainClassProperty prop = getPropertyByName(propertyName);
-        if(prop == null)
-            return false;
-        else {
-            return prop.isOneToMany();
-        }
-    }
-
-    public boolean isManyToOne(String propertyName) {
-        GrailsDomainClassProperty prop = getPropertyByName(propertyName);
-        if(prop == null)
-            return false;
-        else {
-            return prop.isManyToOne();
-        }
-    }
-
-    public boolean isBidirectional(String propertyName) {
-        throw new UnsupportedOperationException("Method 'isBidirectional' is not supported by implementation");
-    }
-
-    public Class getRelatedClassType(String propertyName) {
-        GrailsDomainClassProperty prop = getPropertyByName(propertyName);
-        if(prop == null)
-            return null;
-        else {
-            return prop.getReferencedPropertyType();
-        }
-    }
-
-    public Map getConstrainedProperties() {
-        if(getReference().isReadableProperty(GrailsDomainClassProperty.CONSTRAINTS)) {
-            List constraintsList = (List)getPropertyValue(GrailsDomainClassProperty.CONSTRAINTS,List.class);
-            if(constraintsList != null) {
-                Map constraintsMap = new HashMap();
-                for (Iterator i = constraintsList.iterator(); i.hasNext();) {
-                    ConstrainedProperty cp = (ConstrainedProperty) i.next();
-                    constraintsMap.put(cp.getPropertyName(),cp);
-                }
-                return constraintsMap;
-            }
-            else {
-               Map constraintsMap = (Map)getPropertyValue(GrailsDomainClassProperty.CONSTRAINTS,Map.class);
-               if(constraintsMap == null) {
-                   return Collections.EMPTY_MAP;
-               }
-               else {
-                    return constraintsMap;
-               }
-            }
-        }
-        return Collections.EMPTY_MAP;
-    }
-
-    public Validator getValidator() {
-        if(this.validator == null) {
-            GrailsDomainClassValidator gdcv = new GrailsDomainClassValidator();
-            gdcv.setDomainClass(this);
-            this.validator = gdcv;
-        }
-        return this.validator;
-    }
-
-    public void setValidator(Validator validator) {
-        this.validator = validator;
-    }
-
-    public String getMappedBy() {
-        return HIBERNATE;
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClassProperty.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClassProperty.java
deleted file mode 100644
index d0f3ee9..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateDomainClassProperty.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.orm.hibernate;
-
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-
-/**
- * An implementation of the GrailsDomainClassProperty interface that allows Classes mapped in
- * Hibernate to integrate with Grails' validation, dynamic methods etc. seamlessly
- *
- * @author Graeme Rocher
- * @since 18-Feb-2006
- */
-public class GrailsHibernateDomainClassProperty implements GrailsDomainClassProperty {
-    private GrailsHibernateDomainClass domainClass;
-
-    private String name;
-    private String naturalName;
-    private Class type;
-    private boolean identity;
-    private boolean oneToOne;
-    private boolean manyToOne;
-    private boolean association;
-    private boolean oneToMany;
-    private boolean manyToMany;
-    private boolean bidirectional;
-    private boolean optional;
-    private Class relatedClassType;
-    private GrailsDomainClass referencedDomainClass;
-    private GrailsDomainClassProperty otherSide;
-
-
-    public GrailsHibernateDomainClassProperty(GrailsHibernateDomainClass domainClass, String propertyName) {
-        this.domainClass = domainClass;
-        this.name = propertyName;
-        this.naturalName = GrailsClassUtils.getNaturalName(propertyName);
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public Class getType() {
-        return this.type;
-    }
-
-    public void setType(Class type) {
-        this.type = type;
-    }
-
-    public String getTypePropertyName() {
-        return GrailsClassUtils.getPropertyNameRepresentation(this.type);
-    }
-
-    public GrailsDomainClass getDomainClass() {
-        return this.domainClass;
-    }
-
-    public boolean isPersistant() {
-        return true;
-    }
-
-    public String getNaturalName() {
-        return this.naturalName;
-    }
-
-    public void setReferencedDomainClass(GrailsDomainClass referencedGrailsDomainClass) {
-        this.referencedDomainClass =   referencedGrailsDomainClass;
-    }
-
-    public void setOtherSide(GrailsDomainClassProperty referencedProperty) {
-        this.otherSide = referencedProperty;
-    }
-
-    public GrailsDomainClassProperty getOtherSide() {
-        return this.otherSide;
-    }
-
-    public Class getReferencedPropertyType() {
-        return this.relatedClassType;
-    }
-
-    public boolean isIdentity() {
-        return identity;
-    }
-
-    public void setIdentity(boolean identity) {
-        this.identity = identity;
-    }
-
-    public boolean isOptional() {
-        return optional;
-    }
-
-    public void setOptional(boolean optional) {
-        this.optional = optional;
-    }
-
-    public boolean isOneToOne() {
-        return oneToOne;
-    }
-
-    public void setOneToOne(boolean oneToOne) {
-        this.oneToOne = oneToOne;
-    }
-
-    public boolean isManyToOne() {
-        return manyToOne;
-    }
-
-    public void setManyToOne(boolean manyToOne) {
-        this.manyToOne = manyToOne;
-    }
-
-    public boolean isAssociation() {
-        return association;
-    }
-
-    public void setAssociation(boolean association) {
-        this.association = association;
-    }
-
-    public boolean isOneToMany() {
-        return oneToMany;
-    }
-
-    public void setOneToMany(boolean oneToMany) {
-        this.oneToMany = oneToMany;
-    }
-
-    public boolean isManyToMany() {
-        return manyToMany;
-    }
-
-    public void setManyToMany(boolean manyToMany) {
-        this.manyToMany = manyToMany;
-    }
-
-    public boolean isBidirectional() {
-        return bidirectional;
-    }
-
-    public String getFieldName() {
-        throw new UnsupportedOperationException("Method 'getFieldName' is not supported by implementation");
-    }
-
-    public void setBidirectional(boolean bidirectional) {
-        this.bidirectional = bidirectional;
-    }
-
-    public GrailsDomainClass getReferencedDomainClass() {
-        return this.referencedDomainClass;
-    }
-
-
-    public void setRelatedClassType(Class relatedType) {
-        this.relatedClassType = relatedType;
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/DefaultGrailsDomainConfiguration.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/DefaultGrailsDomainConfiguration.java
deleted file mode 100644
index 12dc028..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/DefaultGrailsDomainConfiguration.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.cfg;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.hibernate.SessionFactory;
-import org.hibernate.EntityMode;
-import org.hibernate.metadata.ClassMetadata;
-import org.hibernate.cfg.Configuration;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Collection;
-import java.beans.IntrospectionException;
-
-/**
- * Creates runtime configuration mappings for the Grails domain classes
- * based on the work done in the Hibernate Annotations project
- * 
- * @author Graeme Rocher
- * @since 06-Jul-2005
- */
-public class DefaultGrailsDomainConfiguration extends Configuration implements GrailsDomainConfiguration {
-
-    private static final Log LOG  = LogFactory.getLog(DefaultGrailsDomainConfiguration.class);
-    /**
-     *
-     */
-    private static final long serialVersionUID = -7115087342689305517L;
-    private GrailsApplication grailsApplication;
-    private Set domainClasses;
-    private boolean configLocked;
-    private boolean configureDynamicMethods = true;
-
-    /**
-     *
-     */
-    public DefaultGrailsDomainConfiguration() {
-        super();
-        this.domainClasses = new HashSet();
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfiguration#addDomainClass(org.codehaus.groovy.grails.commons.GrailsDomainClass)
-      */
-    public GrailsDomainConfiguration addDomainClass( GrailsDomainClass domainClass ) {
-        if(domainClass.getMappedBy().equalsIgnoreCase( GrailsDomainClass.GORM )) {
-            this.domainClasses.add(domainClass);
-        }
-
-        return this;
-    }
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfiguration#setGrailsApplication(org.codehaus.groovy.grails.commons.GrailsApplication)
-      */
-    public void setGrailsApplication(GrailsApplication application) {
-        this.grailsApplication = application;
-        if(this.grailsApplication != null) {
-            GrailsDomainClass[] existingDomainClasses = this.grailsApplication.getGrailsDomainClasses();
-            for(int i = 0; i < existingDomainClasses.length;i++) {
-                addDomainClass(existingDomainClasses[i]);
-            }
-        }
-    }
-
-
-
-
-    /* (non-Javadoc)
-      * @see org.hibernate.cfg.Configuration#buildSessionFactory()
-      */
-    public SessionFactory buildSessionFactory() throws HibernateException {
-
-        SessionFactory sessionFactory =  super.buildSessionFactory();
-        if(configureDynamicMethods) {
-            configureDynamicMethods(sessionFactory);
-        }
-        return sessionFactory;
-    }
-
-    public void configureDynamicMethods(SessionFactory sf) {
-        GrailsDomainConfigurationUtil.configureDynamicMethods(sf,this.grailsApplication);
-    }
-
-    public void setConfigureDynamicMethods(boolean shouldConfigure) {
-        this.configureDynamicMethods = shouldConfigure;
-    }
-
-    /**
-     *  Overrides the default behaviour to including binding of Grails
-     *  domain classes
-     */
-    protected void secondPassCompile() throws MappingException {
-        if (configLocked) {
-            return;
-        }
-        // set the class loader to load Groovy classes
-        if(this.grailsApplication != null)
-            Thread.currentThread().setContextClassLoader( this.grailsApplication.getClassLoader() );
-        // do Grails class configuration
-        for(Iterator i = this.domainClasses.iterator();i.hasNext();) {
-            GrailsDomainClass domainClass = (GrailsDomainClass)i.next();
-
-            GrailsDomainBinder.bindClass(domainClass, super.createMappings());
-        }
-
-        // call super
-        super.secondPassCompile();
-        this.configLocked = true;
-    }
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java
deleted file mode 100644
index d0b32a8..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainBinder.java
+++ /dev/null
@@ -1,665 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.cfg;
-
-
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.hibernate.FetchMode;
-import org.hibernate.MappingException;
-import org.hibernate.cfg.Mappings;
-import org.hibernate.cfg.SecondPass;
-import org.hibernate.id.PersistentIdentifierGenerator;
-import org.hibernate.mapping.*;
-import org.hibernate.mapping.Collection;
-import org.hibernate.util.StringHelper;
-
-import java.util.*;
-import java.util.Map;
-import java.util.Set;
-
-
-
-/**
- * Handles the binding Grails domain classes and properties to the Hibernate runtime meta model.
- * Based on the HbmBinder code in Hibernate core and influenced by AnnotationsBinder.
- * 
- * @author Graeme Rocher
- * @since 06-Jul-2005
- */
-public final class GrailsDomainBinder {
-	
-	private static final String FOREIGN_KEY_SUFFIX = "_ID";
-	private static final Log LOG = LogFactory.getLog( GrailsDomainBinder.class );
-	
-	/**
-	 * A Collection type, for the moment only Set is supported
-	 * 
-	 * @author Graeme
-	 *
-	 */
-	abstract static class CollectionType {
-		
-		private Class clazz;
-
-		public abstract Collection create(GrailsDomainClassProperty property, PersistentClass owner,
-				Mappings mappings) throws MappingException;
-
-		CollectionType(Class clazz) {
-			this.clazz = clazz;
-		}
-
-		public String toString() {
-			return clazz.getName();
-		}
-		
-		private static CollectionType SET = new CollectionType(Set.class) {
-
-			public Collection create(GrailsDomainClassProperty property, PersistentClass owner, Mappings mappings) throws MappingException {
-				org.hibernate.mapping.Set coll = new org.hibernate.mapping.Set(owner);
-				coll.setCollectionTable(owner.getTable());
-				bindCollection( property, coll, owner, mappings );
-				return coll;
-			}
-
-			
-		};
-		
-		private static final Map INSTANCES = new HashMap();
-		
-		static {
-			INSTANCES.put( SET.toString(), SET );			
-		}
-		public static CollectionType collectionTypeForClass(Class clazz) {
-			return (CollectionType)INSTANCES.get( clazz.getName() );
-		}
-	}
-
-	
-	/**
-	 * Second pass class for grails relationships. This is required as all
-	 * persistent classes need to be loaded in the first pass and then relationships
-	 * established in the second pass compile
-	 * 
-	 * @author Graeme
-	 *
-	 */
-	static class GrailsCollectionSecondPass implements SecondPass {
-
-		private static final long serialVersionUID = -5540526942092611348L;
-		private GrailsDomainClassProperty property;
-		private Mappings mappings;
-		private Collection collection;
-
-		public GrailsCollectionSecondPass(GrailsDomainClassProperty property, Mappings mappings, Collection coll) {
-			this.property = property;
-			this.mappings = mappings;
-			this.collection = coll;
-		}
-
-		public void doSecondPass(Map persistentClasses, Map inheritedMetas) throws MappingException {
-			bindCollectionSecondPass( this.property, mappings, persistentClasses, collection,inheritedMetas );			
-		}
-
-	}
-
-	private static void bindCollectionSecondPass(GrailsDomainClassProperty property, Mappings mappings, Map persistentClasses, Collection collection, Map inheritedMetas) {
-
-		PersistentClass associatedClass = null;
-		// Configure one-to-many
-		if(collection.isOneToMany()) {
-			OneToMany oneToMany = (OneToMany)collection.getElement();
-			String associatedClassName = oneToMany.getReferencedEntityName();
-			
-			associatedClass = (PersistentClass)persistentClasses.get(associatedClassName);
-			// if there is no persistent class for the association throw
-			// exception
-			if(associatedClass == null) {
-				throw new MappingException( "Association references unmapped class: " + oneToMany.getReferencedEntityName() );
-			}
-			
-			oneToMany.setAssociatedClass( associatedClass );
-			collection.setCollectionTable( associatedClass.getTable() );
-			collection.setLazy(true);
-			
-			LOG.info( "Mapping collection: "
-					+ collection.getRole()
-					+ " -> "
-					+ collection.getCollectionTable().getName() );
-			
-		}
-		
-		// setup the primary key references
-		KeyValue keyValue;
-		
-		String propertyRef = collection.getReferencedPropertyName();
-		// this is to support mapping by a property
-		if(propertyRef == null) {
-			keyValue = collection.getOwner().getIdentifier();
-		}
-		else {
-			keyValue = (KeyValue)collection.getOwner().getProperty( propertyRef ).getValue();
-		}
-		
-		DependantValue key = new DependantValue(collection.getCollectionTable(), keyValue);		
-		key.setTypeName(null);
-		
-//		
-		if(property.isBidirectional()) {
-			GrailsDomainClassProperty otherSide = property.getOtherSide();
-			if(otherSide.isManyToOne()) {
-				collection.setInverse(true);
-				Iterator mappedByColumns = associatedClass.getProperty( otherSide.getName() ).getValue().getColumnIterator();
-				while(mappedByColumns.hasNext()) {
-					Column column = (Column)mappedByColumns.next();
-					linkValueUsingAColumnCopy(otherSide,column,key);
-				}
-			}			
-		}
-		else {
-			bindSimpleValue( property,key,mappings );
-		}				
-		collection.setKey( key );
-		// make required and non-updateable
-		key.setNullable(false);
-		key.setUpdateable(false);
-		
-		// if we have a many-to-many
-		if(property.isManyToMany()) {
-			ManyToOne element = new ManyToOne( collection.getCollectionTable() );
-			collection.setElement(element);
-			bindManyToOne(property,element, mappings);
-		}
-		else if ( property.isOneToMany() && !property.isBidirectional() ) {
-				// for non-inverse one-to-many, with a not-null fk, add a backref!
-			OneToMany oneToMany = (OneToMany) collection.getElement();
-				String entityName = ( oneToMany ).getReferencedEntityName();
-				PersistentClass referenced = mappings.getClass( entityName );
-				Backref prop = new Backref();
-				prop.setName( '_' + property.getName() + "Backref" );
-				prop.setUpdateable( true );
-				prop.setInsertable( true );
-				prop.setCollectionRole( collection.getRole() );
-				prop.setValue( collection.getKey() );
-				prop.setOptional( property.isOptional() );
-				referenced.addProperty( prop );
-		}		
-	}		
-	
-	private static void linkValueUsingAColumnCopy(GrailsDomainClassProperty prop, Column column, DependantValue key) {
-		Column mappingColumn = new Column();
-		mappingColumn.setName(column.getName());
-		mappingColumn.setLength(column.getLength());
-		mappingColumn.setNullable(!prop.isOptional());
-		mappingColumn.setSqlType(column.getSqlType());		
-		
-		mappingColumn.setValue(key);
-		key.addColumn( mappingColumn );
-		key.getTable().addColumn( mappingColumn );		
-	}
-
-	/**
-	 * First pass to bind collection to Hibernate metamodel, sets up second pass
-	 * 
-	 * @param property The GrailsDomainClassProperty instance
-	 * @param collection The collection
-	 * @param owner The owning persistent class
-	 * @param mappings The Hibernate mappings instance
-	 */
-	private static void bindCollection(GrailsDomainClassProperty property, Collection collection, PersistentClass owner, Mappings mappings) {
-		
-		// set role
-		collection.setRole( StringHelper.qualify( property.getDomainClass().getFullName() , property.getName() ) );
-		
-		// TODO: add code to configure optimistic locking
-		
-		// TODO: configure fetch strategy
-		collection.setFetchMode( FetchMode.DEFAULT );
-		
-		// if its a one-to-many mapping
-		if(property.isOneToMany()) {
-			
-			OneToMany oneToMany = new OneToMany( collection.getOwner() );
-			collection.setElement( oneToMany );
-			
-			bindOneToMany( property, oneToMany, mappings );			
-		}
-		else {
-			String tableName = property.getReferencedDomainClass().getName();
-			
-			Table table = mappings.addTable(
-								mappings.getSchemaName(),
-								mappings.getCatalogName(),
-								tableName,
-								null,
-								false
-							);
-			collection.setCollectionTable(table);
-		}
-		
-		// setup second pass
-		mappings.addSecondPass( new GrailsCollectionSecondPass(property, mappings, collection) );
-		
-	}
-	/**
-	 * Binds a Grails domain class to the Hibernate runtime meta model
-	 * @param domainClass The domain class to bind
-	 * @param mappings The existing mappings
-	 * @throws MappingException Thrown if the domain class uses inheritance which is not supported
-	 */
-	public static void bindClass(GrailsDomainClass domainClass, Mappings mappings)
-		throws MappingException {		
-		if(domainClass.getClazz().getSuperclass() == java.lang.Object.class) {
-			bindRoot(domainClass, mappings);
-		}
-		else {
-			throw new MappingException("Grails domain classes do not support inheritance");				
-		}		
-	}
-
-	/**
-	 * Binds the specified persistant class to the runtime model based on the 
-	 * properties defined in the domain class
-	 * @param domainClass The Grails domain class
-	 * @param persistentClass The persistant class
-	 * @param mappings Existing mappings
-	 */
-	private static void bindClass(GrailsDomainClass domainClass, PersistentClass persistentClass, Mappings mappings) {
-		
-		// set lazy loading for now
-		persistentClass.setLazy(true);
-		persistentClass.setEntityName(domainClass.getFullName());
-		persistentClass.setProxyInterfaceName( domainClass.getFullName() );
-		persistentClass.setClassName(domainClass.getFullName());
-		// set dynamic insert to false
-		persistentClass.setDynamicInsert(false);
-		// set dynamic update to false
-		persistentClass.setDynamicUpdate(false);
-		// set select before update to false
-		persistentClass.setSelectBeforeUpdate(false);
-		
-		// add import to mappings
-		if ( mappings.isAutoImport() && persistentClass.getEntityName().indexOf( '.' ) > 0 ) {
-			mappings.addImport( persistentClass.getEntityName(), StringHelper.unqualify( persistentClass
-				.getEntityName() ) );
-		}		
-	}
-
-	
-	/**
-	 * Binds a root class (one with no super classes) to the runtime meta model
-	 * based on the supplied Grails domain class
-	 * 
-	 * @param domainClass The Grails domain class 
-	 * @param mappings The Hibernate Mappings object
-	 */
-	public static void bindRoot(GrailsDomainClass domainClass, Mappings mappings) {
-		
-		RootClass root = new RootClass();
-		bindClass(domainClass, root, mappings);		
-		bindRootPersistentClassCommonValues(domainClass, root, mappings);
-		
-		mappings.addClass(root);
-	}
-
-
-	/**
-	 * Binds a persistent classes to the table representation and binds the class properties
-	 * 
-	 * @param domainClass
-	 * @param root
-	 * @param mappings
-	 */
-	private static void bindRootPersistentClassCommonValues(GrailsDomainClass domainClass, RootClass root, Mappings mappings) {
-		
-		// get the schema and catalog names from the configuration
-		String schema = mappings.getSchemaName();
-		String catalog = mappings.getCatalogName();
-		
-		// create the table 
-		Table table = mappings.addTable(
-				schema,
-				catalog,
-				domainClass.getTableName(),
-				null,
-				false
-		);
-		root.setTable(table);
-		
-		LOG.info( "[GrailsDomainBinder] Mapping Grails domain class: " + domainClass.getFullName() + " -> " + root.getTable().getName() );
-		
-		bindSimpleId( domainClass.getIdentifier(), root, mappings );
-		bindVersion( domainClass.getVersion(), root, mappings );
-		
-		root.createPrimaryKey();
-		
-		createClassProperties(domainClass,root,mappings);
-	}
-
-	/**
-	 * Creates and binds the properties for the specified Grails domain class and PersistantClass
-	 * and binds them to the Hibernate runtime meta model
-	 * 
-	 * @param domainClass The Grails domain class
-	 * @param persistentClass The Hibernate PersistentClass instance
-	 * @param mappings The Hibernate Mappings instance
-	 */
-	protected static void createClassProperties(GrailsDomainClass domainClass, PersistentClass persistentClass, Mappings mappings) {
-		
-		GrailsDomainClassProperty[] persistantProperties = domainClass.getPersistantProperties();
-		Table table = persistentClass.getTable();
-		
-		for(int i = 0; i < persistantProperties.length;i++) {
-			
-			GrailsDomainClassProperty currentGrailsProp = persistantProperties[i];
-			// TODO: Implement support for many from many relationships
-			if(currentGrailsProp.isManyToMany())
-				continue;
-/*			if(currentGrailsProp.isManyToOne() && currentGrailsProp.isBidirectional() ) {
-				GrailsDomainClassProperty otherSide = currentGrailsProp.getOtherSide();
-				if(otherSide.isOneToMany())
-					table = null;
-			}*/
-			
-			if(LOG.isTraceEnabled()) 
-				LOG.trace("[GrailsDomainBinder] Binding persistent property [" + currentGrailsProp.getName() + "]");
-			
-			Value value = null;
-			
-			// see if its a collection type
-			CollectionType collectionType = CollectionType.collectionTypeForClass( currentGrailsProp.getType() );
-			if(collectionType != null) {
-				// create collection
-				Collection collection = collectionType.create( 
-						currentGrailsProp,
-						persistentClass,
-						mappings
-				);
-				mappings.addCollection(collection);
-				value = collection;
-			}
-			// work out what type of relationship it is and bind value
-			else if ( currentGrailsProp.isManyToOne() ) {
-				value = new ManyToOne( table );
-				bindManyToOne( currentGrailsProp, (ManyToOne) value, mappings );
-			}
-			else if ( currentGrailsProp.isOneToOne()) {				
-				//value = new OneToOne( table, persistentClass );
-				//bindOneToOne( currentGrailsProp, (OneToOne)value, mappings );
-				value = new ManyToOne( table );
-				bindManyToOne( currentGrailsProp, (ManyToOne) value, mappings );
-			}	
-			else {
-				value = new SimpleValue( table );
-				bindSimpleValue( persistantProperties[i], (SimpleValue) value, mappings );
-			}
-
-			if(value != null) {
-				Property property = createProperty( value, persistentClass, persistantProperties[i], mappings );			
-				persistentClass.addProperty( property );						
-			}
-		}		
-	}
-
-	/**
-	 * Creates a persistant class property based on the GrailDomainClassProperty instance
-	 * 
-	 * @param value
-	 * @param persistentClass
-	 * @param mappings
-	 */
-	private static Property createProperty(Value value, PersistentClass persistentClass, GrailsDomainClassProperty grailsProperty, Mappings mappings) {
-		// set type
-		value.setTypeUsingReflection( persistentClass.getClassName(), grailsProperty.getName() );
-		
-		// if it is a ManyToOne or OneToOne relationship
-		if ( value instanceof ToOne ) {
-			ToOne toOne = (ToOne) value;
-			String propertyRef = toOne.getReferencedPropertyName();
-			if ( propertyRef != null ) {
-				// TODO: Hmm this method has package visibility. Why?
-				
-				//mappings.addUniquePropertyReference( toOne.getReferencedEntityName(), propertyRef );
-			}
-		}
-		else if( value instanceof Collection ) {
-			//Collection collection = (Collection)value;
-			//String propertyRef = collection.getReferencedPropertyName();
-		}
-		
-		if(value.getTable() != null)
-			value.createForeignKey();
-		
-		Property prop = new Property();
-		prop.setValue( value );
-		
-		bindProperty( grailsProperty, prop, mappings );
-		return prop;
-	}
-
-	/**
-	 * @param property
-	 * @param oneToOne
-	 * @param mappings
-	 */
-/*	private static void bindOneToOne(GrailsDomainClassProperty property, OneToOne oneToOne, Mappings mappings) {
-		
-		// bind value
-		bindSimpleValue(property, oneToOne, mappings );
-		// set foreign key type
-		oneToOne.setForeignKeyType( ForeignKeyDirection.FOREIGN_KEY_TO_PARENT );
-		
-		oneToOne.setForeignKeyName( property.getFieldName() + FOREIGN_KEY_SUFFIX );
-		
-		// TODO configure fetch settings
-		oneToOne.setFetchMode( FetchMode.DEFAULT );
-		// TODO configure lazy loading
-		oneToOne.setLazy(true);
-				
-		oneToOne.setPropertyName( property.getName() );
-		oneToOne.setReferencedEntityName( property.getType().getName() );
-		
-		
-	}*/
-
-	/**
-	 * @param currentGrailsProp
-	 * @param one
-	 * @param mappings
-	 */
-	private static void bindOneToMany(GrailsDomainClassProperty currentGrailsProp, OneToMany one, Mappings mappings) {
-		one.setReferencedEntityName( currentGrailsProp.getReferencedPropertyType().getName() );		
-	}
-
-	/**
-	 * Binds a many-to-one relationship to the 
-	 * @param property
-	 * @param manyToOne
-	 * @param mappings
-	 */
-	private static void bindManyToOne(GrailsDomainClassProperty property, ManyToOne manyToOne, Mappings mappings) {
-		
-		// TODO configure fetching
-		manyToOne.setFetchMode(FetchMode.DEFAULT);
-		// TODO configure lazy loading
-		manyToOne.setLazy(true);
-		
-		// bind column
-		bindSimpleValue(property,manyToOne,mappings);
-
-		// set referenced entity
-		manyToOne.setReferencedEntityName( property.getReferencedPropertyType().getName() );
-		manyToOne.setIgnoreNotFound(true);
-	}
-
-	/**
-	 * @param version
-	 * @param mappings
-	 */
-	private static void bindVersion(GrailsDomainClassProperty version, RootClass entity, Mappings mappings) {
-		
-		SimpleValue val = new SimpleValue( entity.getTable() );
-		bindSimpleValue( version, val, mappings);
-		
-		if ( !val.isTypeSpecified() ) {
-			val.setTypeName( "version".equals( version.getName() ) ? "integer" : "timestamp" );
-		}
-		Property prop = new Property();
-		prop.setValue( val );
-		
-		bindProperty( version, prop, mappings );
-		val.setNullValue( "undefined" );
-		entity.setVersion( prop );
-		entity.addProperty( prop );		
-	}
-
-	/**
-	 * @param identifier
-	 * @param entity
-	 * @param mappings
-	 */
-	private static void bindSimpleId(GrailsDomainClassProperty identifier, RootClass entity, Mappings mappings) {
-		
-		// create the id value
-		SimpleValue id = new SimpleValue(entity.getTable());
-		// set identifier on entity
-		entity.setIdentifier( id );
-		// configure generator strategy
-		id.setIdentifierGeneratorStrategy( "native" );
-		
-		Properties params = new Properties();
-
-		if ( mappings.getSchemaName() != null ) {
-			params.setProperty( PersistentIdentifierGenerator.SCHEMA, mappings.getSchemaName() );
-		}
-		if ( mappings.getCatalogName() != null ) {
-			params.setProperty( PersistentIdentifierGenerator.CATALOG, mappings.getCatalogName() );
-		}
-		id.setIdentifierGeneratorProperties(params);
-		
-		// bind value
-		bindSimpleValue(identifier, id, mappings );
-
-		// create property
-		Property prop = new Property();
-		prop.setValue(id);
-		
-		// bind property
-		bindProperty( identifier, prop, mappings );
-		// set identifier property
-		entity.setIdentifierProperty( prop );
-		
-		id.getTable().setIdentifierValue( id );
-
-	}
-
-	/**
-	 * @param grailsProperty
-	 * @param prop
-	 * @param mappings
-	 */
-	private static void bindProperty(GrailsDomainClassProperty grailsProperty, Property prop, Mappings mappings) {
-		// set the property name
-		prop.setName( grailsProperty.getName() );
-		
-		prop.setInsertable(true);
-		prop.setUpdateable(true);
-		prop.setPropertyAccessorName( mappings.getDefaultAccess() );
-		prop.setOptional( grailsProperty.isOptional() );
-		// set to cascade all for the moment
-		if(grailsProperty.isAssociation()) {
-            if(grailsProperty.isOneToMany()) {
-                prop.setCascade("all");
-            }
-            else if(grailsProperty.isManyToOne() || grailsProperty.isOneToOne()) {
-                GrailsDomainClass domainClass = grailsProperty.getDomainClass();
-                if(domainClass.isOwningClass(grailsProperty.getType())) {
-                    prop.setCascade("save-update");
-                }
-                else {
-                    GrailsDomainClassProperty otherSide = grailsProperty.getOtherSide();
-                    if(otherSide != null && otherSide.isOneToMany()) {
-                        prop.setCascade("save-update");
-                    }
-                    else {
-                        prop.setCascade("all");
-                    }
-                }
-            }
-        }
-
-        if(LOG.isTraceEnabled())
-            LOG.trace( "[GrailsDomainBinder] Set cascading strategy on property ["+grailsProperty.getName()+"] to ["+prop.getCascade()+"]" );
-        // lazy to true
-		prop.setLazy(true);
-		
-	}
-
-	/**
-w	 * Binds a simple value to the Hibernate metamodel. A simple value is 
-	 * any type within the Hibernate type system
-	 * 
-	 * @param grailsProp The grails domain class property
-	 * @param simpleValue The simple value to bind
-	 * @param mappings The Hibernate mappings instance
-	 */
-	private static void bindSimpleValue(GrailsDomainClassProperty grailsProp, SimpleValue simpleValue,Mappings mappings) {
-		// set type
-		simpleValue.setTypeName(grailsProp.getType().getName());
-		Table table = simpleValue.getTable();
-		Column column = new Column();
-		if(grailsProp.isManyToOne())
-			column.setNullable(false);
-		
-		column.setValue(simpleValue);
-		bindColumn(grailsProp, column);
-								
-		if(table != null) table.addColumn(column);
-		
-		simpleValue.addColumn(column);		
-	}
-	
-
-	/**
-	 * Binds a Column instance to the Hibernate meta model
-	 * @param grailsProp The Grails domain class property
-	 * @param column The column to bind
-	 */
-	private static void bindColumn(GrailsDomainClassProperty grailsProp, Column column) {						
-		if(grailsProp.isAssociation()) {
-			if(grailsProp.isOneToMany()) {							
-				column.setName( grailsProp.getDomainClass().getTableName() + FOREIGN_KEY_SUFFIX );
-			}
-			else if(grailsProp.isManyToOne()) {							
-				column.setName( grailsProp.getReferencedDomainClass().getTableName() + FOREIGN_KEY_SUFFIX );
-			}			
-			else {
-				column.setName( grailsProp.getFieldName() + FOREIGN_KEY_SUFFIX );
-			}			
-			column.setNullable(true);
-			
-		} else {
-			column.setNullable(grailsProp.isOptional());
-			column.setName(grailsProp.getFieldName());
-		}
-		if(LOG.isTraceEnabled()) 
-			LOG.trace("[GrailsDomainBinder] bound property [" + grailsProp + "] to column name ["+column.getName()+"]");		
-	}
-
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfiguration.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfiguration.java
deleted file mode 100644
index 74e874e..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfiguration.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.cfg;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.hibernate.SessionFactory;
-
-/**
- * @author Graeme Rocher
- * @since 04-Aug-2005
- */
-
-public interface GrailsDomainConfiguration {
-    /**
-     * Adds a domain class to the configuration
-     * @param domainClass
-     * @return this
-     */
-    public abstract GrailsDomainConfiguration addDomainClass(
-            GrailsDomainClass domainClass);
-
-    /**
-     * Sets the grails application instance
-     * @param application The grails application to use or null if none.
-     */
-    public abstract void setGrailsApplication(GrailsApplication application);
-
-    /**
-     * Configures Grails dynamic methods for the specified session factory
-      * @param sf
-     */
-    public abstract void configureDynamicMethods(SessionFactory sf);
-
-    /**
-     * Whether the configuration should configure dynamic methods (defaults to true)
-     * @param shouldConfigure
-     */
-    public abstract void setConfigureDynamicMethods(boolean shouldConfigure);
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfigurationUtil.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfigurationUtil.java
deleted file mode 100644
index 8818912..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsDomainConfigurationUtil.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.orm.hibernate.cfg;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.codehaus.groovy.grails.orm.hibernate.GrailsHibernateDomainClass;
-import org.hibernate.EntityMode;
-import org.hibernate.SessionFactory;
-import org.hibernate.metadata.ClassMetadata;
-
-import java.beans.IntrospectionException;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Utility methods used in configuring the Grails Hibernate integration
- *
- * @author Graeme Rocher
- * @since 18-Feb-2006
- */
-public class GrailsDomainConfigurationUtil {
-    private static final Log LOG = LogFactory.getLog(GrailsDomainConfigurationUtil.class);
-
-    /**
-     * Configures the relationships between domain classes after they have been all loaded.
-     * 
-     * @param domainClasses
-     * @param domainMap
-     */
-    public static void configureDomainClassRelationships(GrailsDomainClass[] domainClasses, Map domainMap) {
-
-        for (int i = 0; i < domainClasses.length; i++) {
-            GrailsDomainClassProperty[] props = domainClasses[i].getPersistantProperties();
-
-            for (int j = 0; j < props.length; j++) {
-                if(props[j].isAssociation()) {
-                    GrailsDomainClassProperty prop = props[j];
-                    GrailsDomainClass referencedGrailsDomainClass = (GrailsDomainClass)domainMap.get( props[j].getReferencedPropertyType().getName() );
-                    prop.setReferencedDomainClass(referencedGrailsDomainClass);
-
-                }
-            }
-
-        }
-
-        for (int i = 0; i < domainClasses.length; i++) {
-            GrailsDomainClassProperty[] props = domainClasses[i].getPersistantProperties();
-
-            for (int j = 0; j < props.length; j++) {
-                if(props[j].isAssociation()) {
-                    GrailsDomainClassProperty prop = props[j];
-                    GrailsDomainClassProperty[] referencedProperties =  prop.getReferencedDomainClass().getPersistantProperties();
-                    for (int k = 0; k < referencedProperties.length; k++) {
-                        if(referencedProperties[k].getReferencedPropertyType().equals( domainClasses[i].getClazz())) {
-                            prop.setOtherSide(referencedProperties[k]);
-                            break;
-                        }
-                    }
-                }
-            }
-
-        }
-    }
-    /**
-     * Configures dynamic methods on all Hibernate mapped domain classes
-     *
-     * @param sf The session factory instance
-     * @param application The grails application instance
-     */
-    public static void configureDynamicMethods(SessionFactory sf, GrailsApplication application) {
-        Collection classMetaData = sf.getAllClassMetadata().values();
-        for (Iterator i = classMetaData.iterator(); i.hasNext();) {
-            ClassMetadata cmd = (ClassMetadata) i.next();
-
-            Class persistentClass = cmd.getMappedClass(EntityMode.POJO);
-
-            // if its not a grails domain class and one written in java then add it
-            // to grails
-            if(application.getGrailsDomainClass(persistentClass.getName()) == null) {
-                    application.addDomainClass(new GrailsHibernateDomainClass(persistentClass, sf,cmd));
-            }
-            LOG.info("[GrailsDomainConfiguration] Registering dynamic methods on class ["+persistentClass+"]");
-            try {
-                new DomainClassMethods(application,persistentClass,sf,application.getClassLoader());
-            } catch (IntrospectionException e) {
-                LOG.warn("[GrailsDomainConfiguration] Introspection exception registering dynamic methods for ["+persistentClass+"]:" + e.getMessage(), e);
-            }
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/CouldNotDetermineHibernateDialectException.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/CouldNotDetermineHibernateDialectException.java
deleted file mode 100644
index 7c87605..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/CouldNotDetermineHibernateDialectException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.exceptions;
-
-/**
- * <p>Thrown when no Hibernate dialect could be found for a database name 
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class CouldNotDetermineHibernateDialectException extends
-		GrailsHibernateException {
-
-	public CouldNotDetermineHibernateDialectException() {
-		super();
-	}
-
-	public CouldNotDetermineHibernateDialectException(String arg0) {
-		super(arg0);
-	}
-
-	public CouldNotDetermineHibernateDialectException(String arg0,
-			Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public CouldNotDetermineHibernateDialectException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsHibernateException.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsHibernateException.java
deleted file mode 100644
index e5e2a47..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsHibernateException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-
-/**
- * <p>Base exception class for errors related to Hibernate configuration in Grails. 
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public abstract class GrailsHibernateException extends GrailsException {
-
-	public GrailsHibernateException() {
-		super();
-	}
-
-	public GrailsHibernateException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsHibernateException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsHibernateException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsQueryException.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsQueryException.java
deleted file mode 100644
index 3cd5a0d..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/exceptions/GrailsQueryException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-
-/**
- * <p>Base exception class for errors related to Domain class queries in Grails 
- * 
- * @author Graeme Rocher
- * @since Nov 22, 2005
- */
-public class GrailsQueryException extends GrailsException {
-
-	public GrailsQueryException() {
-		super();
-	}
-
-	public GrailsQueryException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsQueryException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsQueryException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractClausedStaticPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractClausedStaticPersistentMethod.java
deleted file mode 100644
index c9efcb8..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractClausedStaticPersistentMethod.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Criterion;
-import org.hibernate.criterion.Expression;
-
-/**
- * @author Graeme Rocher
- * @since 31-Aug-2005
- *
- */
-public abstract class AbstractClausedStaticPersistentMethod extends
-		AbstractStaticPersistentMethod {
-
-	private static final Log LOG = LogFactory.getLog(AbstractClausedStaticPersistentMethod.class);
-	/**
-	 * 
-	 * @author Graeme Rocher
-	 *
-	 */
-	protected abstract static class GrailsMethodExpression {
-		private static final String LESS_THAN = "LessThan";
-		private static final String LESS_THAN_OR_EQUAL = "LessThanOrEqual";
-		private static final String GREATER_THAN = "GreaterThan";
-		private static final String GREATER_THAN_OR_EQUAL = "GreaterThanOrEqual";
-		private static final String LIKE = "Like";
-		private static final String BETWEEN = "Between";
-		private static final String IS_NOT_NULL = "IsNotNull";
-		private static final String IS_NULL = "IsNull";
-		private static final String NOT = "Not";
-		private static final String EQUAL = "Equal";
-		private static final String NOT_EQUAL = "NotEqual";
-		
-		
-		protected String propertyName;
-		protected Object[] arguments;
-		protected int argumentsRequired;
-		protected boolean negation;
-		protected String type;
-		protected Class targetClass;
-		private GrailsApplication application;
-		
-		GrailsMethodExpression(GrailsApplication application,Class targetClass,String propertyName, String type,int argumentsRequired,boolean negation) {
-			this.application = application;
-			this.targetClass = targetClass;
-			this.propertyName = propertyName;
-			this.type = type;
-			this.argumentsRequired = argumentsRequired;
-			this.negation = negation;
-		}
-		
-		public String toString() {
-			StringBuffer buf = new StringBuffer("[GrailsMethodExpression] ");
-			buf.append(propertyName)
-				.append(" ")
-				.append(type)
-				.append(" ");
-			
-			for (int i = 0; i < arguments.length; i++) {
-				buf.append(arguments[i]);
-				if(i != arguments.length)
-					buf.append(" and ");
-			}
-			return buf.toString();
-		}
-
-		void setArguments(Object[] args)
-			throws IllegalArgumentException {
-			if(args.length != argumentsRequired)
-				throw new IllegalArgumentException("Method expression '"+this.type+"' requires " + argumentsRequired + " arguments");
-			
-			GrailsDomainClass dc = application.getGrailsDomainClass(targetClass.getName());
-			GrailsDomainClassProperty prop = dc.getPropertyByName(propertyName);
-			
-			if(prop == null)
-				throw new IllegalArgumentException("Property "+propertyName+" doesn't exist for method expression '"+this.type+"'");
-			
-			for (int i = 0; i < args.length; i++) {
-				if(args[i] == null)
-					throw new IllegalArgumentException("Argument " + args[0] + " cannot be null");
-				
-				if(!prop.getType().isAssignableFrom( args[i].getClass() ))
-					throw new IllegalArgumentException("Argument " + args[0] + " does not match property '"+propertyName+"' of type " + prop.getType());				
-			}
-
-			this.arguments = args;
-		}
-		
-		abstract Criterion createCriterion();
-		protected Criterion getCriterion() {
-			if(arguments == null)
-				throw new IllegalStateException("Parameters array must be set before retrieving Criterion");
-			
-			if(negation) {
-				return Expression.not( createCriterion() );
-			}
-			else {
-				return createCriterion();
-			}
-		}
-		
-		protected static GrailsMethodExpression create(final GrailsApplication application,Class clazz, String queryParameter) {
-			if(queryParameter.endsWith( LESS_THAN_OR_EQUAL )) {
-				return new GrailsMethodExpression(
-						application,
-						clazz,
-						calcPropertyName(queryParameter, LESS_THAN_OR_EQUAL),
-						LESS_THAN_OR_EQUAL, 
-						1,
-						isNegation(queryParameter, LESS_THAN_OR_EQUAL) ) {
-					Criterion createCriterion() {
-						return Expression.le( this.propertyName, arguments[0] );
-					}
-				};
-			}			
-			else if(queryParameter.endsWith( LESS_THAN )) {
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, LESS_THAN),
-						LESS_THAN, 
-						1, // argument count
-						isNegation(queryParameter, LESS_THAN) ) {
-					Criterion createCriterion() {
-						return Expression.lt( this.propertyName, arguments[0] );
-					}
-				};
-			}
-			else if(queryParameter.endsWith( GREATER_THAN_OR_EQUAL )) {
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, GREATER_THAN_OR_EQUAL),
-						GREATER_THAN_OR_EQUAL, 
-						1,
-						isNegation(queryParameter, GREATER_THAN_OR_EQUAL) ) {
-					Criterion createCriterion() {
-						return Expression.ge( this.propertyName, arguments[0] );
-					}
-				};
-			}			
-			else if(queryParameter.endsWith( GREATER_THAN )) {
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, GREATER_THAN),
-						GREATER_THAN,
-						1, 
-						isNegation(queryParameter, GREATER_THAN) ) {
-					Criterion createCriterion() {
-						return Expression.gt( this.propertyName, arguments[0] );
-					}
-
-				};
-			}
-			else if(queryParameter.endsWith( LIKE )) {
-				return new GrailsMethodExpression(
-						application,
-						clazz,
-						calcPropertyName(queryParameter, LIKE),
-						LIKE,
-						1, 
-						isNegation(queryParameter, LIKE) ) {
-					Criterion createCriterion() {
-						return Expression.like( this.propertyName, arguments[0] );
-					}
-
-				};
-			}			
-			else if(queryParameter.endsWith( IS_NOT_NULL )) {
-				return new GrailsMethodExpression(
-						application,
-						clazz,
-						calcPropertyName(queryParameter, IS_NOT_NULL),
-						IS_NOT_NULL,
-						0, 
-						isNegation(queryParameter, IS_NOT_NULL) ) {
-					Criterion createCriterion() {
-							return Expression.isNotNull( this.propertyName );
-					}
-					
-				};
-			}
-			else if(queryParameter.endsWith( IS_NULL )) {
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, IS_NULL),
-						IS_NULL,
-						0, 
-						isNegation(queryParameter, IS_NULL) ) {
-					Criterion createCriterion() {
-						return Expression.isNull( this.propertyName );
-					}
-
-				};
-			}
-			else if(queryParameter.endsWith( BETWEEN )) {
-					
-				return new GrailsMethodExpression( 
-						application,
-						clazz,
-						calcPropertyName(queryParameter, BETWEEN),
-						BETWEEN, 
-						2,
-						isNegation(queryParameter, BETWEEN) ) {
-					Criterion createCriterion() {
-						return Expression.between( this.propertyName,this.arguments[0], this.arguments[1] );
-					}
-
-				};
-			}
-			else if(queryParameter.endsWith( NOT_EQUAL )) {
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, NOT_EQUAL),
-						NOT_EQUAL, 
-						1,
-						isNegation(queryParameter, NOT_EQUAL) ) {
-					Criterion createCriterion() {
-						return Expression.ne( this.propertyName,this.arguments[0]);
-					}
-					
-				};				
-			}
-			else {
-				
-				return new GrailsMethodExpression(
-						application, 
-						clazz,
-						calcPropertyName(queryParameter, null),
-						EQUAL, 
-						1,
-						isNegation(queryParameter, EQUAL) ) {
-					Criterion createCriterion() {
-						return Expression.eq( this.propertyName,this.arguments[0]);
-					}
-				};			
-			}
-		}
-		private static boolean isNegation(String queryParameter, String clause) {
-			String propName;
-			if(clause != null && !clause.equals( EQUAL )) {
-				int i = queryParameter.indexOf(clause);
-				propName = queryParameter.substring(0,i);
-			}
-			else {
-				propName = queryParameter;
-			}
-			if(propName.endsWith(NOT)) {
-				return true;
-			}
-			return false;
-		}
-		private static String calcPropertyName(String queryParameter, String clause) {
-			String propName;
-			if(clause != null && !clause.equals( EQUAL )) {
-				int i = queryParameter.indexOf(clause);
-				propName = queryParameter.substring(0,i);
-			}
-			else {
-				propName = queryParameter;
-			}
-			if(propName.endsWith(NOT)) {
-				int i = propName.lastIndexOf(NOT);
-				propName = propName.substring(0, i);
-			}
-			return propName.substring(0,1).toLowerCase()
-				+ propName.substring(1);			
-		}
-	}
-	
-	private String[] operators;
-	private Pattern[] operatorPatterns;
-	protected String operatorInUse;
-	protected GrailsApplication application;
-	
-	public AbstractClausedStaticPersistentMethod(GrailsApplication application, SessionFactory sessionFactory, ClassLoader classLoader, Pattern pattern, String[] operators) {
-		super(sessionFactory, classLoader, pattern);
-		this.application = application;
-		this.operators = operators;
-		this.operatorPatterns = new Pattern[this.operators.length];
-		for (int i = 0; i < operators.length; i++) {
-			this.operatorPatterns[i] = Pattern.compile("(\\w+)("+this.operators[i]+")(\\p{Upper})(\\w+)");
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod#doInvokeInternal(java.lang.Class, java.lang.String, java.lang.Object[])
-	 */
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			Object[] arguments) {
-		List expressions = new ArrayList();
-		Matcher match = super.getPattern().matcher( methodName );
-		// find match
-		match.find();
-		
-		String[] queryParameters = null;
-		int totalRequiredArguments = 0;
-		// get the sequence clauses
-		String querySequence = match.group(2);
-		// if it contains operator and split
-		boolean containsOperator = false;
-		for (int i = 0; i < operators.length; i++) {
-			Matcher currentMatcher = operatorPatterns[i].matcher( querySequence );
-			if(currentMatcher.find()) {
-				containsOperator = true;
-				operatorInUse = this.operators[i];
-				
-				queryParameters = new String[2];
-				queryParameters[0] = currentMatcher.group(1);
-				queryParameters[1] = currentMatcher.group(3) + currentMatcher.group(4);
-				
-				// loop through query parameters and create expressions
-				// calculating the numBer of arguments required for the expression
-				int argumentCursor = 0;
-				for (int j = 0; j < queryParameters.length; j++) {
-					GrailsMethodExpression currentExpression = GrailsMethodExpression.create(this.application,clazz,queryParameters[j]);
-					totalRequiredArguments += currentExpression.argumentsRequired;
-					// populate the arguments into the GrailsExpression from the argument list
-					Object[] currentArguments = new Object[currentExpression.argumentsRequired];
-					if((argumentCursor + currentExpression.argumentsRequired) > arguments.length)
-						throw new MissingMethodException(methodName,clazz,arguments);
-					
-					for (int k = 0; k < currentExpression.argumentsRequired; k++,argumentCursor++) {
-						currentArguments[k] = arguments[argumentCursor];
-					}
-					try {
-						currentExpression.setArguments(currentArguments);
-					}catch(IllegalArgumentException iae) {
-						LOG.debug(iae.getMessage(),iae);
-						throw new MissingMethodException(methodName,clazz,arguments);
-					}
-					// add to list of expressions
-					expressions.add(currentExpression);
-				}
-				break;
-			}			
-		}
-		
-		// otherwise there is only one expression
-		if(!containsOperator) {
-			GrailsMethodExpression solo = GrailsMethodExpression.create(this.application, clazz,querySequence );
-			
-			if(solo.argumentsRequired > arguments.length)
-				throw new MissingMethodException(methodName,clazz,arguments);
-			
-			totalRequiredArguments += solo.argumentsRequired;			
-			Object[] soloArgs = new Object[solo.argumentsRequired];
-			
-			for (int i = 0; i < solo.argumentsRequired; i++) {
-				soloArgs[i] = arguments[i];
-			}
-			try {
-				solo.setArguments(soloArgs);
-			}
-			catch(IllegalArgumentException iae) {
-				LOG.debug(iae.getMessage(),iae);
-				throw new MissingMethodException(methodName,clazz,arguments);
-			}
-			expressions.add(solo);
-		}
-
-		// if the total of all the arguments necessary does not equal the number of arguments
-		// throw exception
-		if(totalRequiredArguments > arguments.length)
-			throw new MissingMethodException(methodName,clazz,arguments);
-		
-		// calculate the remaining arguments
-		Object[] remainingArguments = new Object[arguments.length - totalRequiredArguments];
-		if(remainingArguments.length > 0) {		
-			for (int i = 0, j = totalRequiredArguments; i < remainingArguments.length; i++,j++) {
-				remainingArguments[i] = arguments[j];
-			}
-		}
-		
-		if(LOG.isTraceEnabled())
-			LOG.trace("Calculated expressions: " + expressions);
-		
-		return doInvokeInternalWithExpressions(clazz, methodName, remainingArguments, expressions);
-	}
-	
-	protected abstract Object doInvokeInternalWithExpressions(Class clazz, String methodName, Object[] arguments, List expressions);
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractDynamicPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractDynamicPersistentMethod.java
deleted file mode 100644
index 61f165a..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractDynamicPersistentMethod.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.util.Assert;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 7, 2005
- */
-public abstract class AbstractDynamicPersistentMethod extends
-		AbstractDynamicMethodInvocation {
-
-	private SessionFactory sessionFactory = null;
-	private ClassLoader classLoader = null;
-	
-	public AbstractDynamicPersistentMethod(String methodName, SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(methodName);
-		this.sessionFactory = sessionFactory;
-		this.classLoader = classLoader;
-	}
-
-	protected HibernateTemplate getHibernateTemplate() {
-		Assert.notNull(sessionFactory, "Session factory is required!");
-		return new HibernateTemplate(this.sessionFactory);
-	}
-	
-	public Object invoke(Object target, Object[] arguments) {
-		ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(this.classLoader);
-		Object returnValue = doInvokeInternal(target, arguments);
-		Thread.currentThread().setContextClassLoader(originalClassLoader);
-		return returnValue;
-	}
-	
-	protected abstract Object doInvokeInternal(Object target, Object[] arguments);
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractStaticPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractStaticPersistentMethod.java
deleted file mode 100644
index c4c1bc4..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/AbstractStaticPersistentMethod.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import ognl.DefaultTypeConverter;
-import ognl.Ognl;
-
-import org.codehaus.groovy.grails.commons.metaclass.AbstractStaticMethodInvocation;
-import org.hibernate.Criteria;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Order;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.util.Assert;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public abstract class AbstractStaticPersistentMethod extends
-		AbstractStaticMethodInvocation {
-
-	private SessionFactory sessionFactory = null;
-	private ClassLoader classLoader = null;
-	private DefaultTypeConverter converter = new DefaultTypeConverter();
-	private Map context = Ognl.createDefaultContext(this);
-	
-	protected static final String ARGUMENT_MAX = "max";
-	protected static final String ARGUMENT_OFFSET = "offset";
-	protected static final String ARGUMENT_ORDER = "order";
-	protected static final String ARGUMENT_SORT = "sort";
-	protected static final String ORDER_DESC = "desc";
-	protected static final String ORDER_ASC = "asc";
-		
-	public AbstractStaticPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader, Pattern pattern) {
-		super();
-		setPattern(pattern);
-		this.sessionFactory = sessionFactory;
-		this.classLoader = classLoader;
-	}
-
-	protected HibernateTemplate getHibernateTemplate() {
-		Assert.notNull(sessionFactory, "Session factory is required!");
-		return new HibernateTemplate(this.sessionFactory);
-	}
-	
-	public Object invoke(Class clazz, String methodName, Object[] arguments) {
-		ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(this.classLoader);
-		Object returnValue = doInvokeInternal(clazz, methodName, arguments);
-		Thread.currentThread().setContextClassLoader(originalClassLoader);
-		return returnValue;
-	}
-
-	protected abstract Object doInvokeInternal(Class clazz, String methodName, Object[] arguments);
-	
-	protected void populateArgumentsForCriteria(Criteria c, Map argMap) {
-		
-		Integer maxParam = null;
-		Integer offsetParam = null;
-		if(argMap.containsKey(ARGUMENT_MAX)) {			
-			maxParam = (Integer)converter.convertValue(context,argMap.get(ARGUMENT_MAX),Integer.class);
-		}
-		if(argMap.containsKey(ARGUMENT_OFFSET)) {
-			offsetParam = (Integer)converter.convertValue(context,argMap.get(ARGUMENT_OFFSET),Integer.class);
-		}
-		String orderParam = (String)argMap.get(ARGUMENT_ORDER);
-		
-		final String sort = (String)argMap.get(ARGUMENT_SORT);
-		final String order = ORDER_DESC.equalsIgnoreCase(orderParam) ? ORDER_DESC : ORDER_ASC;
-		final int max = maxParam == null ? -1 : maxParam.intValue();
-		final int offset = offsetParam == null ? -1 : offsetParam.intValue();
-		if(max > -1)
-			c.setMaxResults(max);
-		if(offset > -1)
-			c.setFirstResult(offset);
-		if(sort != null) {
-			if(ORDER_DESC.equals(order)) {
-				c.addOrder( Order.desc(sort) );
-			}
-			else {
-				c.addOrder( Order.asc(sort) );
-			}
-		}		
-	}	
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CountPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CountPersistentMethod.java
deleted file mode 100644
index f84b8fe..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CountPersistentMethod.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateCallback;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-
-import java.util.regex.Pattern;
-
-/**
- * Method that allows you to count the number of instances in the database
- *
- * eg. Account.count() // returns how many in total
- *
- *
- * @author Graeme Rocher
- * @since 17-Feb-2006
- */
-public class CountPersistentMethod  extends AbstractStaticPersistentMethod {
-    private static final Pattern METHOD_PATTERN = Pattern.compile("^count$");
-    private static final String METHOD_SIGNATURE = "count";
-
-    public CountPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-        super(sessionFactory, classLoader, METHOD_PATTERN);
-    }
-
-    protected Object doInvokeInternal(final Class clazz, String methodName, Object[] arguments) {
-        HibernateTemplate t = getHibernateTemplate();
-        final StringBuffer b = new StringBuffer("select count(persistentClass) from ");
-        b.append(clazz.getName());
-        b.append(" as persistentClass");
-        if(arguments.length == 0) {
-              return t.execute(new HibernateCallback() {
-                  public Object doInHibernate(Session session) throws HibernateException {
-                      Query q = session.createQuery(b.toString());
-                      return q.uniqueResult();
-                  }
-              });
-        }
-        // TODO add support for counting with a query
-        throw new MissingMethodException(METHOD_SIGNATURE, clazz,arguments);
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CreateCriteriaPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CreateCriteriaPersistentMethod.java
deleted file mode 100644
index 32b6be5..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/CreateCriteriaPersistentMethod.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import grails.orm.HibernateCriteriaBuilder;
-import groovy.lang.MissingMethodException;
-
-import java.util.regex.Pattern;
-
-import org.hibernate.SessionFactory;
-/**
- * Creates a HibernateCriteriaBuilder instance for the current class and returns it.
- * 
- * eg. Account.createCriteria()
- * 
- * @author Graeme Rocher
- */
-public class CreateCriteriaPersistentMethod extends
-		AbstractStaticPersistentMethod {
-
-	private static final String METHOD_PATTERN = "^createCriteria$";
-	private static final String METHOD_SIGNATURE = "get";
-	
-	public CreateCriteriaPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile(METHOD_PATTERN));
-		
-	}
-
-	protected Object doInvokeInternal(Class clazz, String methodName,
-			Object[] arguments) {
-		
-		if(arguments.length > 0) 
-			throw new MissingMethodException(METHOD_SIGNATURE, clazz,arguments);
-				
-		return new HibernateCriteriaBuilder(clazz,super.getHibernateTemplate().getSessionFactory());
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/DeletePersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/DeletePersistentMethod.java
deleted file mode 100644
index 488cf4f..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/DeletePersistentMethod.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @author Graeme Rocher
- * 
- * @since Aug 7, 2005
- */
-public class DeletePersistentMethod extends AbstractDynamicPersistentMethod {
-
-    public static final String METHOD_SIGNATURE = "delete";
-
-    public DeletePersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-        super(METHOD_SIGNATURE,sessionFactory, classLoader);
-    }
-
-    protected Object doInvokeInternal(Object target, Object[] arguments) {
-        HibernateTemplate t = getHibernateTemplate();
-        t.setFlushMode(HibernateTemplate.FLUSH_COMMIT);
-        t.delete(target);
-        return null;
-    }
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ExistsPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ExistsPersistentMethod.java
deleted file mode 100644
index 95a9e87..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ExistsPersistentMethod.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-import ognl.DefaultTypeConverter;
-import ognl.Ognl;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.hibernate.SessionFactory;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * A static method that checks whether an entity exists in the database for the specified id
- *
- * eg. Account.exsits(1)
- * 
- * @author Graeme Rocher
- * @since 17-Feb-2006
- */
-public class ExistsPersistentMethod extends AbstractStaticPersistentMethod {
-
-    private static final Pattern METHOD_PATTERN = Pattern.compile("^exists$");
-    private static final String METHOD_SIGNATURE = "exists";
-
-    private GrailsApplication application;
-    private Map context = Ognl.createDefaultContext(this);
-    private DefaultTypeConverter typeConverter = new DefaultTypeConverter();
-
-    public ExistsPersistentMethod(GrailsApplication application, SessionFactory sessionFactory, ClassLoader classLoader) {
-        super(sessionFactory, classLoader,METHOD_PATTERN);
-        this.application = application;
-    }
-
-    protected Object doInvokeInternal(Class clazz, String methodName, Object[] arguments) {
-        // if no arguments passed throw exception
-        if(arguments.length == 0)
-            throw new MissingMethodException(METHOD_SIGNATURE, clazz,arguments);
-
-        // if its not a map throw exception
-        Object arg = arguments[0];
-
-        if(arg == null)
-            return null;
-
-        GrailsDomainClass domainClass = this.application.getGrailsDomainClass(clazz.getName());
-        if(domainClass != null) {
-            Class identityType = domainClass.getIdentifier().getType();
-            if(!identityType.isAssignableFrom(arg.getClass())) {
-                arg = typeConverter.convertValue(context,arg, identityType);
-            }
-        }
-
-        return Boolean.valueOf(super.getHibernateTemplate().get( clazz, (Serializable)arg ) != null);
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllByPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllByPersistentMethod.java
deleted file mode 100644
index cb60686..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllByPersistentMethod.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import java.sql.SQLException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateCallback;
-/**
- * The "findBy*" static persistent method. This method allows querying for
- * instances of grails domain classes based on their properties. This method returns a list of all found results
- * 
- * 
- * eg.
- * Account.findAllByHolder("Joe Blogs"); // Where class "Account" has a property called "holder"
- * Account.findAllByHolderAndBranch("Joe Blogs", "London" ); // Where class "Account" has a properties called "holder" and "branch"
- * 
- * @author Graeme Rocher
- * @since 13-Dec-2005
- *
- */
-public class FindAllByPersistentMethod extends
-		AbstractClausedStaticPersistentMethod {
-
-	private static final String OPERATOR_OR = "Or";
-	private static final String OPERATOR_AND = "And";
-	
-	private static final String METHOD_PATTERN = "(findAllBy)(\\w+)";
-	private static final String[] OPERATORS = new String[]{ OPERATOR_AND, OPERATOR_OR };
-
-	public FindAllByPersistentMethod(GrailsApplication application, SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(application, sessionFactory, classLoader, Pattern.compile(METHOD_PATTERN), OPERATORS);
-	}
-
-	protected Object doInvokeInternalWithExpressions(final Class clazz,
-			String methodName, final Object[] arguments, final List expressions) {
-		return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				Criteria c = session.createCriteria(clazz);
-				
-				
-				if(arguments.length > 0) {
-					if(arguments[0] instanceof Map) {
-						Map argMap = (Map)arguments[0];
-						populateArgumentsForCriteria(c,argMap);										
-					}
-				}				
-								
-				for (Iterator i = expressions.iterator(); i.hasNext();) {
-					GrailsMethodExpression current = (GrailsMethodExpression) i.next();
-					c.add( current.getCriterion() );
-					
-				}
-
-				return c.list();
-			}
-		});
-	}
-
-
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllPersistentMethod.java
deleted file mode 100644
index 3e07ed0..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindAllPersistentMethod.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-
-import java.sql.SQLException;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException;
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Example;
-import org.springframework.orm.hibernate3.HibernateCallback;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 8, 2005
- */
-public class FindAllPersistentMethod extends AbstractStaticPersistentMethod {
-
-	public FindAllPersistentMethod(SessionFactory sessionFactory,
-			ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile("^findAll$"));
-	}
-
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			final Object[] arguments) {
-		if(arguments.length == 0)
-			return getHibernateTemplate().loadAll(clazz);
-		
-		final Object arg = arguments[0];
-		
-		// if the arg is an instance of the class find by example
-		if(arg instanceof String) {
-			final String query = (String)arg;
-			if(!query.matches( "from "+clazz.getName()+".*" )) {
-				throw new GrailsQueryException("Invalid query ["+query+"] for domain class ["+clazz+"]");
-			}			
-			return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-				public Object doInHibernate(Session session) throws HibernateException, SQLException {										
-					Query q = session.createQuery(query);
-					Object[] queryArgs = null;
-					int max = -1;
-					if(arguments.length > 1) {
-						if(arguments[1] instanceof List) {
-							queryArgs = ((List)arguments[1]).toArray();
-						}
-						else if(arguments[1].getClass().isArray()) {
-							queryArgs = (Object[])arguments[1];
-						}
-					}					
-					max = retrieveMaxValue(arguments);
-					if(queryArgs != null) {					
-						for (int i = 0; i < queryArgs.length; i++) {
-							q.setParameter(i, queryArgs[i]);
-						}
-					}
-					if(max > -1) {
-						q.setMaxResults(max);
-					}
-					return q.list();
-
-				}
-
-				private int retrieveMaxValue(Object[] arguments) {
-					int max = -1;
-					if(arguments.length > 1) {
-						if(arguments[1] instanceof Integer) {
-							max = ((Integer)arguments[1]).intValue();
-						}
-						if(arguments.length > 2) {
-							if(arguments[2] instanceof Integer) {
-								max = ((Integer)arguments[2]).intValue();
-							}							
-						}
-					}
-					
-					return max;
-				}
-				
-			});						
-		}
-		if(clazz.isAssignableFrom( arg.getClass() )) {			
-			return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-				public Object doInHibernate(Session session) throws HibernateException, SQLException {
-					
-					Example example = Example.create(arg)
-							.ignoreCase();
-					
-					Criteria crit = session.createCriteria(clazz);
-					crit.add(example);
-					
-					return crit.list();					
-				}
-				
-			});			
-		}
-
-		throw new MissingMethodException(methodName,clazz,arguments);
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindByPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindByPersistentMethod.java
deleted file mode 100644
index ce6af7b..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindByPersistentMethod.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import java.sql.SQLException;
-import java.util.Iterator;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateCallback;
-
-/**
- * The "findBy*" static persistent method. This method allows querying for
- * instances of grails domain classes based on their properties. This method returns the first result of the query
- * 
- * eg.
- * Account.findByHolder("Joe Blogs"); // Where class "Account" has a property called "holder"
- * Account.findByHolderAndBranch("Joe Blogs", "London" ); // Where class "Account" has a properties called "holder" and "branch"
- * 
- * @author Graeme Rocher
- * @since 31-Aug-2005
- *
- */
-public class FindByPersistentMethod extends AbstractClausedStaticPersistentMethod {
-	
-	private static final String OPERATOR_OR = "Or";
-	private static final String OPERATOR_AND = "And";
-	
-	private static final String METHOD_PATTERN = "(findBy)(\\w+)";
-	private static final String[] OPERATORS = new String[]{ OPERATOR_AND, OPERATOR_OR };
-
-	public FindByPersistentMethod(GrailsApplication application,SessionFactory sessionFactory, ClassLoader classLoader) {
- 		super(application,sessionFactory, classLoader, Pattern.compile( METHOD_PATTERN ),OPERATORS);
-	}
-
-	protected Object doInvokeInternalWithExpressions(final Class clazz, String methodName, Object[] arguments, final List expressions) {
-		return super.getHibernateTemplate().execute( new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				Criteria crit = session.createCriteria(clazz);
-				for (Iterator i = expressions.iterator(); i.hasNext();) {
-					GrailsMethodExpression current = (GrailsMethodExpression) i.next();
-					crit.add( current.getCriterion() );
-					
-				}
-				List results = crit.list();
-				if(results.size() > 0) {
-					return results.get(0);
-				}
-				else {
-					return null;
-				}
-			}
-		});
-	}
-	
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindPersistentMethod.java
deleted file mode 100644
index 5f77b22..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindPersistentMethod.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-
-import java.sql.SQLException;
-import java.util.List;
-import java.util.regex.Pattern;
-
-import org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException;
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Example;
-import org.springframework.orm.hibernate3.HibernateCallback;
-/**
- * <p>The "find" persistent static method allows searching for instances using either an example instance or an HQL 
- * query. This method returns the first result of the query. A GrailsQueryException is thrown if the query is not a valid query for the domain class.
- * 
- * <p>Examples in Groovy:
- * <code>
- * 		// retrieve the first 10 accounts ordered by account number
- * 		def a = Account.find("from Account as a order by a.number asc", 10)
- * 
- * 		// with query parameters
- * 		def a  = Account.find("from Account as a where a.number = ? and a.branch = ?", [38479, "London"]) 
- * 
- * 		// query by example
- * 		def a = new Account()
- * 		a.number = 495749357
- * 		def a = Account.find(a)
- * 
- * </code>
- * 
- * @author Graeme Rocher
- * @since 31-Aug-2005
- *
- */
-public class FindPersistentMethod extends AbstractStaticPersistentMethod {
-
-	private static final String METHOD_PATTERN = "^find$";
-
-	public FindPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile(METHOD_PATTERN));
-	}
-
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			final Object[] arguments) {
-		
-		if(arguments.length == 0)
-			throw new MissingMethodException(methodName,clazz,arguments);
-		
-		final Object arg = arguments[0];
-		
-		// if the arg is an instance of the class find by example
-		if(arg instanceof String) {
-			final String query = (String)arg;
-			if(!query.matches( "from "+clazz.getName()+".*" )) {
-				throw new GrailsQueryException("Invalid query ["+query+"] for domain class ["+clazz+"]");
-			}			
-			return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-				public Object doInHibernate(Session session) throws HibernateException, SQLException {										
-					Query q = session.createQuery(query);
-					Object[] queryArgs = null;
-					int max = -1;
-					if(arguments.length > 1) {
-						if(arguments[1] instanceof List) {
-							queryArgs = ((List)arguments[1]).toArray();
-						}
-						else if(arguments[1].getClass().isArray()) {
-							queryArgs = (Object[])arguments[1];
-						}
-					}					
-					max = retrieveMaxValue(arguments);
-					if(queryArgs != null) {					
-						for (int i = 0; i < queryArgs.length; i++) {
-							q.setParameter(i, queryArgs[i]);
-						}
-					}
-					if(max > -1) {
-						q.setMaxResults(max);
-					}
-					List results = q.list();
-					if(results.size() > 0)
-						return results.get(0);
-					return null;
-				}
-
-				private int retrieveMaxValue(Object[] arguments) {
-					int max = -1;
-					if(arguments.length > 1) {
-						if(arguments[1] instanceof Integer) {
-							max = ((Integer)arguments[1]).intValue();
-						}
-						if(arguments.length > 2) {
-							if(arguments[2] instanceof Integer) {
-								max = ((Integer)arguments[2]).intValue();
-							}							
-						}
-					}
-					
-					return max;
-				}
-				
-			});						
-		}
-		if(clazz.isAssignableFrom( arg.getClass() )) {			
-			return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-				public Object doInHibernate(Session session) throws HibernateException, SQLException {
-					
-					Example example = Example.create(arg)
-							.ignoreCase();
-					
-					Criteria crit = session.createCriteria(clazz);
-					crit.add(example);
-					
-					List results = crit.list();
-					if(results.size() > 0)
-						return results.get(0);
-					return null;					
-				}
-				
-			});			
-		}
-
-		throw new MissingMethodException(methodName,clazz,arguments);
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindWherePersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindWherePersistentMethod.java
deleted file mode 100644
index e5c4129..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/FindWherePersistentMethod.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-
-import java.sql.SQLException;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Expression;
-import org.springframework.orm.hibernate3.HibernateCallback;
-
-/**
- * The "findWhere" persistent static method. This method takes a map with the
- * keys being the property names and the values being the values of those properties
- * and locates an instance that matches the criteria.
- * 
- * eg. Account.findWhere( [ "holder":"Joe Bloggs", branch:"London" ] );
- * 
- * @author Graeme Rocher
- *
- */
-public class FindWherePersistentMethod extends AbstractStaticPersistentMethod {
-
-	
-	private static final String METHOD_PATTERN = "^findWhere$";
-
-	public FindWherePersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile(METHOD_PATTERN));
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod#doInvokeInternal(java.lang.Class, java.lang.String, java.lang.Object[])
-	 */
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			Object[] arguments) {
-		
-		// if no arguments passed throw exception
-		if(arguments.length == 0)
-			throw new MissingMethodException(METHOD_PATTERN, clazz,arguments);
-		// if its not a map throw exception
-		Object arg = arguments[0];
-		if(!(arg instanceof Map))
-			throw new MissingMethodException(METHOD_PATTERN, clazz,arguments);
-		
-		final Map queryMap = (Map)arg;
-		
-		// TODO: We may want to validate the query map to make sure each named property
-		// is a valid property of the GrailsDomainClass thus hiding the Hibernate
-		// exception that will be thrown if it is not
-		
-		return super.getHibernateTemplate().execute( new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				
-				Criteria crit = session.createCriteria(clazz);
-				
-				crit.add( Expression.allEq( queryMap ) );
-				
-				List results = crit.list();
-				if(results.size() > 0)
-					return results.get(0);
-				return null;					
-				
-			}
-			
-		});
-				
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/GetPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/GetPersistentMethod.java
deleted file mode 100644
index 53b261b..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/GetPersistentMethod.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import groovy.lang.MissingMethodException;
-import ognl.DefaultTypeConverter;
-import ognl.Ognl;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.hibernate.SessionFactory;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.regex.Pattern;
-/**
- * The "get" static persistent method for Grails domain classes. This method
- * takes an id and returns the instance 
- * 
- * eg. Account.get(2)
- * 
- * Or an HQL query and tries to retrieve a unique result (note an exception is thrown if the result is not unique)
- * 
- * eg. Account.get("from Account as a where a.id=2)
- * 
- * @author Graeme Rocher
- *
- */
-public class GetPersistentMethod extends AbstractStaticPersistentMethod {
-
-	private static final Pattern METHOD_PATTERN = Pattern.compile("^get$");
-	public static final String METHOD_SIGNATURE = "get";
-	private GrailsApplication application;
-	private Map context = Ognl.createDefaultContext(this);
-	private DefaultTypeConverter typeConverter = new DefaultTypeConverter();
-
-	public GetPersistentMethod(GrailsApplication application, SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, METHOD_PATTERN);
-		this.application = application;
-	}
-
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			Object[] arguments) {
-		// if no arguments passed throw exception
-		if(arguments.length == 0)
-			throw new MissingMethodException(METHOD_SIGNATURE, clazz,arguments);
-		// if its not a map throw exception
-		Object arg = arguments[0];
-        
-        if(arg == null)
-            return null;
-
-        GrailsDomainClass domainClass = this.application.getGrailsDomainClass(clazz.getName());
-		if(domainClass != null) {
-			Class identityType = domainClass.getIdentifier().getType();
-			if(!identityType.isAssignableFrom(arg.getClass())) {
-				arg = typeConverter.convertValue(context,arg, identityType);
-			}
-		}
-
-		return super.getHibernateTemplate().get( clazz, (Serializable)arg );		
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListOrderByPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListOrderByPersistentMethod.java
deleted file mode 100644
index 6b39310..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListOrderByPersistentMethod.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * 
- */
-package org.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import java.sql.SQLException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.hibernate.criterion.Order;
-import org.springframework.orm.hibernate3.HibernateCallback;
-
-/**
- * The "listOrderBy*" static persistent method. This method allows
- * ordered listing of instances based on their properties.
- * 
- * eg.
- * Account.listOrderByHolder();
- * Account.listOrderByHolder(max); // max results
- * 
- * @author Graeme
- *
- */
-public class ListOrderByPersistentMethod extends AbstractStaticPersistentMethod {
-
-	private static final String METHOD_PATTERN = "(listOrderBy)(\\w+)";
-
-	public ListOrderByPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile( METHOD_PATTERN ));
-	}
-
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.orm.hibernate.metaclass.AbstractStaticPersistentMethod#doInvokeInternal(java.lang.Class, java.lang.String, java.lang.Object[])
-	 */
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			Object[] arguments) {
-
-		Matcher match = getPattern().matcher( methodName );
-		// find match
-		match.find();
-		
-		String nameInSignature = match.group(2);
-		final String propertyName = nameInSignature.substring(0,1).toLowerCase() +
-										nameInSignature.substring(1);
-		
-		int temp = -1;
-		if(arguments.length > 0) {
-			Object arg = arguments[0];
-			if(arg instanceof Integer) {
-				temp = ((Integer)arg).intValue();
-			}
-		}
-		final int max = temp;
-		
-		return super.getHibernateTemplate().executeFind( new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				
-				Criteria crit = session.createCriteria(clazz);
-				crit.addOrder( Order.asc( propertyName ) );
-				if(max > -1) {
-					crit.setMaxResults(max);
-				}
-				return crit.list();
-			}
-			
-		});
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListPersistentMethod.java
deleted file mode 100644
index 183465c..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ListPersistentMethod.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import java.sql.SQLException;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import org.hibernate.Criteria;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateCallback;
-
-/**
- * The "list" persistent static method. This method lists of of the persistent
- * instances up the maximum specified amount (if any)
- * 
- * eg.
- * Account.list(); // list all
- * Account.list(max:10,offset:50,sort:"holder",order:"desc"); // list up to 10, offset by 50, sorted by holder and in descending order 
- * 
- * @author Graeme Rocher
- *
- */
-public class ListPersistentMethod extends AbstractStaticPersistentMethod {
-
-	private static final String METHOD_PATTERN = "^list$";
-
-	public ListPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(sessionFactory, classLoader, Pattern.compile(METHOD_PATTERN));
-	}
-
-	protected Object doInvokeInternal(final Class clazz, String methodName,
-			final Object[] arguments) {
-		// if there are no arguments list all
-		if(arguments == null || arguments.length == 0) {
-			return super.getHibernateTemplate().loadAll(clazz);
-		}
-		// otherwise retrieve the max argument
-		else {
-		
-			// and list up to the max
-			return super.getHibernateTemplate()
-				.executeFind( new HibernateCallback() {
-
-					public Object doInHibernate(Session session) throws HibernateException, SQLException {
-						Criteria c =  session
-							.createCriteria(clazz);
-						
-						if(arguments.length > 0) {
-							if(arguments[0] instanceof Map) {
-								Map argMap = (Map)arguments[0];
-								populateArgumentsForCriteria(c,argMap);										
-							}
-						}	
-						return c.list();
-					}
-					
-				}
-			);
-		}		
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/RefreshPersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/RefreshPersistentMethod.java
deleted file mode 100644
index b76be87..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/RefreshPersistentMethod.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import org.hibernate.SessionFactory;
-/**
- * The "refresh" persistent instance method. This method refreshes the current
- * instances state.
- * 
- * eg.
- * instance.refresh();
- * 
- * @author Graeme Rocher
- *
- */
-public class RefreshPersistentMethod extends AbstractDynamicPersistentMethod {
-
-	private static final String METHOD_SIGNATURE = "refresh";
-
-	public RefreshPersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader) {
-		super(METHOD_SIGNATURE,sessionFactory, classLoader);
-	}
-
-	protected Object doInvokeInternal(Object target, Object[] arguments) {
-		super.getHibernateTemplate().refresh(target);
-		return null;
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/SavePersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/SavePersistentMethod.java
deleted file mode 100644
index c701992..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/SavePersistentMethod.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.codehaus.groovy.grails.commons.metaclass.DelegatingMetaClass;
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.codehaus.groovy.grails.orm.hibernate.validation.GrailsDomainClassValidator;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.hibernate.SessionFactory;
-import org.springframework.validation.BindException;
-import org.springframework.validation.Errors;
-import org.springframework.validation.Validator;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-
-import java.io.Serializable;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @author Graeme Rocher
- * 
- * @since Aug 7, 2005
- */
-public class SavePersistentMethod extends AbstractDynamicPersistentMethod {
-
-    public static final String METHOD_SIGNATURE = "save";
-    private GrailsApplication application;
-
-    public SavePersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader, GrailsApplication application) {
-        super(METHOD_SIGNATURE,sessionFactory, classLoader);
-
-        if(application == null)
-            throw new IllegalArgumentException("Constructor argument 'application' cannot be null");
-        this.application = application;
-    }
-
-    protected Object doInvokeInternal(Object target, Object[] arguments) {
-
-        Errors errors = new BindException(target, target.getClass().getName());
-        GrailsDomainClass domainClass = application.getGrailsDomainClass( target.getClass().getName() );
-        Validator validator = null;
-        boolean doValidation = true;
-        Boolean success = Boolean.TRUE;
-        if(domainClass != null) {
-            validator = domainClass.getValidator();
-            doValidation = true;
-            if(arguments.length > 0) {
-                if(arguments[0] instanceof Boolean) {
-                    doValidation = ((Boolean)arguments[0]).booleanValue();
-                }
-            }
-        }
-        if(doValidation) {
-            if(validator != null) {
-                if(validator instanceof GrailsDomainClassValidator) {
-                     ((GrailsDomainClassValidator)validator).setHibernateTemplate(getHibernateTemplate());
-                }
-                validator.validate(target,errors);
-
-                if(errors.hasErrors()) {
-                    DelegatingMetaClass metaClass = (DelegatingMetaClass)InvokerHelper.getInstance().getMetaRegistry().getMetaClass(target.getClass());
-                    metaClass.setProperty(target,DomainClassMethods.ERRORS_PROPERTY,errors);
-                    return Boolean.valueOf(!errors.hasErrors());
-                }
-            }
-        }
-        HibernateTemplate t = getHibernateTemplate();
-        t.setFlushMode(HibernateTemplate.FLUSH_COMMIT);
-
-        // this piece of code will retrieve a persistent instant
-        // of a domain class property is only the id is set thus
-        // relieving this burden off the developer
-        if(domainClass != null) {
-            BeanWrapper bean = new BeanWrapperImpl(target);
-            GrailsDomainClassProperty[] props = domainClass.getPersistantProperties();
-            for (int i = 0; i < props.length; i++) {
-                GrailsDomainClassProperty prop = props[i];
-                if(prop.isManyToOne() || prop.isOneToOne()) {
-                    Object propValue = bean.getPropertyValue(prop.getName());
-                    if(propValue != null && !t.contains(propValue)) {
-                        GrailsDomainClass otherSide = application.getGrailsDomainClass(prop.getType().getName());
-                        if(otherSide != null) {
-                            BeanWrapper propBean = new BeanWrapperImpl(propValue);
-
-                            Serializable id = (Serializable)propBean.getPropertyValue(otherSide.getIdentifier().getName());
-                            bean.setPropertyValue(prop.getName(),t.get(prop.getType(),id));
-                        }
-                    }
-                }
-            }
-        }
-
-
-        if(t.contains(target)) {
-            t.update(target);
-        }
-        else {
-            t.saveOrUpdate(target);
-        }
-
-
-        return success;
-    }
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ValidatePersistentMethod.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ValidatePersistentMethod.java
deleted file mode 100644
index a1ca7d2..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/metaclass/ValidatePersistentMethod.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.metaclass;
-
-
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.metaclass.DelegatingMetaClass;
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.codehaus.groovy.grails.orm.hibernate.validation.GrailsDomainClassValidator;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.hibernate.SessionFactory;
-import org.springframework.validation.BindException;
-import org.springframework.validation.Errors;
-import org.springframework.validation.Validator;
-/**
- * A method that validates an instance of a domain class against its constraints 
- * 
- * @author Graeme Rocher
- * @since 07-Nov-2005
- */
-public class ValidatePersistentMethod extends AbstractDynamicPersistentMethod {
-
-	private static final String METHOD_NAME = "validate";
-	private GrailsApplication application;
-	
-
-
-
-	public ValidatePersistentMethod(SessionFactory sessionFactory, ClassLoader classLoader, GrailsApplication application) {
-		super(METHOD_NAME, sessionFactory, classLoader);
-		if(application == null)
-			throw new IllegalArgumentException("Constructor argument 'application' cannot be null");
-		this.application = application;
-	}
-
-	protected Object doInvokeInternal(Object target, Object[] arguments) {
-		Errors errors = new BindException(target, target.getClass().getName());
-		GrailsDomainClass domainClass = application.getGrailsDomainClass( target.getClass().getName() );
-		Validator validator = null;
-		
-		if(domainClass != null)
-			validator = application.getGrailsDomainClass( target.getClass().getName() ).getValidator();
-		
-		Boolean valid = new Boolean(true);
-		if(validator != null) {
-            if(validator instanceof GrailsDomainClassValidator) {
-                 ((GrailsDomainClassValidator)validator).setHibernateTemplate(getHibernateTemplate());
-            }
-            validator.validate(target,errors);
-			
-			if(errors.hasErrors()) {
-				valid = new Boolean(!errors.hasErrors());	
-				DelegatingMetaClass metaClass = (DelegatingMetaClass)InvokerHelper.getInstance().getMetaRegistry().getMetaClass(target.getClass());
-				metaClass.setProperty(target,DomainClassMethods.ERRORS_PROPERTY,errors);
-			}
-		}
-		return valid;
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/GrailsOpenSessionInViewFilter.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/GrailsOpenSessionInViewFilter.java
deleted file mode 100644
index 01d0863..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/GrailsOpenSessionInViewFilter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.support;
-
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.hibernate.FlushMode;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.context.ApplicationContext;
-import org.springframework.dao.DataAccessResourceFailureException;
-import org.springframework.orm.hibernate3.SessionFactoryUtils;
-import org.springframework.orm.hibernate3.support.OpenSessionInViewFilter;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * <p>Uses the GrailsApplication sesssionFactory to apply the filter
- * 
- * @author Graeme Rocher
- * @since Oct 20, 2005
- */
-public class GrailsOpenSessionInViewFilter extends OpenSessionInViewFilter {
-
-    protected SessionFactory lookupSessionFactory() {
-        WebApplicationContext parent =
-            WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
-
-        ApplicationContext context = (ApplicationContext)getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
-
-        if(context != null) {
-            return (SessionFactory) context.getBean(getSessionFactoryBeanName(), SessionFactory.class);
-        }
-        return null;
-    }
-
-    protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
-        Session session = SessionFactoryUtils.getSession(sessionFactory, true);
-        session.setFlushMode(FlushMode.AUTO);
-        return session;
-    }
-
-    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
-        SessionFactory sf = lookupSessionFactory();
-        if(sf != null) {
-            super.doFilterInternal(request,response,filterChain);
-        }
-        else {
-            filterChain.doFilter(request,response);
-        }
-    }
-
-    protected void closeSession(Session session, SessionFactory sessionFactory) {
-        if(!FlushMode.NEVER.equals(session.getFlushMode())) {
-            session.flush();
-        }
-        super.closeSession(session, sessionFactory);
-    }
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/HibernateDialectDetectorFactoryBean.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/HibernateDialectDetectorFactoryBean.java
deleted file mode 100644
index 9a4562c..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/support/HibernateDialectDetectorFactoryBean.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.support;
-
-import java.util.Properties;
-
-import javax.sql.DataSource;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.orm.hibernate.exceptions.CouldNotDetermineHibernateDialectException;
-import org.hibernate.dialect.Dialect;
-import org.hibernate.dialect.DialectFactory;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.jdbc.support.JdbcUtils;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class HibernateDialectDetectorFactoryBean implements FactoryBean,
-		InitializingBean {
-
-	private DataSource dataSource = null;
-	private Properties vendorNameDialectMappings = null;
-	private String hibernateDialectClassName = null;
-	private Dialect hibernateDialect;
-	
-	public HibernateDialectDetectorFactoryBean() {
-		super();
-	}
-	
-	public void setDataSource(DataSource dataSource) {
-		this.dataSource = dataSource;
-	}
-
-	public void setVendorNameDialectMappings(Properties mappings) {
-		this.vendorNameDialectMappings = mappings;
-	}
-	
-	public Object getObject() throws Exception {
-		return this.hibernateDialectClassName;
-	}
-
-	public Class getObjectType() {
-		return String.class;
-	}
-
-	public boolean isSingleton() {
-		return true;
-	}
-
-	public void afterPropertiesSet() throws Exception {
-		if (this.dataSource == null) {
-			throw new IllegalStateException("Data source is not set!");
-		}
-		if (this.vendorNameDialectMappings == null) {
-			throw new IllegalStateException("Vendor name/dialect mappings are not set!");
-		}
-		
-		String dbName = (String)JdbcUtils.extractDatabaseMetaData(this.dataSource, "getDatabaseProductName");
-		Integer majorVersion = (Integer)JdbcUtils.extractDatabaseMetaData(this.dataSource, "getDatabaseMajorVersion");
-		
-		this.hibernateDialect = DialectFactory.determineDialect(dbName,majorVersion.intValue());
-		this.hibernateDialectClassName = this.hibernateDialect.getClass().getName();
-		//this.hibernateDialectClassName = this.vendorNameDialectMappings.getProperty(dbName);
-		
-		if (StringUtils.isBlank(this.hibernateDialectClassName)) {
-			throw new CouldNotDetermineHibernateDialectException("Could not determine Hibernate dialect for database name [" + dbName + "]!");
-		}
-	}
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/ConstrainedPersistentProperty.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/ConstrainedPersistentProperty.java
deleted file mode 100644
index a3d94ac..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/ConstrainedPersistentProperty.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.validation;
-
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-import org.codehaus.groovy.grails.validation.Constraint;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.criterion.Restrictions;
-import org.springframework.orm.hibernate3.HibernateCallback;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.validation.Errors;
-
-import java.sql.SQLException;
-import java.text.MessageFormat;
-import java.util.Iterator;
-import java.util.List;
-/**
- * Extends ConstrainedProperty to provide additional validation against database specific constraints
- * 
- * @author Graeme Rocher
- * @since 10-Nov-2005
- */
-public class ConstrainedPersistentProperty extends ConstrainedProperty {
-
-	public static final String UNIQUE_CONSTRAINT = "unique";
-
-	
-	private static final String DEFAULT_NOT_UNIQUE_MESSAGE = bundle.getString("default.not.unique.message");
-	private HibernateTemplate hibernateTemplate;
-	
-	static {		
-		constraints.put( UNIQUE_CONSTRAINT, UniqueConstraint.class );
-	}
-	
-	static protected abstract class AbstractPersistentConstraint extends AbstractConstraint implements PersistentConstraint {
-		
-		protected HibernateTemplate constraintHibernateTemplate;
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.orm.hibernate.validation.PersistentConstraint#setHibernateTemplate(org.springframework.orm.hibernate3.HibernateTemplate)
-		 */
-		public void setHibernateTemplate(HibernateTemplate template) {
-			this.constraintHibernateTemplate = template;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#validate(java.lang.Object, org.springframework.validation.Errors)
-		 */
-		public void validate(Object propertyValue, Errors errors) {
-			if(constraintHibernateTemplate == null)
-				throw new IllegalStateException("PersistentConstraint requires an instance of HibernateTemplate.");
-			
-			super.validate(propertyValue, errors);
-		}				
-	}
-	
-	/**
-	 * 
-     * A constraint that validates the uniqueness of a property
-	 */
-	static private class UniqueConstraint extends AbstractPersistentConstraint {
-		
-		private boolean unique;
-
-		/**
-		 * @return Returns the unique.
-		 */
-		public boolean isUnique() {
-			return unique;
-		}
-
-		/* (non-Javadoc)
-		 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty.AbstractConstraint#setParameter(java.lang.Object)
-		 */
-		public void setParameter(Object constraintParameter) {
-			if(!(constraintParameter instanceof Boolean)) 
-				throw new IllegalArgumentException("Parameter for constraint ["+UNIQUE_CONSTRAINT+"] of property ["+constraintPropertyName+"] of class ["+constraintOwningClass+"] must be a boolean value");
-			
-			this.unique = ((Boolean)constraintParameter).booleanValue();
-			super.setParameter(constraintParameter);
-		}
-
-        public String getName() {
-            return UNIQUE_CONSTRAINT;
-        }
-
-        protected void processValidate(final Object propertyValue, Errors errors) {
-
-            if(unique) {
-                List results = this.constraintHibernateTemplate.executeFind( new HibernateCallback() {
-
-                    public Object doInHibernate(Session session) throws HibernateException, SQLException {
-                        return session.createCriteria( constraintOwningClass )
-                                            .add( Restrictions.eq( constraintPropertyName, propertyValue ) )
-                                            .list();
-
-                    }
-
-                });
-                if(results.size() > 0) {
-                    Object[] args = new Object[] { constraintPropertyName, constraintOwningClass, propertyValue };
-                    super.rejectValue(errors,UNIQUE_CONSTRAINT,args,MessageFormat.format( DEFAULT_NOT_UNIQUE_MESSAGE, args ));
-                }
-            }
-        }
-
-		public boolean supports(Class type) {
-			return true;
-		}
-		
-	}
-	
-
-	public ConstrainedPersistentProperty(Class clazz, String propertyName, Class propertyType) {
-		super(clazz, propertyName, propertyType);
-	}
-	
-	
-	/**
-	 * @return Returns the hibernateTemplate.
-	 */
-	public HibernateTemplate getHibernateTemplate() {
-		return hibernateTemplate;
-	}
-
-
-	/**
-	 * @param hibernateTemplate The hibernateTemplate to set.
-	 */
-	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
-		this.hibernateTemplate = hibernateTemplate;
-	}
-
-	/**
-	 * @return Returns the unique.
-	 */
-	public boolean isUnique() {
-		UniqueConstraint c = (UniqueConstraint)this.appliedConstraints.get( UNIQUE_CONSTRAINT );
-		if(c == null)
-			return false;
-		
-		return c.isUnique();
-	}
-	/**
-	 * @param unique The unique to set.
-	 */
-	public void setUnique(boolean unique) {
-
-		Constraint c = (Constraint)this.appliedConstraints.get( UNIQUE_CONSTRAINT );
-			
-		if(c != null) {
-			c.setParameter( new Boolean(unique) );				
-		}
-		else {
-			c = new UniqueConstraint();
-			c.setOwningClass(this.owningClass);
-			c.setPropertyName(this.propertyName);
-			c.setParameter(new Boolean(unique));					
-			this.appliedConstraints.put( UNIQUE_CONSTRAINT,c );				
-		}	
-	}
-	/* (non-Javadoc)
-	 * @see org.codehaus.groovy.grails.validation.ConstrainedProperty#validate(java.lang.Object, org.springframework.validation.Errors)
-	 */
-	public void validate(Object propertyValue, Errors errors) {
-	
-		for (Iterator i = this.appliedConstraints.values().iterator(); i.hasNext();) {
-			Constraint c = (Constraint) i.next();
-			if(c instanceof PersistentConstraint) {
-				PersistentConstraint pc = (PersistentConstraint)c;
-				pc.setHibernateTemplate(this.hibernateTemplate);
-				pc.validate( propertyValue, errors );
-			}
-			else {
-				c.validate( propertyValue, errors);
-			}
-		}
-	}
-
-	
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/GrailsDomainClassValidator.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/GrailsDomainClassValidator.java
deleted file mode 100644
index e735675..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/GrailsDomainClassValidator.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.validation;
-
-import groovy.lang.GroovyObject;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.hibernate.SessionFactory;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.validation.Errors;
-import org.springframework.validation.Validator;
-
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * A validator that validates a domain class based on the applied constraints 
- * 
- * @author Graeme Rocher
- * @since 07-Nov-2005
- */
-public class GrailsDomainClassValidator implements Validator {
-
-    private Collection constrainedProperties;
-    private Class targetClass;
-    private HibernateTemplate template;
-    private GrailsDomainClass domainClass;
-    private SessionFactory sessionFactory;
-
-    public boolean supports(Class clazz) {
-        return this.targetClass.equals( clazz );
-    }
-
-
-    /**
-     * @param domainClass The domainClass to set.
-     */
-    public void setDomainClass(GrailsDomainClass domainClass) {
-        this.domainClass = domainClass;
-        this.domainClass.setValidator(this);
-        this.targetClass = this.domainClass.getClazz();
-        this.constrainedProperties = domainClass.getConstrainedProperties().values();
-    }
-
-    /**
-     * @param sessionFactory The sessionFactory to set.
-     */
-    public void setSessionFactory(SessionFactory sessionFactory) {
-        this.sessionFactory = sessionFactory;
-        this.template = new HibernateTemplate(this.sessionFactory);
-    }
-
-    public void validate(Object obj, Errors errors) {
-        if(!domainClass.getClazz().isInstance(obj))
-            throw new IllegalArgumentException("Argument ["+obj+"] is not an instance of ["+domainClass.getClazz()+"] which this validator is configured for");
-
-        BeanWrapper bean = new BeanWrapperImpl(obj);
-
-        for (Iterator i = constrainedProperties.iterator(); i.hasNext();) {
-            ConstrainedPersistentProperty c = (ConstrainedPersistentProperty)i.next();
-            c.setHibernateTemplate(this.template);
-            c.validate(bean.getPropertyValue( c.getPropertyName() ),errors);
-        }
-
-         if(obj instanceof GroovyObject) {
-            ((GroovyObject)obj).setProperty(DomainClassMethods.ERRORS_PROPERTY, errors);
-         }
-         else {
-            InvokerHelper.setProperty(obj,DomainClassMethods.ERRORS_PROPERTY,errors);
-         }
-    }
-
-    public void setHibernateTemplate(HibernateTemplate template) {
-        this.template = template;
-    }
-
-}
diff --git a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/PersistentConstraint.java b/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/PersistentConstraint.java
deleted file mode 100644
index d5fc472..0000000
--- a/groovy/modules/grails/src/persistence/org/codehaus/groovy/grails/orm/hibernate/validation/PersistentConstraint.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate.validation;
-
-import org.codehaus.groovy.grails.validation.Constraint;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-/**
- * Interface that defines a persistent constraint that evaluates the database.
- * 
- * @author Graeme Rocher
- * @since 10-Nov-2005
- */
-public interface PersistentConstraint extends Constraint {
-
-	/**
-	 * Sets the hibernate template to use for the persistent constraint
-	 * @param template
-	 */
-	void setHibernateTemplate(HibernateTemplate template);
-}
diff --git a/groovy/modules/grails/src/persistence/persistence.iml b/groovy/modules/grails/src/persistence/persistence.iml
deleted file mode 100644
index 2f075fc..0000000
--- a/groovy/modules/grails/src/persistence/persistence.iml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4" relativePaths="true" type="JAVA_MODULE">
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/../../target/classes" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="Groovy from GroovyJ 0.1.6 (Irida)" level="application" />
-    <orderEntryProperties />
-  </component>
-</module>
-
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsResponseHandlerFactory.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsResponseHandlerFactory.java
deleted file mode 100644
index bc094c5..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsResponseHandlerFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-
-/**
- * The default implementation of a ScaffoldResponseHandlerFactory that uses the uri extension to look-up
- * an appropriate response handler. If none exists for the uri suffix it returns the default response handler
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-
-public class DefaultGrailsResponseHandlerFactory implements
-		ScaffoldResponseHandlerFactory {
-
-	private GrailsApplication application;
-	private ScaffoldResponseHandler defaultResponseHandler;
-	
-	
-	public DefaultGrailsResponseHandlerFactory(GrailsApplication application, ScaffoldResponseHandler defaultResponseHandler) {
-		super();
-		if(defaultResponseHandler == null)
-			throw new IllegalStateException("Argument 'defaultResponseHandler' is required");
-		if(application == null)
-			throw new IllegalStateException("Argument 'application' is required");		
-		
-		this.application = application;
-		this.defaultResponseHandler = defaultResponseHandler;
-	}
-
-	public ScaffoldResponseHandler getScaffoldResponseHandler(String uri) {
-		// for now just return the default
-		return defaultResponseHandler;
-	}
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffoldViewResolver.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffoldViewResolver.java
deleted file mode 100644
index 78d2d17..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffoldViewResolver.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsControllerClass;
-/**
- * A view resolver that uses a GrailsApplication instance to resolve view names from uris
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class DefaultGrailsScaffoldViewResolver implements ScaffoldViewResolver {
-
-	private GrailsApplication application;
-
-	public DefaultGrailsScaffoldViewResolver(GrailsApplication application) {
-		this.application = application;
-	}
-
-	public String resolveViewForUri(String uri) {
-		GrailsControllerClass controllerClass = application.getControllerByURI(uri);
-		
-		if(controllerClass != null) {
-			return controllerClass.getViewByURI(uri);
-		}
-		return null;
-	}
-
-	public String resolveViewForUriAndAction(String uri, String action) {
-		if(StringUtils.isBlank(action)) {
-			return resolveViewForUri(uri);
-		}
-		GrailsControllerClass controllerClass = application.getControllerByURI(uri);
-		
-		if(controllerClass != null) {
-			return controllerClass.getViewByName(action);
-		}
-		return null;
-	}
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffolder.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffolder.java
deleted file mode 100644
index 43441a3..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsScaffolder.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import org.codehaus.groovy.grails.scaffolding.exceptions.ScaffoldingException;
-import org.codehaus.groovy.grails.web.metaclass.ChainDynamicMethod;
-import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods;
-import org.codehaus.groovy.grails.web.metaclass.RedirectDynamicMethod;
-import org.codehaus.groovy.grails.web.metaclass.RenderDynamicMethod;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.HashMap;
-import java.util.Map;
-/**
- * The default implementation of scaffolding for Grails domain class and controller
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class DefaultGrailsScaffolder implements GrailsScaffolder {
-
-    private static final String INDEX_ACTION = "index";
-    private static final String LIST_ACTION = "list";
-	private static final String SHOW_ACTION = "show";
-	private static final String EDIT_ACTION = "edit";		
-	private static final String DELETE_ACTION = "delete";
-	private static final String CREATE_ACTION = "create";
-	private static final String SAVE_ACTION = "save";			
-	private static final String UPDATE_ACTION = "update";	
-	
-	// TODO: Implement search scaffolding
-	private static final String SEARCH_ACTION = "search";
-	private static final String FIND_ACTION = "find";	
-	
-	
-
-	private ScaffoldRequestHandler scaffoldRequestHandler;
-	private ScaffoldResponseHandlerFactory scaffoldResponseHandlerFactory;
-
-	/**
-	 * Abstract base class that extends closure and retrieves the necessary arguments from the controller
-	 * This is used to inject closure properties into controllers so controller actions appear as if by magic.
-	 */
-	static abstract class AbstractAction extends Closure {
-		protected GroovyObject controller;
-		protected HttpServletRequest request;
-		protected HttpServletResponse response;
-		protected ScaffoldRequestHandler scaffoldRequestHandler;
-		protected ScaffoldResponseHandlerFactory scaffoldResponseFactory;
-		protected ScaffoldResponseHandler scaffoldResponseHandler;
-		
-		public AbstractAction(Object owner) {
-			super(owner);
-			controller = (GroovyObject)getOwner();
-			request = (HttpServletRequest)controller.getProperty(ControllerDynamicMethods.REQUEST_PROPERTY);
-			response = (HttpServletResponse)controller.getProperty(ControllerDynamicMethods.RESPONSE_PROPERTY);
-		}
-
-		/**
-		 * @param scaffoldRequestHandler The scaffoldRequestHandler to set.
-		 */
-		public void setScaffoldRequestHandler(
-				ScaffoldRequestHandler scaffoldRequestHandler) {
-			this.scaffoldRequestHandler = scaffoldRequestHandler;
-		}
-
-		public void setScaffoldResponseHandlerFactory(ScaffoldResponseHandlerFactory factory) {
-			this.scaffoldResponseFactory = factory;
-			this.scaffoldResponseHandler = this.scaffoldResponseFactory.getScaffoldResponseHandler(request.getRequestURI());
-		}					
-	}
-	
-	/**
-	 * A closure that handles a call to a scaffolded list action    
-	 */
-	class ListAction extends AbstractAction {
-		public ListAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			Map model = this.scaffoldRequestHandler.handleList(request,response);
-			return scaffoldResponseHandler.handleResponse(request,response,LIST_ACTION,model);
-		}
-		
-	}
-
-	/**
-	 * A closure that handles a call to a scaffolded list action
-	 */
-	class IndexAction extends AbstractAction {
-		public IndexAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-            Map arguments = new HashMap();
-            arguments.put( RedirectDynamicMethod.ARGUMENT_ACTION, LIST_ACTION );
-            return controller.invokeMethod(RedirectDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-		}
-
-	}
-
-    /**
-	 * A closure that handles a call to a scaffolded list action    
-	 */
-	class CreateAction extends AbstractAction {
-		public CreateAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-            Map model = this.scaffoldRequestHandler.handleCreate(request,response,new DefaultScaffoldCallback());
-            return scaffoldResponseHandler.handleResponse(request,response,CREATE_ACTION,model);
-		}
-		
-	}	
-	
-	/**
-	 * A closure action that implements showing a scaffolded instance by id. If the id is not
-	 * specified it redirects to the "list" action 
-	 */
-	class ShowAction extends AbstractAction {
-
-		public ShowAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			
-			ScaffoldCallback callback = new DefaultScaffoldCallback();
-			Map model = this.scaffoldRequestHandler.handleShow(request,response, callback);
-			
-			if(callback.isInvoked()) {				
-				return scaffoldResponseHandler.handleResponse(request,response,SHOW_ACTION,model);
-			}
-			else {
-				Map arguments = new HashMap();
-				arguments.put( RedirectDynamicMethod.ARGUMENT_ACTION, LIST_ACTION );
-				return controller.invokeMethod(RedirectDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-			}
-		}
-		
-	}
-	
-	/**
-	 * A closure action that implements editing a scaffolded instance by id. At the moment it is the same
-	 * as ShowAction, but could differ in the future as it may load other model instances to support editing
-	 * an instance including the GrailsDomainClass instance
-	 */
-	class EditAction extends AbstractAction {
-
-		public EditAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			
-			ScaffoldCallback callback = new DefaultScaffoldCallback();
-			Map model = this.scaffoldRequestHandler.handleShow(request,response, callback);
-			
-			if(callback.isInvoked()) {
-				return scaffoldResponseHandler.handleResponse(request,response,EDIT_ACTION,model);
-			}
-			else {
-				Closure listAction = (Closure)controller.getProperty(LIST_ACTION);
-				Map arguments = new HashMap();
-				arguments.put( RedirectDynamicMethod.ARGUMENT_ACTION, listAction );
-				arguments.put( RedirectDynamicMethod.ARGUMENT_ERRORS, callback.getErrors() );
-				return controller.invokeMethod(RedirectDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-			}
-		}
-		
-	}	
-	
-	/**
-	 * A closure action that implements deletion of a scaffolded instance by id. The instance is deleted and then
-	 * the action redirects to "list"
-	 */
-	class DeleteAction extends AbstractAction {
-
-		public DeleteAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			
-			ScaffoldCallback callback = new DefaultScaffoldCallback();
-			// delete
-			this.scaffoldRequestHandler.handleDelete(request,response, callback);
-			
-			// now redirect to list
-			Closure listAction = (Closure)controller.getProperty(LIST_ACTION);
-			Map arguments = new HashMap();
-			arguments.put( RedirectDynamicMethod.ARGUMENT_ACTION, listAction );
-			return controller.invokeMethod(RedirectDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });					
-		}
-		
-	}	
-	
-	/**
-	 * A closure action that implements the saving of new scaffoled instances. If the instance is created successfully
-	 * the action redirects to "show" for the id, otherwise it redirects to "create"
-	 */
-	class SaveAction extends AbstractAction {
-
-		public SaveAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			
-			ScaffoldCallback callback = new DefaultScaffoldCallback();
-			// save
-			Map model = this.scaffoldRequestHandler.handleSave(request,response, callback);
-			if(callback.isInvoked()) {
-				Closure showAction = (Closure)controller.getProperty(SHOW_ACTION);
-				Map arguments = new HashMap();
-				arguments.put( RedirectDynamicMethod.ARGUMENT_ACTION, showAction );
-                arguments.put( RedirectDynamicMethod.ARGUMENT_ID, model.get(ChainDynamicMethod.ARGUMENT_ID) );
-				return controller.invokeMethod(RedirectDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-			}
-			else {
-				Map arguments = new HashMap();
-				arguments.put( RenderDynamicMethod.ARGUMENT_VIEW, CREATE_ACTION );
-				arguments.put( RenderDynamicMethod.ARGUMENT_MODEL,model );
-				return controller.invokeMethod(RenderDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-			}
-			
-		}
-		
-	}	
-	
-	/**
-	 * A closure action that implements the updating of an existing scaffoled instances. If the instance is updated successfully
-	 * the action redirects to "show" for the id, otherwise it redirects to "edit"
-	 */
-	class UpdateAction extends AbstractAction {
-
-		public UpdateAction(Object owner) {
-			super(owner);
-		}
-
-		/* (non-Javadoc)
-		 * @see groovy.lang.Closure#call(java.lang.Object[])
-		 */
-		public Object call(Object[] args) {
-			
-			ScaffoldCallback callback = new DefaultScaffoldCallback();
-			// save
-			Map model = this.scaffoldRequestHandler.handleUpdate(request,response, callback);
-			if(callback.isInvoked()) {
-				Closure showAction = (Closure)controller.getProperty(SHOW_ACTION);
-				Map arguments = new HashMap();
-				arguments.put( ChainDynamicMethod.ARGUMENT_ACTION, showAction );				
-				arguments.put( ChainDynamicMethod.ARGUMENT_MODEL, model );
-				arguments.put( ChainDynamicMethod.ARGUMENT_PARAMS, model );
-				return controller.invokeMethod(ChainDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });				
-			}
-			else {
-				Map arguments = new HashMap();
-				arguments.put( RenderDynamicMethod.ARGUMENT_VIEW, EDIT_ACTION );
-				arguments.put( RenderDynamicMethod.ARGUMENT_MODEL,model );
-				return controller.invokeMethod(RenderDynamicMethod.METHOD_SIGNATURE,new Object[]{ arguments });
-			}
-			
-		}
-		
-	}		
-	protected static Map actions = new HashMap();
-	protected static Map actionClassToNameMap = new HashMap();
-	
-	public static String[] ACTION_NAMES;
-	
-	static {
-		actions.put( INDEX_ACTION, IndexAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(IndexAction.class, INDEX_ACTION);
-
-        actions.put( LIST_ACTION, ListAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(ListAction.class, LIST_ACTION);
-		
-		actions.put( SHOW_ACTION, ShowAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(ShowAction.class, SHOW_ACTION);
-		
-		actions.put( EDIT_ACTION, EditAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(EditAction.class, EDIT_ACTION);
-		
-		actions.put( DELETE_ACTION, DeleteAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(DeleteAction.class, DELETE_ACTION);
-		
-		actions.put( SAVE_ACTION, SaveAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(SaveAction.class, SAVE_ACTION);
-		
-		actions.put( UPDATE_ACTION, UpdateAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(UpdateAction.class, UPDATE_ACTION);		
-		
-		actions.put( CREATE_ACTION, CreateAction.class.getConstructors()[0] );
-		actionClassToNameMap.put(CreateAction.class, CREATE_ACTION);				
-		
-		// setup the action names
-		ACTION_NAMES = (String[])actions.keySet().toArray( new String[actions.keySet().size()] );
-	}
-	
-	public boolean supportsAction(String actionName) {
-		if(actions.containsKey(actionName))
-			return true;
-		return false;
-	}
-
-	public Closure getAction(GroovyObject controller,String actionName) {
-		Constructor c = (Constructor)actions.get(actionName);
-		AbstractAction action;
-		try {
-			action = (AbstractAction)c.newInstance(new Object[]{this, controller });
-			action.setScaffoldRequestHandler(this.scaffoldRequestHandler);	
-			action.setScaffoldResponseHandlerFactory(this.scaffoldResponseHandlerFactory);
-		} catch (IllegalArgumentException e) {
-			throw new ScaffoldingException("Illegal argument instantiating action ["+actionName+"] for controller ["+controller.getClass().getName()+"]: " + e.getMessage(),e);
-		} catch (InstantiationException e) {
-			throw new ScaffoldingException("Error instantiating action ["+actionName+"] for controller ["+controller.getClass().getName()+"]: " + e.getMessage(),e);
-		} catch (IllegalAccessException e) {
-			throw new ScaffoldingException("Illegal access instantiating action ["+actionName+"] for controller ["+controller.getClass().getName()+"]: " + e.getMessage(),e);
-		} catch (InvocationTargetException e) {
-			throw new ScaffoldingException("Invocation error instantiating action ["+actionName+"] for controller ["+controller.getClass().getName()+"]: " + e.getMessage(),e);
-		}
-		return action;
-	}
-
-
-
-	/**
-	 * @param scaffoldRequestHandler The scaffoldRequestHandler to set.
-	 */
-	public void setScaffoldRequestHandler(
-			ScaffoldRequestHandler scaffoldRequestHandler) {
-		this.scaffoldRequestHandler = scaffoldRequestHandler;		
-	}
-
-	
-	/**
-	 * @param scaffoldResponseHandlerFactory The scaffoldResponseHandlerFactory to set.
-	 */
-	public void setScaffoldResponseHandlerFactory(
-			ScaffoldResponseHandlerFactory scaffoldResponseHandlerFactory) {
-		this.scaffoldResponseHandlerFactory = scaffoldResponseHandlerFactory;
-	}
-
-	public String[] getSupportedActionNames() {		
-		return ACTION_NAMES;
-	}
-
-	public String getActionName(Closure action) {
-		return (String)actionClassToNameMap.get(action.getClass());
-	}
-
-    public ScaffoldRequestHandler getScaffoldRequestHandler() {
-        return this.scaffoldRequestHandler;
-    }
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy
deleted file mode 100644
index 34c2bad..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy
+++ /dev/null
@@ -1,579 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
-/**
- * Default implementation of the generator that generates grails artifacts (controllers, views etc.)
- * from the domain model
- *
- * @author Graeme Rocher
- * @since 09-Feb-2006
- */
-class DefaultGrailsTemplateGenerator implements GrailsTemplateGenerator  {
-
-    Log LOG = LogFactory.getLog(DefaultGrailsTemplateGenerator.class);
-    @Property String basedir
-    @Property boolean overwrite = false
-    def engine = new groovy.text.SimpleTemplateEngine()
-
-    // a closure that uses the type to render the appropriate editor
-    def renderEditor = { property ->
-        def domainClass = property.domainClass
-        def cp = domainClass.constrainedProperties[property.name]
-        
-        def display = (cp ? cp.display : true)        
-        if(!display) return ''
-        
-	def buf = new StringBuffer("<tr class='prop'>")
-	buf << "<td valign='top' style='text-align:left;' width='20%'><label for='${property.name}'>${property.naturalName}:</label></td>"
-	buf << "<td valign='top' style='text-align:left;' width='80%' class='\${hasErrors(bean:${domainClass.propertyName},field:'${property.name}','errors')}'>"
-            if(Number.class.isAssignableFrom(property.type))
-                buf << renderNumberEditor(domainClass,property)
-            else if(property.type == String.class)
-                buf << renderStringEditor(domainClass,property)
-            else if(property.type == Boolean.class || property.type == boolean.class)
-                buf << renderBooleanEditor(domainClass,property)
-            else if(property.type == Date.class)
-                buf << renderDateEditor(domainClass,property)
-            else if(property.type == TimeZone.class)
-                buf << renderSelectTypeEditor("timeZone",domainClass,property)
-            else if(property.type == Locale.class)
-                buf << renderSelectTypeEditor("locale",domainClass,property)
-            else if(property.type == Currency.class)
-                buf << renderSelectTypeEditor("currency",domainClass,property)
-            else if(property.type==([] as Byte[]).class) //TODO: Bug in groovy means i have to do this :(
-                buf << renderByteArrayEditor(domainClass,property)
-            else if(property.manyToOne || property.oneToOne)
-                buf << renderManyToOne(domainClass,property)
-            else if(property.oneToMany || property.manyToMany)
-                buf << renderOneToMany(domainClass,property)
-                
-       buf << '</td></tr>'
-       return buf.toString()
-    }
-
-    public void generateViews(GrailsDomainClass domainClass, String destdir) {
-        if(!destdir)
-            throw new IllegalArgumentException("Argument [destdir] not specified")
-
-        def viewsDir = new File("${destdir}/grails-app/views/${domainClass.propertyName}")
-        if(!viewsDir.exists())
-            viewsDir.mkdirs()
-
-        LOG.info("Generating list view for domain class [${domainClass.fullName}]")
-        generateListView(domainClass,viewsDir)
-        LOG.info("Generating show view for domain class [${domainClass.fullName}]")
-        generateShowView(domainClass,viewsDir)
-        LOG.info("Generating edit view for domain class [${domainClass.fullName}]")
-        generateEditView(domainClass,viewsDir)
-        LOG.info("Generating create view for domain class [${domainClass.fullName}]")
-        generateCreateView(domainClass,viewsDir)
-    }
-
-    public void generateController(GrailsDomainClass domainClass, String destdir) {
-        if(!destdir)
-            throw new IllegalArgumentException("Argument [destdir] not specified")
-
-        if(domainClass) {
-            def destFile = new File("${destdir}/grails-app/controllers/${domainClass.shortName}Controller.groovy")
-            if(destFile.exists()) {
-                LOG.info("Controller ${destFile.name} already exists skipping")
-                return
-            }
-            destFile.parentFile.mkdirs()
-
-            def templateText = '''
-class ${className}Controller {
-    @Property index = { redirect(action:list,params:params) }
-
-    @Property list = {
-        if(!params['max']) params['max'] = 10
-        [ ${propertyName}List: ${className}.list( params ) ]
-    }
-
-    @Property show = {
-        [ ${propertyName} : ${className}.get( params['id'] ) ]
-    }
-
-    @Property delete = {
-        def ${propertyName} = ${className}.get( params['id'] )
-        if(${propertyName}) {
-            ${propertyName}.delete()
-            flash['message'] = "${className} \\${params['id']} deleted."
-            redirect(action:list)
-        }
-        else {
-            flash['message'] = "${className} not found with id \\${params['id']}"
-            redirect(action:list)
-        }
-    }
-
-    @Property edit = {
-        def ${propertyName} = ${className}.get( params['id'] )
-
-        if(!${propertyName}) {
-                flash['message'] = "${className} not found with id \\${params['id']}"
-                redirect(action:list)
-        }
-        else {
-            return [ ${propertyName} : ${propertyName} ]
-        }
-    }
-
-    @Property update = {
-        def ${propertyName} = ${className}.get( params['id'] )
-        if(${propertyName}) {
-             ${propertyName}.properties = params
-            if(${propertyName}.save()) {
-                redirect(action:show,id:${propertyName}.id)
-            }
-            else {
-                render(view:'edit',model:[${propertyName}:${propertyName}])
-            }
-        }
-        else {
-            flash['message'] = "${className} not found with id \\${params['id']}"
-            redirect(action:edit,id:params['id'])
-        }
-    }
-
-    @Property create = {
-        def ${propertyName} = new ${className}()
-        ${propertyName}.properties = params
-        return ['${propertyName}':${propertyName}]
-    }
-
-    @Property save = {
-        def ${propertyName} = new ${className}()
-        ${propertyName}.properties = params
-        if(${propertyName}.save()) {
-            redirect(action:show,id:${propertyName}.id)
-        }
-        else {
-            render(view:'create',model:[${propertyName}:${propertyName}])
-        }
-    }
-
-}'''
-
-            def binding = [ className: domainClass.shortName, propertyName:domainClass.propertyName ]
-            def t = engine.createTemplate(templateText)
-
-            destFile.withWriter { w ->
-                t.make(binding).writeTo(w)
-            }
-
-            LOG.info("Controller generated at ${destFile}")
-        }
-    }
-
-    private renderStringEditor(domainClass, property) {
-        def cp = domainClass.constrainedProperties[property.name]
-        if(!cp) {
-            return "<input type='text' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}' />"
-        }
-        else {
-            if(cp.maxLength > 250 && !cp.password && !cp.inList) {
-                return "<textarea rows='1' cols='1' name='${property.name}'>\${${domainClass.propertyName}?.${property.name}}</textarea>"
-            }
-            else {
-                if(cp.inList) {
-                   def sb = new StringBuffer('<select ')
-                   sb << "name='${property.name}'>">
-                   cp.inList.each {
-                        sb << "<option value='${it}'>${it}</option>"
-                   }
-                   sb << '</select>'
-                   return sb.toString()
-                }
-                else {
-                    def sb = new StringBuffer('<input ')
-                    cp.password ? sb << 'type="password" ' : sb << 'type="text" '
-                    if(!cp.editable) sb << 'readonly="readonly" '
-                    if(cp.maxLength < Integer.MAX_VALUE ) sb << "maxlength='${cp.maxLength}' "
-                    sb << "name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></input>"
-                    return sb.toString()
-                }
-            }
-        }
-    }
-
-    private renderByteArrayEditor(domainClass,property) {
-        return "<input type='file' name='${property.name}'></input>"
-    }
-
-    private renderManyToOne(domainClass,property) {
-        if(property.association) {            
-            return "<g:select optionKey=\"id\" from=\"\${${property.type.name}.list()}\" name='${property.name}.id' value='\${${domainClass.propertyName}?.${property.name}?.id}'></g:select>"
-        }
-    }
-
-    private renderOneToMany(domainClass,property) {
-        def sw = new StringWriter()
-        def pw = new PrintWriter(sw)
-        pw.println '<ul>'
-        pw.println "    <g:each var='${property.name[0]}' in='\${${domainClass.propertyName}.${property.name}}'>"
-        pw.println "        <li><g:link controller='${property.referencedDomainClass.propertyName}' action='show' id='\${${property.name[0]}.id}'>\${${property.name[0]}}</g:link></li>"
-        pw.println "    </g:each>"
-        pw.println "</ul>"
-        pw.println "<g:link controller='${property.referencedDomainClass.propertyName}' params='[\"${domainClass.propertyName}.id\":${domainClass.propertyName}?.id]' action='create'>Add ${property.referencedDomainClass.shortName}</g:link>"
-        return sw.toString()
-    }
-
-    private renderNumberEditor(domainClass,property) {
-        def cp = domainClass.constrainedProperties[property.name]
-        if(!cp) {
-            if(property.type == Byte.class) {
-                return "<g:select from='\${-128..127}' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:select>"
-            }
-            else {
-                return "<input type='text' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></input>"
-            }
-        }
-        else {
-            if(cp.range) {
-                return "<g:select from='\${${cp.range.from}..${cp.range.to}}' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:select>"
-            }
-            else if(cp.size) {
-                return "<g:select from='\${${cp.size.from}..${cp.size.to}}' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:select>"
-            }
-            else {
-                return "<input type='text' name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></input>"
-            }
-        }
-    }
-
-    private renderBooleanEditor(domainClass,property) {
-
-        def cp = domainClass.constrainedProperties[property.name]
-        if(!cp) {
-            return "<g:checkBox name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:checkBox>"
-        }
-        else {
-            def buf = new StringBuffer('<g:checkBox ')
-            if(cp.widget) buf << "widget='${cp.widget}'";
-
-            buf << "name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}' "
-            cp.attributes.each { k,v ->
-                  buf << "${k}=\"${v}\" "
-            }
-            buf << '></g:checkBox>'
-            return buf.toString()
-        }
-
-    }
-
-    private renderDateEditor(domainClass,property) {
-        def cp = domainClass.constrainedProperties[property.name]
-        if(!cp) {
-            return "<g:datePicker name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:datePicker>"
-        }
-        else {
-            def buf = new StringBuffer('<g:datePicker ')
-            if(cp.widget) buf << "widget='${cp.widget}' ";
-
-            if(cp.format) buf << "format='${cp.format}' ";
-            cp.attributes.each { k,v ->
-                  buf << "${k}=\"${v}\" "
-            }
-            buf << "name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:datePicker>"
-            return buf.toString()
-        }
-    }
-
-    private renderSelectTypeEditor(type,domainClass,property) {
-       def cp = domainClass.constrainedProperties[property.name]
-        if(!cp) {
-            return "<g:${type}Select name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:${type}Select>"
-        }
-        else {
-            def buf = new StringBuffer('<g:${type}Select ')
-            if(cp.widget) buf << "widget='${cp.widget}' ";
-            cp.attributes.each { k,v ->
-                  buf << "${k}=\"${v}\" "
-            }
-            buf << "name='${property.name}' value='\${${domainClass.propertyName}?.${property.name}}'></g:${type}Select>"
-            return buf.toString()
-        }
-    }
-
-
-
-
-    private generateListView(domainClass, destDir) {
-        def listFile = new File("${destDir}/list.gsp")
-        if(!listFile.exists() || overwrite) {
-            def templateText = '''
-<html>
-    <head>
-         <title>${className} List</title>
-         <link rel="stylesheet" href="\\${createLinkTo(dir:'css',file:'main.css')}"></link>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><g:link action="index">Home</g:link></span>
-            <span class="menuButton"><g:link action="create">New ${className}</g:link></span>
-        </div>
-        <div class="body">
-           <h1>${className} List</h1>
-            <g:if test="flash['message']">
-                 <div class="message">
-                       \\${flash['message']}
-                 </div>
-            </g:if>
-           <table>
-               <tr>
-                   <%
-                        props = domainClass.properties.findAll { it.name != 'version' && it.type != Set.class }
-                        Collections.sort(props, new org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator(domainClass))
-                   %>
-                   <%props.eachWithIndex { p,i ->
-                   	if(i < 6) {%>                   
-                        <th>${p.naturalName}</th>
-                   <%}}%>
-                   <th></th>
-               </tr>
-               <g:each in="\\${${propertyName}List}">
-                    <tr>
-                       <%props.eachWithIndex { p,i ->
-                             if(i < 6) {%>
-                            <td>\\${it.${p.name}}</td>
-                       <%}}%>
-                       <td class="actionButtons">
-                            <span class="actionButton"><g:link action="show" id="\\${it.id}">Show</g:link></span>
-                       </td>
-                    </tr>
-               </g:each>
-           </table>
-        </div>
-    </body>
-</body>
-            '''
-
-            def t = engine.createTemplate(templateText)
-            def binding = [ domainClass: domainClass, className:domainClass.shortName,propertyName:domainClass.propertyName ]
-
-            listFile.withWriter { w ->
-                t.make(binding).writeTo(w)
-            }
-            LOG.info("list view generated at ${listFile.absolutePath}")
-        }
-    }
-
-    private generateShowView(domainClass,destDir) {
-        def showFile = new File("${destDir}/show.gsp")
-        if(!showFile.exists() || overwrite) {
-            def templateText = '''
-<html>
-    <head>
-         <title>Show ${className}</title>
-         <link rel="stylesheet" href="\\${createLinkTo(dir:'css',file:'main.css')}"></link>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><g:link action="index">Home</g:link></span>
-            <span class="menuButton"><g:link action="list">${className} List</g:link></span>
-            <span class="menuButton"><g:link action="create">New ${className}</g:link></span>
-        </div>
-        <div class="body">
-           <h1>Show ${className}</h1>
-           <g:if test="\\${flash['message']}">
-                 <div class="message">\\${flash['message']}</div>
-           </g:if>
-           <div class="dialog">
-                 <table>
-                   <%
-                        props = domainClass.properties.findAll { it.name != 'version' }
-                        Collections.sort(props, new org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator(domainClass))
-                   %>
-                   <%props.each { p ->%>
-                        <tr class="prop">
-                              <td valign="top" style="text-align:left;" width="20%" class="name">${p.naturalName}:</td>
-                              <% if(p.oneToMany) { %>
-                                     <td  valign="top" style="text-align:left;" class="value">
-                                        <ul>
-                                            <g:each var="${p.name[0]}" in="\\${${propertyName}.${p.name}}">
-                                                <li><g:link controller="${p.referencedDomainClass?.propertyName}" action="show" id="\\${${p.name[0]}.id}">\\${${p.name[0]}}</g:link></li>
-                                            </g:each>
-                                        </ul>
-                                     </td>
-                              <% } else if(p.manyToOne || p.oneToOne) { %>
-                                    <td valign="top" style="text-align:left;" class="value"><g:link controller="${p.referencedDomainClass?.propertyName}" action="show" id="\\${${propertyName}?.${p.name}?.id}">\\${${propertyName}?.${p.name}}</g:link></td>
-                              <% } else  { %>
-                                    <td valign="top" style="text-align:left;" class="value">\\${${propertyName}.${p.name}}</td>
-                              <% } %>
-                        </tr>
-                   <%}%>
-                 </table>
-           </div>
-           <div class="buttons">
-               <g:form controller="${propertyName}">
-                 <input type="hidden" name="id" value="\\${${propertyName}?.id}" />
-                 <span class="button"><g:actionSubmit value="Edit" /></span>
-                 <span class="button"><g:actionSubmit value="Delete" /></span>
-               </g:form>
-           </div>
-        </div>
-    </body>
-</body>
-            '''
-
-            def t = engine.createTemplate(templateText)
-            def binding = [ domainClass: domainClass, className:domainClass.shortName,propertyName:domainClass.propertyName ]
-
-            showFile.withWriter { w ->
-                t.make(binding).writeTo(w)
-            }
-            LOG.info("Show view generated at ${showFile.absolutePath}")
-        }
-    }
-
-    private generateEditView(domainClass,destDir) {
-        def editFile = new File("${destDir}/edit.gsp")
-        if(!editFile.exists() || overwrite) {
-            def templateText = '''
-<html>
-    <head>
-         <title>Edit ${className}</title>
-         <link rel="stylesheet" href="\\${createLinkTo(dir:'css',file:'main.css')}"></link>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><g:link action="index">Home</g:link></span>
-            <span class="menuButton"><g:link action="list">${className} List</g:link></span>
-            <span class="menuButton"><g:link action="create">New ${className}</g:link></span>
-        </div>
-        <div class="body">
-           <h1>Edit ${className}</h1>
-           <g:if test="\\${flash['message']}">
-                 <div class="message">\\${flash['message']}</div>
-           </g:if>
-           <g:hasErrors bean="\\${${propertyName}}">
-                <div class="errors">
-                    <g:renderErrors bean="\\${${propertyName}}" as="list" />
-                </div>
-           </g:hasErrors>
-           <div class="prop">
-	      <span class="name">Id:</span>
-	      <span class="value">\\${${propertyName}?.id}</span>
-	      <input type="hidden" name="${propertyName}.id" value="\\${${propertyName}?.id}" />
-           </div>           
-           <g:form controller="${propertyName}" method="post">
-               <input type="hidden" name="id" value="\\${${propertyName}?.id}" />
-               <div class="dialog">
-                <table>
-
-                       <%
-                            props = domainClass.properties.findAll { it.name != 'version' && it.name != 'id' }
-                            Collections.sort(props, new org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator(domainClass))
-                       %>
-                       <%props.each { p ->%>
-				${renderEditor(p)}
-                       <%}%>
-                </table>
-               </div>
-
-               <div class="buttons">
-                     <span class="button"><g:actionSubmit value="Update" /></span>
-                     <span class="button"><g:actionSubmit value="Delete" /></span>
-               </div>
-            </g:form>
-        </div>
-    </body>
-</body>
-            '''
-
-            def t = engine.createTemplate(templateText)
-            def binding = [ domainClass: domainClass,
-                            className:domainClass.shortName,
-                            propertyName:domainClass.propertyName,
-                            renderEditor:renderEditor ]
-
-            editFile.withWriter { w ->
-                t.make(binding).writeTo(w)
-            }
-            LOG.info("Edit view generated at ${editFile.absolutePath}")
-        }
-    }
-
-    private generateCreateView(domainClass,destDir) {
-        def createFile = new File("${destDir}/create.gsp")
-        if(!createFile.exists() || overwrite) {
-            def templateText = '''
-<html>
-    <head>
-         <title>Create ${className}</title>
-         <link rel="stylesheet" href="\\${createLinkTo(dir:'css',file:'main.css')}"></link>
-    </head>
-    <body>
-        <div class="nav">
-            <span class="menuButton"><g:link action="index">Home</g:link></span>
-            <span class="menuButton"><g:link action="list">${className} List</g:link></span>
-        </div>
-        <div class="body">
-           <h1>Create ${className}</h1>
-           <g:if test="\\${flash['message']}">
-                 <div class="message">\\${flash['message']}</div>
-           </g:if>
-           <g:hasErrors bean="\\${${propertyName}}">
-                <div class="errors">
-                    <g:renderErrors bean="\\${${propertyName}}" as="list" />
-                </div>
-           </g:hasErrors>
-           <g:form action="save" method="post">
-               <div class="dialog">
-                <table>
-
-                       <%
-                            props = domainClass.properties.findAll { it.name != 'version' && it.name != 'id' }
-                            Collections.sort(props, new org.codehaus.groovy.grails.scaffolding.DomainClassPropertyComparator(domainClass))
-                       %>
-                       <%props.each { p ->
-                            if(p.type != Set.class) { %>
-                                  ${renderEditor(p)}
-                       <%}}%>
-               </table>
-               </div>
-               <div class="buttons">
-                     <span class="formButton">
-                        <input type="submit" value="Create"></input>
-                     </span>
-               </div>
-            </g:form>
-        </div>
-    </body>
-</body>
-            '''
-
-            def t = engine.createTemplate(templateText)
-            def binding = [ domainClass: domainClass,
-                            className:domainClass.shortName,
-                            propertyName:domainClass.propertyName,
-                            renderEditor:renderEditor ]
-
-            createFile.withWriter { w ->
-                t.make(binding).writeTo(w)
-            }
-            LOG.info("Create view generated at ${createFile.absolutePath}")
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldCallback.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldCallback.java
deleted file mode 100644
index 2521ead..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldCallback.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.codehaus.groovy.grails.scaffolding;
-
-import java.util.Map;
-
-import org.springframework.validation.Errors;
-
-public class DefaultScaffoldCallback implements ScaffoldCallback {
-
-	private boolean invoked;
-	private Errors errors;
-	private Map model;
-	/**
-	 * @return Returns the errors.
-	 */
-	public Errors getErrors() {
-		return errors;
-	}
-	/**
-	 * @param errors The errors to set.
-	 */
-	public void setErrors(Errors errors) {
-		this.errors = errors;
-	}
-	/**
-	 * @return Returns the invoked.
-	 */
-	public boolean isInvoked() {
-		return invoked;
-	}
-	/**
-	 * @param invoked The invoked to set.
-	 */
-	public void setInvoked(boolean invoked) {
-		this.invoked = invoked;
-	}
-	/**
-	 * @return Returns the model.
-	 */
-	public Map getModel() {
-		return model;
-	}
-	/**
-	 * @param model The model to set.
-	 */
-	public void setModel(Map model) {
-		this.model = model;
-	}
-	
-	
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldDomain.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldDomain.java
deleted file mode 100644
index c5abd83..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldDomain.java
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import ognl.DefaultTypeConverter;
-import ognl.Ognl;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.scaffolding.exceptions.ScaffoldingException;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.hibernate.*;
-import org.hibernate.criterion.Order;
-import org.hibernate.criterion.Restrictions;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.orm.hibernate3.HibernateCallback;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.validation.BindException;
-import org.springframework.validation.Errors;
-import org.springframework.validation.Validator;
-
-import java.beans.PropertyDescriptor;
-import java.io.Serializable;
-import java.lang.InstantiationException;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-/**
- * The default implementation of a Scaffolding application that uses Hibernate as the persistence mechanism
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class DefaultScaffoldDomain implements ScaffoldDomain {
-
-	private static final Log LOG  = LogFactory.getLog(DefaultScaffoldDomain.class);
-	private static final String LIST_SUFFIX = "List";
-	private Class persistentClass;
-	private HibernateTemplate template;
-	private SessionFactory sessionFactory;
-	
-	private Map context = Ognl.createDefaultContext(this);
-	private DefaultTypeConverter converter = new DefaultTypeConverter();
-	private BeanWrapper bean;
-	private Class identityClass;
-	private Validator validator;
-	private String identityPropertyName;
-	
-	public DefaultScaffoldDomain(Class persistentClass,
-			SessionFactory sessionFactory) {
-		
-		setPersistentClass(persistentClass);
-		setSessionFactory(sessionFactory);		
-	}
-	
-
-	/**
-	 * @param validator The validator to set.
-	 */
-	public void setValidator(Validator validator) {
-		this.validator = validator;
-	}
-
-
-	public void setIdentityPropertyName(String identityPropertyName) {
-		PropertyDescriptor identityProp = this.bean.getPropertyDescriptor(identityPropertyName);
-		identityClass = identityProp.getPropertyType();
-		this.identityPropertyName = identityPropertyName;
-	}
-
-	/**
-	 * @param sessionFactory The sessionFactory to set.
-	 */
-	protected void setSessionFactory(SessionFactory sessionFactory) {
-		this.sessionFactory = sessionFactory;
-		this.template = new HibernateTemplate(this.sessionFactory);
-		this.template.setFlushMode(HibernateTemplate.FLUSH_AUTO);
-	}
-
-	public List list() {
-		return template.loadAll(persistentClass);
-	}
-
-	public List list(final int max) {
-		return list(max, -1,null,null);
-	}
-
-	public List list(final int max, final int offset) {
-		return list(max, offset,null,null);
-	}
-	
-	public List list(int max, int offset, String sort) {
-		return list(max, offset,sort,null);
-	}
-
-
-	public List list(final int max, final int offset, final String sort, final String order) {
-		return template.executeFind( new HibernateCallback() {
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				Criteria c = session.createCriteria(persistentClass);
-				
-				if(max > -1)
-					c.setMaxResults(max);
-				if(offset > -1)
-					c.setFirstResult(offset);
-				
-				if(sort != null) {
-					if(order != null) {
-						if(order.equalsIgnoreCase("DESC")) {
-							c.addOrder(Order.desc(sort));
-						}
-						else {
-							c.addOrder(Order.asc(sort));	
-						}
-					}
-					else {
-						c.addOrder(Order.asc(sort));
-					}
-
-				}				
-				return c.list();
-			}			
-		});
-	}
-	
-
-	public List find(String by, Object q) {
-		return find(by,q,-1,-1);
-	}
-
-	public List find(String by, Object q, int max) {
-		return find(by,q,max,-1);
-	}
-
-	public List find(final String by, Object q, final int max, final int offset) {
-		if(StringUtils.isBlank(by) || q == null)
-			return new ArrayList();
-		
-		if(this.bean.isReadableProperty(by)) {
-			Class propertyType = this.bean.getPropertyType(by);
-			if(!propertyType.isAssignableFrom( q.getClass() )) {
-				q = converter.convertValue(context, q, propertyType);
-			}
-			
-			final Object query = q;
-			if(q != null) {
-				return this.template.executeFind( new HibernateCallback() {
-					public Object doInHibernate(Session session) throws HibernateException, SQLException {
-						Criteria c = session.createCriteria(persistentClass);
-						if(max > -1)
-							c.setMaxResults(max);
-						if(offset > -1)
-							c.setFirstResult(offset);
-						
-						c.add( Restrictions.eq( by, query ) );
-						
-						return c.list();
-					}					
-				});
-			}
-		}
-		return new ArrayList();
-	}
-
-	public List find(String[] by, Object[] q) {
-		return find(by,q,-1,-1);
-	}
-
-	public List find(String[] by, Object[] q, int max) {
-		return find(by,q,max,-1);
-	}
-
-	public List find(final String[] by, Object[] q, final int max, final int offset) {
-		if(by == null || by.length == 0 || q == null || q.length == 0)
-			return new ArrayList();
-		
-		
-		final List ignoreList = new ArrayList();
-		
-		for (int i = 0; i < by.length; i++) {
-			if(this.bean.isReadableProperty(by[i]) && i < q.length) {
-				Class propertyType = this.bean.getPropertyType(by[i]);
-				if(!propertyType.isAssignableFrom( q[i].getClass() )) {
-					q[i] = converter.convertValue(context, q[i], propertyType);
-				}
-				if(q[i] == null) {
-					ignoreList.add(by[i]);
-				}
-			}
-			else {
-				ignoreList.add(by[i]);
-			}
-		}
-		
-		final Object[] query = q; 
-		if(by.length < ignoreList.size()) {
-			return this.template.executeFind( new HibernateCallback() {
-				public Object doInHibernate(Session session) throws HibernateException, SQLException {
-					Criteria c = session.createCriteria(persistentClass);
-					if(max > -1)
-						c.setMaxResults(max);
-					if(offset > -1)
-						c.setFirstResult(offset);
-					
-					for (int i = 0; i < by.length; i++) {
-						if(!ignoreList.contains(by[i])) {
-							c.add( Restrictions.eq( by[i], query[i] ) );
-						}
-					}										
-					return c.list();
-				}					
-			});			
-		}
-		return new ArrayList();
-	}
-
-	public boolean save(Object domainObject, ScaffoldCallback callback) {
-		
-			if(validator != null) {
-				Errors errors = new BindException(domainObject,persistentClass.getName());				
-				validator.validate(domainObject,errors);
-				if(errors.hasErrors()) {
-					callback.setErrors(errors);
-					callback.setInvoked(false);
-					return false;
-				}					
-			}
-			
-			template.save(domainObject);			
-		
-		return true;
-	}
-	
-	public boolean update(final Object domainObject, final ScaffoldCallback callback) {		
-		
-		template.execute( new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				Transaction tx = session.beginTransaction();
-				if(validator != null) {
-					Errors errors = new BindException(domainObject,persistentClass.getName());
-					validator.validate(domainObject,errors);
-					if(errors.hasErrors()) {
-						callback.setErrors(errors);
-						callback.setInvoked(false);					
-						return null;
-					}					
-				}	
-							
-				session.update(domainObject);
-				tx.commit();
-				
-				if(LOG.isTraceEnabled()) {
-					LOG.trace("[ScaffoldDomain] Updated ["+domainObject+"]. Setting invoked.");
-				}
-				callback.setInvoked(true);
-				
-				
-				return domainObject;
-			}
-			
-		});
-		
-		return callback.isInvoked();
-	}	
-
-	public Object delete(Serializable id) {
-		if(id == null)
-			throw new IllegalArgumentException("Argument 'id' cannot be null");
-		
-		id = (Serializable)converter.convertValue(context,id,identityClass);
-		
-		Object instance = template.get(persistentClass,id);
-		if(instance != null) {
-			template.delete(instance);
-		}
-		return instance;
-	}
-
-
-
-	protected void setPersistentClass(Class persistentClass) {
-		if(persistentClass == null)
-			throw new IllegalArgumentException("Argument 'persistentClass' cannot be null");
-		
-		this.persistentClass = persistentClass;
-		try {
-			this.bean = new BeanWrapperImpl(persistentClass.newInstance());
-		} catch (InstantiationException e) {
-			throw new ScaffoldingException("Unable to instantiate persistent class ["+persistentClass+"] for scaffolding: " + e.getMessage(), e);
-		} catch (IllegalAccessException e) {
-			throw new ScaffoldingException("Unable to instantiate persistent class ["+persistentClass+"] for scaffolding: " + e.getMessage(), e);
-		}
-	}
-
-	public Object get(Serializable id) {
-		if(id == null)
-			throw new IllegalArgumentException("Argument 'id' cannot be null");
-		if(identityClass != null)
-		    id = (Serializable)converter.convertValue(context,id,identityClass);
-
-        return template.get(persistentClass,id);
-	}
-
-	public String getPluralName() {
-		return GrailsClassUtils.getPropertyNameRepresentation(persistentClass) + LIST_SUFFIX;
-	}
-
-	public Class getPersistentClass() {
-		return this.persistentClass;
-	}
-
-	public String getSingularName() {
-        return GrailsClassUtils.getPropertyNameRepresentation(persistentClass);
-	}
-
-
-	public String getIdentityPropertyName() {
-		return this.identityPropertyName;
-	}
-
-
-	public String getName() {
-		return this.persistentClass.getName();
-	}
-
-
-	public Object newInstance() {
-		try {
-			return this.persistentClass.newInstance();		
-		} catch (InstantiationException e) {
-			throw new ScaffoldingException("Unable to instantiate persistent class ["+persistentClass+"] for scaffolding: " + e.getMessage(), e);
-		} catch (IllegalAccessException e) {
-			throw new ScaffoldingException("Unable to instantiate persistent class ["+persistentClass+"] for scaffolding: " + e.getMessage(), e);
-		} 
-	}
-
-
-
-
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldRequestHandler.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldRequestHandler.java
deleted file mode 100644
index f9d1ed3..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DefaultScaffoldRequestHandler.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.web.binding.GrailsDataBinder;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.web.bind.ServletRequestDataBinder;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Default implementation of the ScaffoldRequestHandler interface
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class DefaultScaffoldRequestHandler implements ScaffoldRequestHandler {
-
-    private static final Log LOG = LogFactory.getLog(DefaultScaffoldRequestHandler.class);
-
-    private static final String PARAM_MAX = "max";
-    private static final String PARAM_OFFSET = "offset";
-    private static final String PARAM_ID = "id";
-    private static final String PARAM_SORT = "sort";
-    private static final String PARAM_ORDER = "order";
-
-    private ScaffoldDomain domain;
-
-    public void setScaffoldDomain(ScaffoldDomain domain) {
-        this.domain = domain;
-    }
-
-    public ScaffoldDomain getScaffoldDomain() {
-        return this.domain;
-    }
-
-    public Map handleList(HttpServletRequest request,
-                          HttpServletResponse response) {
-        int max = 10;
-        int offset = 0;
-        String maxParam = request.getParameter(PARAM_MAX);
-        String offsetParam = request.getParameter(PARAM_OFFSET);
-
-        if(!StringUtils.isBlank(maxParam)) {
-            try {
-                max = Integer.parseInt(maxParam);
-            }
-            catch(NumberFormatException nfe) {
-                LOG.warn("[ScaffoldRequestHandler] Error parsing max parameter ["+maxParam+"] for request", nfe);
-            }
-        }
-        if(!StringUtils.isBlank(offsetParam)) {
-            try {
-                offset = Integer.parseInt(offsetParam);
-            }
-            catch(NumberFormatException nfe) {
-                LOG.warn("[ScaffoldRequestHandler] Error parsing offset parameter ["+offsetParam+"] for request", nfe);
-            }
-        }
-        if(LOG.isTraceEnabled()) {
-            LOG.trace("[ScaffoldRequestHandler] Executing [list] for max ["+max+"] and offset ["+offset+"]");
-        }
-        Map model = new HashMap();
-        model.put( domain.getPluralName(), domain.list(max, offset, request.getParameter(PARAM_SORT), request.getParameter(PARAM_ORDER)) );
-
-        if(LOG.isTraceEnabled()) {
-            LOG.trace("[ScaffoldRequestHandler] Returned model ["+model+"] from domain method [list]");
-        }
-
-        return model;
-    }
-
-    public Map handleShow(HttpServletRequest request,
-                          HttpServletResponse response, ScaffoldCallback callback) {
-
-        String id = request.getParameter(PARAM_ID);
-        if(StringUtils.isBlank(id)) {
-            LOG.debug("[ScaffoldRequestHandler] No ID parameter ["+id+"] for request [show]");
-            callback.setInvoked(false);
-            return Collections.EMPTY_MAP;
-        }
-
-
-        Map model = new HashMap();
-        Object domainObject = domain.get(id);
-        model.put(domain.getSingularName(), domainObject);
-        callback.setInvoked(true);
-
-        return model;
-    }
-
-    public Map handleDelete(HttpServletRequest request,
-                            HttpServletResponse response, ScaffoldCallback callback) {
-
-        String id = request.getParameter(PARAM_ID);
-        if(StringUtils.isBlank(id)) {
-            LOG.debug("[ScaffoldRequestHandler] No ID parameter ["+id+"] for request [delete]");
-            callback.setInvoked(false);
-            return Collections.EMPTY_MAP;
-        }
-
-
-        Map model = new HashMap();
-        Object domainObject = domain.get(id);
-        model.put(domain.getSingularName(), domainObject);
-
-        if(domainObject != null) {
-            domain.delete(id);
-            callback.setInvoked(true);
-        }
-
-        return model;
-    }
-
-    public Map handleCreate(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback) {
-       Object domainObject = domain.newInstance();
-        ServletRequestDataBinder dataBinder = GrailsDataBinder.createBinder(domainObject, domain.getName(),request);
-        dataBinder.bind(request);
-
-        Map model = new HashMap();
-        model.put( domain.getSingularName(), domainObject);
-
-        return model;
-    }
-
-    public Map handleSave(HttpServletRequest request,
-                          HttpServletResponse reponse, ScaffoldCallback callback) {
-
-        Object domainObject = domain.newInstance();
-        ServletRequestDataBinder dataBinder = GrailsDataBinder.createBinder(domainObject, domain.getName(),request);
-        dataBinder.bind(request);
-
-        Map model = new HashMap();
-        model.put( domain.getSingularName(), domainObject);
-
-        if( this.domain.save(domainObject,callback) ) {
-            BeanWrapper domainBean = new BeanWrapperImpl(domainObject);
-            Object identity = domainBean.getPropertyValue(domain.getIdentityPropertyName());
-            model.put( PARAM_ID, identity );
-            callback.setInvoked(true);
-        }
-        return model;
-    }
-
-
-    public Map handleUpdate(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback) {
-        String id = request.getParameter(PARAM_ID);
-        if(StringUtils.isBlank(id)) {
-            LOG.debug("[ScaffoldRequestHandler] No ID parameter ["+id+"] for request [update]");
-            callback.setInvoked(false);
-            return Collections.EMPTY_MAP;
-        }
-
-        Object domainObject = this.domain.get(id);
-        ServletRequestDataBinder dataBinder = GrailsDataBinder.createBinder(domainObject, domain.getName(),request);
-        dataBinder.bind(request);
-
-        Map model = new HashMap();
-        model.put(	this.domain.getSingularName(), domainObject);
-        model.put( PARAM_ID, id );
-        // execute update
-        this.domain.update(domainObject,callback);
-
-        return model;
-    }
-
-    public Map handleFind(HttpServletRequest request,
-                          HttpServletResponse reponse) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparator.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparator.java
deleted file mode 100644
index 339f6c8..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparator.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-
-import java.util.Comparator;
-import java.util.Map;
-
-/**
- * Comparator that uses the domain class property constraints to establish order in sort methods and always
- * places the id first
- *
- * @author Graeme Rocher
- * @since 10-Feb-2006
- */
-public class DomainClassPropertyComparator implements Comparator {
-    private Map constrainedProperties;
-    private GrailsDomainClass domainClass;
-
-    public DomainClassPropertyComparator(GrailsDomainClass domainClass) {
-        if(domainClass == null)
-            throw new IllegalArgumentException("Argument 'domainClass' is required!");
-
-        this.constrainedProperties = domainClass.getConstrainedProperties();
-        this.domainClass = domainClass;
-    }
-
-    public int compare(Object o1, Object o2) {
-        if(o1.equals(domainClass.getIdentifier()))
-            return -1;
-        else if(o2.equals(domainClass.getIdentifier()))
-            return 1;
-
-        GrailsDomainClassProperty prop1 = (GrailsDomainClassProperty)o1;
-        GrailsDomainClassProperty prop2 = (GrailsDomainClassProperty)o2;
-
-        ConstrainedProperty cp1 = (ConstrainedProperty)constrainedProperties.get(prop1.getName());
-        ConstrainedProperty cp2 = (ConstrainedProperty)constrainedProperties.get(prop2.getName());
-
-        if(cp1 == null & cp2 == null)
-            return prop1.getName().compareTo(prop2.getName());
-        if(cp1 == null)
-            return 1;
-        else if(cp2 == null)
-            return -1;
-        else {
-            if(cp1.getOrder() > cp2.getOrder())
-                return 1;
-            else if(cp1.getOrder() < cp2.getOrder())
-                return -1;
-            else
-                return 0;
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffoldDomain.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffoldDomain.java
deleted file mode 100644
index b139068..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffoldDomain.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.codehaus.groovy.grails.metaclass.DomainClassMethods;
-import org.codehaus.groovy.grails.orm.hibernate.metaclass.DeletePersistentMethod;
-import org.codehaus.groovy.grails.orm.hibernate.metaclass.SavePersistentMethod;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.hibernate.SessionFactory;
-import org.springframework.validation.Errors;
-
-import java.io.Serializable;
-
-/**
- * Extends the default domain to delegate to Grails specific dynamic methods
- *
- * @author Graeme Rocher
- * @since 23-Feb-2006
- */
-public class GrailsScaffoldDomain extends DefaultScaffoldDomain implements ScaffoldDomain{
-    public GrailsScaffoldDomain(Class persistentClass, SessionFactory sessionFactory) {
-        super(persistentClass, sessionFactory);
-    }
-
-    public boolean save(Object domainObject, ScaffoldCallback callback) {
-        Boolean b = (Boolean)InvokerHelper.invokeMethod(domainObject,SavePersistentMethod.METHOD_SIGNATURE, new Object[0]);
-        boolean success = b.booleanValue();
-        if(!success) {
-            callback.setErrors((Errors)InvokerHelper.getProperty(domainObject, DomainClassMethods.ERRORS_PROPERTY));
-        }
-
-        return success;
-    }
-
-    public boolean update(final Object domainObject, final ScaffoldCallback callback) {
-        Boolean b = (Boolean)InvokerHelper.invokeMethod(domainObject,SavePersistentMethod.METHOD_SIGNATURE, new Object[0]);
-        boolean success = b.booleanValue();
-        if(!success) {
-            callback.setErrors((Errors)InvokerHelper.getProperty(domainObject, DomainClassMethods.ERRORS_PROPERTY));
-        }
-
-        return success;
-    }
-
-    public Object delete(Serializable id) {
-        Object domainObject = get(id);
-
-        if(domainObject != null) {
-            InvokerHelper.invokeMethod(domainObject, DeletePersistentMethod.METHOD_SIGNATURE, new Object[0]);
-        }
-        return domainObject;
-    }
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffolder.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffolder.java
deleted file mode 100644
index b747151..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsScaffolder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-/**
- * An interface that facilitates the required methods for using Scaffolding within GrailsControllers 
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface GrailsScaffolder {
-
-	/**
-	 * @param actionName The name of the action
-	 * @return True if the action is supported by the scaffolder
-	 */
-	boolean supportsAction(String actionName);
-	
-	/**
-	 * @return A String array of actions names supported by the scaffolder
-	 */
-	String[] getSupportedActionNames();
-	/**
-	 * @param actionName
-	 * @return A Closure instance for the specified action name
-	 */
-	Closure getAction(GroovyObject controller,String actionName);
-	
-	/**
-	 * Returns the action name for the specified closure instance
-	 * 
-	 * @param action The closure action
-	 * @return The name of the action
-	 */
-	String getActionName(Closure action);
-
-    /**
-     *
-     *  @return The ScaffoldRequestHandler instance
-     */
-    ScaffoldRequestHandler getScaffoldRequestHandler();
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGenerator.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGenerator.java
deleted file mode 100644
index 8b7e759..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGenerator.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-
-/**
- * An interface that defines methods for generating Grails artifacts from a domain class
- *
- * @author Graeme Rocher
- * @since 09-Feb-2006
- */
-public interface GrailsTemplateGenerator {
-
-     /**
-     * Generates the necessary views for the supplied domain class
-     * @param domainClass
-     */
-    void generateViews(GrailsDomainClass domainClass, String destDir);
-
-    /**
-     * Generates a controller for the supplied domain class
-     * @param domainClass
-     */
-    void generateController(GrailsDomainClass domainClass, String destDir);
-
-    /**
-     * Whether the generator should overwrite existing files (defaults to false)
-     *
-     * @param shouldOverwrite
-     */
-    void setOverwrite(boolean shouldOverwrite);
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldCallback.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldCallback.java
deleted file mode 100644
index a0132a8..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldCallback.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.codehaus.groovy.grails.scaffolding;
-
-import java.util.Map;
-
-import org.springframework.validation.Errors;
-
-public interface ScaffoldCallback {
-
-	boolean isInvoked();
-	
-	void setInvoked(boolean invoked);
-	
-	Errors getErrors();
-	
-	void setErrors(Errors errors);
-	
-	Map getModel();
-	
-	void setModel(Map model);
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldDomain.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldDomain.java
deleted file mode 100644
index 410cada..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldDomain.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import org.springframework.validation.Validator;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * The main interface used by scaffolded controllers to access instances of persistent classes
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface ScaffoldDomain {
-
-    /**
-     * Sets the name of the identity property so that type conversion can be performed
-     * @param identityPropertyName
-     */
-    void setIdentityPropertyName(String identityPropertyName);
-
-    /**
-     * Sets the validator to use
-     * @param validator
-     */
-    void setValidator(Validator validator);
-    /**
-	 * Retrieves the scaffolded persistent class
-	 */
-	Class getPersistentClass();
-		
-	/** 
-	 * @return All persistent instances of the scaffolded class 
-	 */
-	List list();
-	/**
-	 * 
-	 * @param max The maximum number of instances to return
-	 * @return All persistent instances up to the maximum specified value
-	 */
-	List list(int max);
-	/**
-	 * 
-	 * @param max The maximum number to return
-	 * @param offset The offset position
-	 * @return All persistent instances up to the maximum, offset by the specified value
-	 */
-	List list(int max, int offset);
-	
-	/**
-	 * 
-	 * @param max The maximum number to return (Set to -1 for no maximum)
-	 * @param offset The offset position (Set to -1 for no offset)
-	 * @param order either "ASC" for ascending or "DESC" for descending
-	 * 
-	 * @return All persistent instances up to the maximum, offset by the specified value
-	 */
-	List list(int max, int offset, String sort);	
-	/**
-	 * 
-	 * @param max The maximum number to return (Set to -1 for no maximum)
-	 * @param offset The offset position (Set to -1 for no offset)
-	 * @param order either "ASC" for ascending or "DESC" for descending
-	 * @param sort The property name to sort by 
-	 * 
-	 * @return All persistent instances up to the maximum, offset by the specified value
-	 */
-	List list(int max, int offset, String sort, String order);	
-	/**
-	 * Finds all persistent instances for the specified property name and value
-	 * 
-	 * @param by The property to find by
-	 * @param q The query criteria
-	 * @return A list of found persistent instances
-	 */
-	List find(String by, Object q);
-	
-	/**
-	 * @see #find(String, Object) for description
-	 * 
-	 * @param max The maximum number of results to return
-	 */
-	List find(String by, Object q, int max);
-	
-	/**
-	 * @see #find(String, Object) for description
-	 * 
-	 * @param max The maximum number of results to return
-	 * @param offset The offset position
-	 */	
-	List find(String by,Object q, int max, int offset);
-	
-	/**
-	 * Finds all the persistent instances for the specified properties and query values
-	 * 
-	 * @param by The properties to find by
-	 * @param q The query values
-	 * @return A list of persistent instances
-	 */
-	List find(String[] by, Object[] q);
-	
-	/**
-	 * @see #find(String[], Object[]) for description
-	 * 
-	 * @param max The maximum number of results to return
-	 */
-	List find(String[] by, Object q[], int max);
-	
-	/**
-	 * @see #find(String[], Object[]) for description
-	 * 
-	 * @param max The maximum number of results to return
-	 * @param offset The offset position
-	 */	
-	List find(String[] by,Object[] q, int max, int offset);	
-	
-	/**
-	 * Saves an instance of the persistent class using the specified properties
-	 * 
-	 * @param domainObject The domain object to save
-	 * @param callback Any validation errors that may have occured during saving
-	 * 
-	 * @return The saved instance or null if save was unsuccessful
-	 */
-	boolean save(Object domainObject, ScaffoldCallback callback);
-	
-	/**
-	 * Updates an existing instance
-	 * 
-	 * @param id
-	 * @param domainObject
-	 * @return The updated instance
-	 */
-	boolean update(Object domainObject, ScaffoldCallback callback);
-	
-	/**
-	 * 	
-	 * @param id
-	 * @return
-	 */
-	Object delete(Serializable id);
-	
-	/**
-	 * Retrieves an persistent class instance for the specified id
-	 * @param id
-	 * @return
-	 */
-	Object get(Serializable id);
-	
-	/**
-	 * Returns the plural name of the domain
-	 * @return
-	 */
-	String getPluralName();
-
-	/**
-	 * Returns the singular name of the domain
-	 * @return
-	 */
-	String getSingularName();
-
-	/**
-	 * 
-	 * @return The identity property name
-	 */
-	String getIdentityPropertyName();
-
-	/**
-	 * 
-	 * @return The full name of the domain class
-	 */
-	String getName();
-
-	/**
-	 * 
-	 * @return A new instance of the domain class
-	 */
-	Object newInstance();
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldRequestHandler.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldRequestHandler.java
deleted file mode 100644
index 32a8ff5..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldRequestHandler.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
-
-/**
- * An interface defining methods to handle CRUD operations involved in scaffolding
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface ScaffoldRequestHandler {
-
-	/**
-	 * Sets the domain to use during scaffolding. A scaffold domain provides methods to manipulate
-	 * the scaffolded persistent class
-	 * @param domain
-	 */
-	void setScaffoldDomain(ScaffoldDomain domain);
-
-    /**
-     * @return The domain being scaffolded
-     */
-    ScaffoldDomain getScaffoldDomain();
-
-    /**
-	 * Handles a request to list all scaffolded instances
-	 * @param request 
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */
-	Map handleList(HttpServletRequest request, HttpServletResponse reponse);
-	
-	/**
-	 * Handles a request to show a scaffolded instance
-	 * 
-	 * @param request
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */
-	Map handleShow(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback);
-	
-	/**
-	 * Handles a request to delete a scaffolded instance
-	 * 
-	 * @param request
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */	
-	Map handleDelete(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback);
-
-    /**
-     * Handles a create request
-     *
-     * @param request
-     * @param reponse
-     * @param callback
-     * @return Optionally a map which reperesents the generated model
-     */
-    Map handleCreate(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback);
-    /**
-	 * Handles a request to save a scaffolded instance
-	 * 
-	 * @param request
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */	
-	Map handleSave(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback);
-	
-	/**
-	 * Handles a request to update a scaffolded instance
-	 * 
-	 * @param request
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */	
-	Map handleUpdate(HttpServletRequest request, HttpServletResponse reponse, ScaffoldCallback callback);	
-	
-	/**
-	 * Handles a request to find a scaffolded instance
-	 * 
-	 * @param request
-	 * @param reponse
-	 * @return Optionally a map which represents the generated model
-	 */	
-	Map handleFind(HttpServletRequest request, HttpServletResponse reponse);
-		
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandler.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandler.java
deleted file mode 100644
index dfe2a13..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandler.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.web.servlet.ModelAndView;
-/**
- * An interface defining methods to handle responses. Implementors of this interface are responsible 
- * for transforming the model into an appropriate ModelAndView instance or writing directly to the
- * response
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface ScaffoldResponseHandler {
-
-	/**
-	 * Creates the response for a Scaffolded model and optionally returns a ModelAndView instance
-	 * 
-	 * @param request 
-	 * @param response
-	 * @param model
-	 * @return
-	 */
-	ModelAndView handleResponse(HttpServletRequest request,HttpServletResponse response, String actionName, Map model);
-	
-	/**
-	 * The view resolver to use for resovling views for the response
-	 * @param resolver
-	 */
-	void setScaffoldViewResolver(ScaffoldViewResolver resolver);
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandlerFactory.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandlerFactory.java
deleted file mode 100644
index 9dc882d..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldResponseHandlerFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-/**
- * An interface that defines factory methds for creating ScaffoldResponse instances
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface ScaffoldResponseHandlerFactory {
-
-	/**
-	 * Retrieves a scaffold response handler for the specified uri
-	 * 
-	 * @param id
-	 * @return
-	 */
-	ScaffoldResponseHandler getScaffoldResponseHandler(String uri);
-	
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldViewResolver.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldViewResolver.java
deleted file mode 100644
index 70ef64a..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldViewResolver.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-/**
- * An interface that defines the strategy for resolving view names from a scaffolded URI
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public interface ScaffoldViewResolver {
-	
-	String resolveViewForUri(String uri);
-	String resolveViewForUriAndAction(String uri, String action);
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ServletContextTemplateFactory.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ServletContextTemplateFactory.java
deleted file mode 100644
index bc6eb4d..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ServletContextTemplateFactory.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import groovy.text.SimpleTemplateEngine;
-import groovy.text.Template;
-import groovy.text.TemplateEngine;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.servlet.ServletContext;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * A template factory that looks up templates from the servlet context
- *
- * @author Graeme Rocher
- * @since 06-Jan-2006
- */
-public class ServletContextTemplateFactory implements TemplateFactory {
-
-    public static final Log LOG = LogFactory.getLog(ServletContextTemplateFactory.class);
-    public static final String PATH_PREFIX = "/WEB-INF/grails-app/views/scaffolding/";
-    public static final String PATH_SUFFIX = ".gsp";
-
-    private ServletContext servletContext;
-    private TemplateEngine templateEngine = new SimpleTemplateEngine();
-    private Map cachedTemplates = new HashMap();
-    private Map cachedUrls = new HashMap();
-    public ServletContextTemplateFactory(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-
-    /**
-     * Simple class to hold the last modified info and file name
-     */
-    class StoredTemplate {
-        private Template template;
-        private URL url;
-        private long lastModified;
-    }
-    public Template findTemplateForType(Class type) {
-        try {
-            if(LOG.isTraceEnabled()) {
-                LOG.trace("[TemplateFactory] Attempting to retrieve template for type ["+type+"]");
-            }
-            URL templateUrl;
-            if(cachedTemplates.containsKey(type)) {
-                templateUrl = (URL)cachedUrls.get(type);
-            }
-            else {
-                templateUrl = locateTemplateUrl(type);
-                cachedUrls.put(type,templateUrl);
-            }
-
-            if(templateUrl != null) {
-                Template t;
-                URLConnection con = templateUrl.openConnection();
-
-                if(cachedTemplates.containsKey(type)) {
-                    StoredTemplate st = (StoredTemplate)cachedTemplates.get(type);
-                    if(con.getLastModified() > st.lastModified) {
-                        t = templateEngine.createTemplate(templateUrl);
-                        st.template = t;
-                        st.lastModified = con.getLastModified();
-                    }
-                    else {
-                        t = st.template;
-                    }
-                }
-                else {
-                    t = templateEngine.createTemplate(templateUrl);
-                    StoredTemplate st = new StoredTemplate();
-                    st.lastModified = con.getLastModified();
-                    st.template = t;
-                    st.url = templateUrl;
-                    cachedTemplates.put(type,st);
-                }
-                if(LOG.isTraceEnabled()) {
-                    LOG.trace("[TemplateFactory] Building template for URL ["+templateUrl+"]");
-                }
-
-                return t;
-            }
-
-        } catch (CompilationFailedException e) {
-            LOG.error("Failed to compile template for type ["+type+"]: " + e.getMessage(),e);
-        } catch (ClassNotFoundException e) {
-            LOG.error("Class not found compiling template for type ["+type+"]: " + e.getMessage(),e);
-        } catch (IOException e) {
-           LOG.error("I/O error reading template for type ["+type+"]: " + e.getMessage(),e);
-        }
-        return null;
-    }
-
-    private URL locateTemplateUrl(Class type)
-                throws MalformedURLException {
-        if(type == Object.class)
-            return null;
-
-        URL returnUrl = this.servletContext.getResource(PATH_PREFIX + type.getName() + PATH_SUFFIX);
-        if(returnUrl == null) {
-            return locateTemplateUrl(type.getSuperclass());
-        }
-        return returnUrl;
-    }
-
-    public Template findNamedTemplateForType(Class type, String name) {
-        throw new UnsupportedOperationException("Not yet implemented");
-    }
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/TemplateFactory.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/TemplateFactory.java
deleted file mode 100644
index 6f31513..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/TemplateFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.codehaus.groovy.grails.scaffolding;
-
-import groovy.text.Template;
-
-/**
- * An interface that defines methods for retrieving templates for specific scaffolded types
- *
- * @author Graeme Rocher
- * @since 06-Jan-2006
- */
-public interface TemplateFactory {
-
-    /**
-     * Locates a template for the given type
-     * @param type The type to locate a a template for
-     * @return A Template instance or null if non was found for the specified type
-     *
-     */
-    Template findTemplateForType(Class type);
-
-    /**
-     * Locates a named template for the given type
-     * @param type The type of the template to locate
-     * @param name The name of the template
-     * @return A Template instance or null if none was found
-     */
-    Template findNamedTemplateForType(Class type, String name );
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ViewDelegatingScaffoldResponseHandler.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ViewDelegatingScaffoldResponseHandler.java
deleted file mode 100644
index 9909e2d..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/ViewDelegatingScaffoldResponseHandler.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.web.servlet.ModelAndView;
-/**
- * A response handler that simple delegates control to a view resolved by the set ViewResolver
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class ViewDelegatingScaffoldResponseHandler implements ScaffoldResponseHandler {
-
-	private ScaffoldViewResolver scaffoldViewResolver;
-
-	public ModelAndView handleResponse(HttpServletRequest request,
-			HttpServletResponse response, String actionName, Map model) {
-		if(scaffoldViewResolver == null)
-			throw new IllegalStateException("Property [viewResolver] is required to be set, but is null");
-		
-		
-		return new ModelAndView(
-				scaffoldViewResolver.resolveViewForUriAndAction(request.getRequestURI(), actionName), 
-					model );
-	}
-
-	public void setScaffoldViewResolver(ScaffoldViewResolver resolver) {
-		this.scaffoldViewResolver = resolver;
-	}
-
-
-}
diff --git a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/exceptions/ScaffoldingException.java b/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/exceptions/ScaffoldingException.java
deleted file mode 100644
index 623aaaf..0000000
--- a/groovy/modules/grails/src/scaffolding/org/codehaus/groovy/grails/scaffolding/exceptions/ScaffoldingException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-/**
- * Exception thrown generally when initialisation of scaffolding fails
- * 
- * @author Graeme Rocher
- * @since 30 Nov 2005
- */
-public class ScaffoldingException extends GrailsException {
-
-	public ScaffoldingException() {
-		super();
-	}
-
-	public ScaffoldingException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public ScaffoldingException(String arg0) {
-		super(arg0);
-	}
-
-	public ScaffoldingException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/tiger/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsAnnotationConfiguration.java b/groovy/modules/grails/src/tiger/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsAnnotationConfiguration.java
deleted file mode 100644
index 6db6566..0000000
--- a/groovy/modules/grails/src/tiger/org/codehaus/groovy/grails/orm/hibernate/cfg/GrailsAnnotationConfiguration.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.orm.hibernate.cfg;
-
-import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.SessionFactory;
-import org.hibernate.HibernateException;
-import org.hibernate.MappingException;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * Allows configuring Grails' hibernate support to work in conjuntion with Hibernate's annotation
- * support
- *
- * @author Graeme Rocher
- * @since 18-Feb-2006
- */
-public class GrailsAnnotationConfiguration  extends AnnotationConfiguration implements GrailsDomainConfiguration{
-    private static final Log LOG  = LogFactory.getLog(GrailsAnnotationConfiguration.class);
-    /**
-     *
-     */
-    private static final long serialVersionUID = -7115087342689305517L;
-    private GrailsApplication grailsApplication;
-    private Set domainClasses;
-    private boolean configLocked;
-    private boolean configureDynamicMethods = true;
-
-    /**
-     *
-     */
-    public GrailsAnnotationConfiguration() {
-        super();
-        this.domainClasses = new HashSet();
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfiguration#addDomainClass(org.codehaus.groovy.grails.commons.GrailsDomainClass)
-      */
-    public GrailsDomainConfiguration addDomainClass( GrailsDomainClass domainClass ) {
-        if(domainClass.getMappedBy().equalsIgnoreCase( GrailsDomainClass.GORM )) {
-            this.domainClasses.add(domainClass);
-        }
-
-        return this;
-    }
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainConfiguration#setGrailsApplication(org.codehaus.groovy.grails.commons.GrailsApplication)
-      */
-    public void setGrailsApplication(GrailsApplication application) {
-        this.grailsApplication = application;
-        if(this.grailsApplication != null) {
-            GrailsDomainClass[] existingDomainClasses = this.grailsApplication.getGrailsDomainClasses();
-            for(int i = 0; i < existingDomainClasses.length;i++) {
-                addDomainClass(existingDomainClasses[i]);
-            }
-        }
-    }
-
-
-
-
-    /* (non-Javadoc)
-      * @see org.hibernate.cfg.Configuration#buildSessionFactory()
-      */
-    public SessionFactory buildSessionFactory() throws HibernateException {
-
-        SessionFactory sessionFactory =  super.buildSessionFactory();
-        if(configureDynamicMethods) {
-            configureDynamicMethods(sessionFactory);
-        }
-        return sessionFactory;
-    }
-
-    public void configureDynamicMethods(SessionFactory sf) {
-        GrailsDomainConfigurationUtil.configureDynamicMethods(sf,this.grailsApplication);
-    }
-
-    public void setConfigureDynamicMethods(boolean shouldConfigure) {
-        this.configureDynamicMethods = shouldConfigure;
-    }
-
-    /**
-     *  Overrides the default behaviour to including binding of Grails
-     *  domain classes
-     */
-    protected void secondPassCompile() throws MappingException {
-        if (configLocked) {
-            return;
-        }
-        // set the class loader to load Groovy classes
-        if(this.grailsApplication != null)
-            Thread.currentThread().setContextClassLoader( this.grailsApplication.getClassLoader() );
-        // do Grails class configuration
-        for(Iterator i = this.domainClasses.iterator();i.hasNext();) {
-            GrailsDomainClass domainClass = (GrailsDomainClass)i.next();
-
-            GrailsDomainBinder.bindClass(domainClass, super.createMappings());
-        }
-
-        // call super
-        super.secondPassCompile();
-        this.configLocked = true;
-    }}
diff --git a/groovy/modules/grails/src/war/WEB-INF/applicationContext.xml b/groovy/modules/grails/src/war/WEB-INF/applicationContext.xml
deleted file mode 100644
index b5f9136..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/applicationContext.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<import resource="spring/resources.xml"/>
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>**/*.groovy</value>
-		</property>
-	</bean>
-
-    <bean id="grailsResourceHolder" singleton="false" class="org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder">
-        <property name="resources">
-              <value>**/*.groovy</value>
-        </property>
-    </bean>
-	
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/groovy.lang.GroovyObject.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/groovy.lang.GroovyObject.gsp
deleted file mode 100644
index 1333ed7..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/groovy.lang.GroovyObject.gsp
+++ /dev/null
@@ -1 +0,0 @@
-TODO
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.gsp
deleted file mode 100644
index 5e39684..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.gsp
+++ /dev/null
@@ -1,7 +0,0 @@
-<input value="<%=value%>"
-       type="checkbox"
-       name="<%=name%>"
-        <% if(value) { %>checked="checked"<%}%>
-        <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>/>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.yesno.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.yesno.gsp
deleted file mode 100644
index 1a10601..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Boolean.yesno.gsp
+++ /dev/null
@@ -1,12 +0,0 @@
-<select name="<%=name%>"
-        <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>>
- <% if(value) { %>
-    <option value="true" selected="selected">Yes</option>
-    <option value="false">No</option>
- <%} else { %>
-    <option value="true">Yes</option>
-    <option value="false" selected="selected">No</option>
- <% } %>
-</select>
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte.template.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte.template.gsp
deleted file mode 100644
index 30404ce..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte.template.gsp
+++ /dev/null
@@ -1 +0,0 @@
-TODO
\ No newline at end of file
diff --git "a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte\133\135.gsp" "b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte\133\135.gsp"
deleted file mode 100644
index 8f1993d..0000000
--- "a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Byte\133\135.gsp"
+++ /dev/null
@@ -1,5 +0,0 @@
-<input type="file"
-       name="<%=name%>"
-        <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>/>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Number.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Number.gsp
deleted file mode 100644
index 953625d..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.Number.gsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<% if(value == null) value = 0; %>
-<% if(constraints != null) {
-    if(constraints.range != null) {
-        %>
-        <select name="<%=name%>"
-                <% constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } %>>
-            <% for(i in constraints.range) {%>
-                 <option value="<%=i%>"  <%if(i == value) {%>selected="selected"<%}%>><%=i%></option>
-            <%}%>
-        </select>
-    <%} else {%>
-       <input name="<%=name%>"
-              value="<%=value%>"
-               <% constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } %>/>
-    <%}%>
-<% } else {
-    %><input name="<%=name%>" value="<%=value%>" /><%
-   } %>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.String.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.String.gsp
deleted file mode 100644
index dbe4345..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.lang.String.gsp
+++ /dev/null
@@ -1,22 +0,0 @@
-<% if (value == null) value = "" %>
-<% if(constraints != null) {
-    if(constraints.maxLength < 150) { %>
-        <input type="<% if(constraints.password) { %>password<% } else { %>text<%}%>"
-               <% if(!constraints.editable){ %>readonly="readonly"<% } %>
-               maxlength="<%=constraints.maxLength%>"
-               name="<%=name%>"
-               value="<%=value%>"
-               <% constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } %>
-               />
-    <% } else { %>
-    <textarea
-          rows="1"
-          cols="1"
-          name="<%=name%>"
-           <% constraints.attributes.each { k,v -> %>
-             <%=k%>="<%=v%>"
-           <% } %>><%=value%></textarea>
-    <% } %>
-<% } else { %><textarea rows="1" cols="1" name="<%=name%>"><%=value%></textarea><% } %>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Calendar.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Calendar.gsp
deleted file mode 100644
index ea64188..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Calendar.gsp
+++ /dev/null
@@ -1 +0,0 @@
-//TODO
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Currency.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Currency.gsp
deleted file mode 100644
index 7db5ada..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Currency.gsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<%
-    if(value == null) {
-        value = java.util.Currency.getInstance( request.getLocale() );
-    }
-%>
-<select name="<%=name%>"
-        <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>>
-    <option value="EUR" <%if(value.currencyCode == "EUR") {%>selected="selected"<%}%>>EUR</option>
-    <option value="XCD" <%if(value.currencyCode == "XCD") {%>selected="selected"<%}%>>XCD</option>
-    <option value="USD" <%if(value.currencyCode == "USD") {%>selected="selected"<%}%>>USD</option>
-    <option value="XOF" <%if(value.currencyCode == "XOF") {%>selected="selected"<%}%>>XOF</option>
-    <option value="NOK" <%if(value.currencyCode == "NOK") {%>selected="selected"<%}%>>NOK</option>
-    <option value="AUD" <%if(value.currencyCode == "AUD") {%>selected="selected"<%}%>>AUD</option>
-    <option value="XAF" <%if(value.currencyCode == "XAF") {%>selected="selected"<%}%>>XAF</option>
-    <option value="NZD" <%if(value.currencyCode == "NZD") {%>selected="selected"<%}%>>NZD</option>
-    <option value="MAD" <%if(value.currencyCode == "MAD") {%>selected="selected"<%}%>>MAD</option>
-    <option value="DKK" <%if(value.currencyCode == "DKK") {%>selected="selected"<%}%>>DKK</option>
-    <option value="GBP" <%if(value.currencyCode == "GBP") {%>selected="selected"<%}%>>GBP</option>
-    <option value="CHF" <%if(value.currencyCode == "CHF") {%>selected="selected"<%}%>>CHF</option>
-    <option value="XPF" <%if(value.currencyCode == "XPF") {%>selected="selected"<%}%>>XPF</option>
-    <option value="ILS" <%if(value.currencyCode == "ILS") {%>selected="selected"<%}%>>ILS</option>
-    <option value="ROL" <%if(value.currencyCode == "ROL") {%>selected="selected"<%}%>>ROL</option>
-    <option value="TRL" <%if(value.currencyCode == "TRL") {%>selected="selected"<%}%>>TRL</option>
-</select>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Date.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Date.gsp
deleted file mode 100644
index 745b85a..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Date.gsp
+++ /dev/null
@@ -1,132 +0,0 @@
-<%
-    if(value == null) value = new Date()
-    c = new GregorianCalendar();
-    c.setTime(value)
-    day = c.get(GregorianCalendar.DAY_OF_MONTH)
-    month = c.get(GregorianCalendar.MONTH)
-    year = c.get(GregorianCalendar.YEAR)
-    hour = c.get(GregorianCalendar.HOUR_OF_DAY)
-    minute = c.get(GregorianCalendar.MINUTE)
-%>
-    <input type="hidden" name="<%=name%>" value="struct" />
-    <select name="<%=name%>_day">
-        <% for(i in 1..(day-1)) { %>
-               <option value="<%=i%>"><%=i%></option>
-        <% } %>
-        <option value="<%=day%>" selected="selected"><%=day%></option>
-        <%
-         for(i in (day+1)..31) { %>
-               <option value="<%=i%>"><%=i%></option>
-        <% } %>
-    </select>
-    <select name="<%=name%>_month">
-        <option value="1" <%if(month == 1) {%>selected="selected"<%}%>>January</option>
-        <option value="2" <%if(month == 2) {%>selected="selected"<%}%>>February</option>
-        <option value="3" <%if(month == 3) {%>selected="selected"<%}%>>March</option>
-        <option value="4" <%if(month == 4) {%>selected="selected"<%}%>>April</option>
-        <option value="5" <%if(month == 5) {%>selected="selected"<%}%>>May</option>
-        <option value="6" <%if(month == 6) {%>selected="selected"<%}%>>June</option>
-        <option value="7" <%if(month == 7) {%>selected="selected"<%}%>>July</option>
-        <option value="8" <%if(month == 8) {%>selected="selected"<%}%>>August</option>
-        <option value="9" <%if(month == 9) {%>selected="selected"<%}%>>September</option>
-        <option value="10" <%if(month == 10) {%>selected="selected"<%}%>>October</option>
-        <option value="11" <%if(month == 11) {%>selected="selected"<%}%>>November</option>
-        <option value="12" <%if(month == 12) {%>selected="selected"<%}%>>December</option>
-    </select>
-    <select name="<%=name%>_year">
-        <% for(i in (year - 80)..(year-1)) { %>
-               <option value="<%=i%>"><%=i%></option>
-        <% } %>
-        <option value="<%=year%>" selected="selected"><%=year%></option>
-        <% for(i in (year + 1)..(year+80)) { %>
-               <option value="<%=i%>"><%=i%></option>
-        <% } %>
-    </select> -
-    <select name="<%=name%>_hour">
-        <option value="00" <%if(hour == "00") {%>selected="selected"<%}%>>00</option>
-        <option value="01" <%if(hour == "01") {%>selected="selected"<%}%>>01</option>
-        <option value="02" <%if(hour == "02") {%>selected="selected"<%}%>>02</option>
-        <option value="03" <%if(hour == "03") {%>selected="selected"<%}%>>03</option>
-        <option value="04" <%if(hour == "04") {%>selected="selected"<%}%>>04</option>
-        <option value="05" <%if(hour == "05") {%>selected="selected"<%}%>>05</option>
-        <option value="06" <%if(hour == "06") {%>selected="selected"<%}%>>06</option>
-        <option value="07" <%if(hour == "07") {%>selected="selected"<%}%>>07</option>
-        <option value="08" <%if(hour == "08") {%>selected="selected"<%}%>>08</option>
-        <option value="09" <%if(hour == "09") {%>selected="selected"<%}%>>09</option>
-        <option value="10" <%if(hour == "10") {%>selected="selected"<%}%>>10</option>
-        <option value="11" <%if(hour == "11") {%>selected="selected"<%}%>>11</option>
-        <option value="12" <%if(hour == "12") {%>selected="selected"<%}%>>12</option>
-        <option value="13" <%if(hour == "13") {%>selected="selected"<%}%>>13</option>
-        <option value="14" <%if(hour == "14") {%>selected="selected"<%}%>>14</option>
-        <option value="15" <%if(hour == "15") {%>selected="selected"<%}%>>15</option>
-        <option value="16" <%if(hour == "16") {%>selected="selected"<%}%>>16</option>
-        <option value="17" <%if(hour == "17") {%>selected="selected"<%}%>>17</option>
-        <option value="18" <%if(hour == "18") {%>selected="selected"<%}%>>18</option>
-        <option value="19" <%if(hour == "19") {%>selected="selected"<%}%>>19</option>
-        <option value="10" <%if(hour == "20") {%>selected="selected"<%}%>>20</option>
-        <option value="21" <%if(hour == "21") {%>selected="selected"<%}%>>21</option>
-        <option value="22" <%if(hour == "22") {%>selected="selected"<%}%>>22</option>
-        <option value="23" <%if(hour == "23") {%>selected="selected"<%}%>>23</option>
-    </select>:
-    <select name="<%=name%>_minute">
-        <option value="00" <%if(minute == "00") {%>selected="selected"<%}%>>00</option>
-        <option value="01" <%if(minute == "01") {%>selected="selected"<%}%>>01</option>
-        <option value="02" <%if(minute == "02") {%>selected="selected"<%}%>>02</option>
-        <option value="03" <%if(minute == "03") {%>selected="selected"<%}%>>03</option>
-        <option value="04" <%if(minute == "04") {%>selected="selected"<%}%>>04</option>
-        <option value="05" <%if(minute == "05") {%>selected="selected"<%}%>>05</option>
-        <option value="06" <%if(minute == "06") {%>selected="selected"<%}%>>06</option>
-        <option value="07" <%if(minute == "07") {%>selected="selected"<%}%>>07</option>
-        <option value="08" <%if(minute == "08") {%>selected="selected"<%}%>>08</option>
-        <option value="09" <%if(minute == "09") {%>selected="selected"<%}%>>09</option>
-        <option value="10" <%if(minute == "10") {%>selected="selected"<%}%>>10</option>
-        <option value="11" <%if(minute == "11") {%>selected="selected"<%}%>>11</option>
-        <option value="12" <%if(minute == "12") {%>selected="selected"<%}%>>12</option>
-        <option value="13" <%if(minute == "13") {%>selected="selected"<%}%>>13</option>
-        <option value="14" <%if(minute == "14") {%>selected="selected"<%}%>>14</option>
-        <option value="15" <%if(minute == "15") {%>selected="selected"<%}%>>15</option>
-        <option value="16" <%if(minute == "16") {%>selected="selected"<%}%>>16</option>
-        <option value="17" <%if(minute == "17") {%>selected="selected"<%}%>>17</option>
-        <option value="18" <%if(minute == "18") {%>selected="selected"<%}%>>18</option>
-        <option value="19" <%if(minute == "19") {%>selected="selected"<%}%>>19</option>
-        <option value="10" <%if(minute == "20") {%>selected="selected"<%}%>>20</option>
-        <option value="21" <%if(minute == "21") {%>selected="selected"<%}%>>21</option>
-        <option value="22" <%if(minute == "22") {%>selected="selected"<%}%>>22</option>
-        <option value="23" <%if(minute == "23") {%>selected="selected"<%}%>>23</option>
-        <option value="23" <%if(minute == "24") {%>selected="selected"<%}%>>24</option>
-        <option value="23" <%if(minute == "25") {%>selected="selected"<%}%>>25</option>
-        <option value="23" <%if(minute == "26") {%>selected="selected"<%}%>>26</option>
-        <option value="23" <%if(minute == "27") {%>selected="selected"<%}%>>27</option>
-        <option value="23" <%if(minute == "28") {%>selected="selected"<%}%>>28</option>
-        <option value="23" <%if(minute == "29") {%>selected="selected"<%}%>>29</option>
-        <option value="23" <%if(minute == "30") {%>selected="selected"<%}%>>30</option>
-        <option value="23" <%if(minute == "31") {%>selected="selected"<%}%>>31</option>
-        <option value="23" <%if(minute == "32") {%>selected="selected"<%}%>>32</option>
-        <option value="23" <%if(minute == "33") {%>selected="selected"<%}%>>33</option>
-        <option value="23" <%if(minute == "34") {%>selected="selected"<%}%>>34</option>
-        <option value="23" <%if(minute == "35") {%>selected="selected"<%}%>>35</option>
-        <option value="23" <%if(minute == "36") {%>selected="selected"<%}%>>36</option>
-        <option value="23" <%if(minute == "37") {%>selected="selected"<%}%>>37</option>
-        <option value="23" <%if(minute == "38") {%>selected="selected"<%}%>>38</option>
-        <option value="23" <%if(minute == "39") {%>selected="selected"<%}%>>39</option>
-        <option value="23" <%if(minute == "40") {%>selected="selected"<%}%>>40</option>
-        <option value="23" <%if(minute == "41") {%>selected="selected"<%}%>>41</option>
-        <option value="23" <%if(minute == "42") {%>selected="selected"<%}%>>42</option>
-        <option value="23" <%if(minute == "43") {%>selected="selected"<%}%>>43</option>
-        <option value="23" <%if(minute == "44") {%>selected="selected"<%}%>>44</option>
-        <option value="23" <%if(minute == "45") {%>selected="selected"<%}%>>45</option>
-        <option value="23" <%if(minute == "46") {%>selected="selected"<%}%>>46</option>
-        <option value="23" <%if(minute == "47") {%>selected="selected"<%}%>>47</option>
-        <option value="23" <%if(minute == "48") {%>selected="selected"<%}%>>48</option>
-        <option value="23" <%if(minute == "49") {%>selected="selected"<%}%>>49</option>
-        <option value="23" <%if(minute == "50") {%>selected="selected"<%}%>>50</option>
-        <option value="23" <%if(minute == "51") {%>selected="selected"<%}%>>51</option>
-        <option value="23" <%if(minute == "52") {%>selected="selected"<%}%>>52</option>
-        <option value="23" <%if(minute == "53") {%>selected="selected"<%}%>>53</option>
-        <option value="23" <%if(minute == "54") {%>selected="selected"<%}%>>54</option>
-        <option value="23" <%if(minute == "55") {%>selected="selected"<%}%>>55</option>
-        <option value="23" <%if(minute == "56") {%>selected="selected"<%}%>>56</option>
-        <option value="23" <%if(minute == "57") {%>selected="selected"<%}%>>57</option>
-        <option value="23" <%if(minute == "58") {%>selected="selected"<%}%>>58</option>
-        <option value="23" <%if(minute == "59") {%>selected="selected"<%}%>>59</option>
-    </select>
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Locale.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Locale.gsp
deleted file mode 100644
index 8a84722..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Locale.gsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<% if(value == null) value = request.getLocale(); %>
-<select name="<%=name%>"
-        <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>>
-<%
-    locales = java.util.Locale.getAvailableLocales();
-    for(l in locales) {
-        %>
-            <option value="<%=l.language%>_<%=l.country%>" <%if("${l.language}_${l.country}" == value) {%>selected="selected"<%}%>><%=l.language%>, <%=l.country%>, <%=l.displayName%></option>
-        <%
-    }
-%>
-</select>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Set.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Set.gsp
deleted file mode 100644
index 30404ce..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.Set.gsp
+++ /dev/null
@@ -1 +0,0 @@
-TODO
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.TimeZone.gsp b/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.TimeZone.gsp
deleted file mode 100644
index 44f7a67..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/internal/render/java.util.TimeZone.gsp
+++ /dev/null
@@ -1,26 +0,0 @@
-<%
-    if(value == null) {
-        value = java.util.TimeZone.getDefault()
-    }
-%>
-<select name="<%=name%>"
-       <% if(constraints != null) { constraints.attributes.each { k,v -> %>
-                 <%=k%>="<%=v%>"
-               <% } } %>>
-<%
-    date = new Date()
-    ids = TimeZone.getAvailableIDs();
-    for(id in ids) {
-        TimeZone tz = TimeZone.getTimeZone(id);
-        String shortName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT);
-        String longName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.LONG);
-
-        offset = tz.rawOffset;
-        hour = offset / (60*60*1000);
-        min = Math.abs(offset / (60*1000)) % 60;
-        %>
-            <option value="<%=id%>" <%if(id == value.ID) {%>selected="selected"<%}%>><%=shortName%>, <%=longName%> <%=hour%>:<%=min%></option>
-        <%
-    }
-%>
-</select>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/log4j.properties b/groovy/modules/grails/src/war/WEB-INF/log4j.properties
deleted file mode 100644
index 95672c6..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/log4j.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-log4j.rootLogger=info, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-
-log4j.logger.org.codehaus.groovy.grails=debug, stdout
-log4j.additivity.org.codehaus.groovy.grails=false
-log4j.logger.grails=debug, stdout
-log4j.additivity.grails=false
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/sitemesh.xml b/groovy/modules/grails/src/war/WEB-INF/sitemesh.xml
deleted file mode 100644
index e1a3a28..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/sitemesh.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<sitemesh>
-    <page-parsers>
-        <parser content-type="text/html"
-            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
-        <parser content-type="text/html;charset=ISO-8859-1"
-            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
-        <parser content-type="text/html;charset=UTF-8"
-            class="com.opensymphony.module.sitemesh.parser.FastPageParser" />            
-    </page-parsers>
-
-    <decorator-mappers>
-        <mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />
-    </decorator-mappers>
-</sitemesh>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/spring/resources.xml b/groovy/modules/grails/src/war/WEB-INF/spring/resources.xml
deleted file mode 100644
index 2b48ae6..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/spring/resources.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	
-	
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/test-applicationContext.xml b/groovy/modules/grails/src/war/WEB-INF/test-applicationContext.xml
deleted file mode 100644
index 554ac51..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/test-applicationContext.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<import resource="spring/resources.xml"/>
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>**/*.groovy</value>
-		</property>
-	</bean>
-	
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/c.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.3/c.tld
deleted file mode 100644
index ce80e8d..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/c.tld
+++ /dev/null
@@ -1,416 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib
-  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-<taglib>
-  <tlib-version>1.0</tlib-version>
-  <jsp-version>1.2</jsp-version>
-  <short-name>c</short-name>
-  <uri>http://java.sun.com/jstl/core</uri>
-  <display-name>JSTL core</display-name>
-  <description>JSTL 1.0 core library</description>
-
-  <validator>
-    <validator-class>
-	org.apache.taglibs.standard.tlv.JstlCoreTLV
-    </validator-class>
-    <init-param>
-	<param-name>expressionAttributes</param-name>
-	<param-value>
-	    out:value
-	    out:default
-	    out:escapeXml
-	    if:test
-	    import:url
-	    import:context
-	    import:charEncoding
-	    forEach:items
-	    forEach:begin
-	    forEach:end
-	    forEach:step
-	    forTokens:items
-	    forTokens:begin
-	    forTokens:end
-	    forTokens:step
-	    param:encode
-	    param:name
-	    param:value
-            redirect:context
-            redirect:url
-	    set:property
-	    set:target
-	    set:value
-	    url:context
-	    url:value
-	    when:test
-	</param-value>
-	<description>
-	    Whitespace-separated list of colon-separated token pairs
-	    describing tag:attribute combinations that accept expressions.
-	    The validator uses this information to determine which
-	    attributes need their syntax validated.
-	</description>
-     </init-param>
-  </validator>
-
-  <tag>
-    <name>catch</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Catches any Throwable that occurs in its body and optionally
-        exposes it.
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>choose</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Simple conditional tag that establishes a context for
-        mutually exclusive conditional operations, marked by
-        &lt;when&gt; and &lt;otherwise&gt;
-    </description>
-  </tag>
-
-  <tag>
-    <name>out</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.OutTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Like &lt;%= ... &gt;, but for expressions.
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>default</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>escapeXml</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>if</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.IfTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Simple conditional tag, which evalutes its body if the
-        supplied condition is true and optionally exposes a Boolean
-        scripting variable representing the evaluation of this condition
-    </description>
-    <attribute>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>import</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ImportTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
-    <body-content>JSP</body-content>
-    <description>
-	Retrieves an absolute or relative URL and exposes its contents
-	to either the page, a String in 'var', or a Reader in 'varReader'.
-    </description>
-    <attribute>
-        <name>url</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>varReader</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>charEncoding</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>forEach</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ForEachTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
-    <body-content>JSP</body-content>
-    <description>
-	The basic iteration tag, accepting many different
-        collection types and supporting subsetting and other
-        functionality
-    </description>
-    <attribute>
-	<name>items</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>forTokens</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ForTokensTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Iterates over tokens, separated by the supplied delimeters
-    </description>
-    <attribute>
-	<name>items</name>
-	<required>true</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>delims</name>
-	<required>true</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>otherwise</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Subtag of &lt;choose&gt; that follows &lt;when&gt; tags
-	and runs only if all of the prior conditions evaluated to
-	'false'
-    </description>
-  </tag>
-
-  <tag>
-    <name>param</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.ParamTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Adds a parameter to a containing 'import' tag's URL.
-    </description>
-    <attribute>
-        <name>name</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>redirect</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.RedirectTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Redirects to a new URL.
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>url</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>remove</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-	Removes a scoped variable (from a particular scope, if specified).
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>set</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.SetTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Sets the result of an expression evaluation in a 'scope'
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>target</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>property</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>url</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.UrlTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-	Prints or exposes a URL with optional query parameters
-        (via the c:param tag).
-    </description>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>when</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.core.WhenTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Subtag of &lt;choose&gt; that includes its body if its
-        condition evalutes to 'true'
-    </description>
-    <attribute>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/fmt.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.3/fmt.tld
deleted file mode 100644
index 20523ee..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/fmt.tld
+++ /dev/null
@@ -1,442 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib
-  PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
-  "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-<taglib>
-  <tlib-version>1.0</tlib-version>
-  <jsp-version>1.2</jsp-version>
-  <short-name>fmt</short-name>
-  <uri>http://java.sun.com/jstl/fmt</uri>
-  <display-name>JSTL fmt</display-name>
-  <description>JSTL 1.0 i18n-capable formatting library</description>
-
-  <validator>
-    <validator-class>
-	org.apache.taglibs.standard.tlv.JstlFmtTLV
-    </validator-class>
-    <init-param>
-	<param-name>expressionAttributes</param-name>
-	<param-value>
-            requestEncoding:value 
-	    setLocale:value
-	    setLocale:variant
-	    timeZone:value
-	    setTimeZone:value
-	    bundle:basename
-	    bundle:prefix
-            setBundle:basename
-	    message:key
-	    message:bundle
-	    param:value
-	    formatNumber:value
-	    formatNumber:pattern
-            formatNumber:currencyCode
-            formatNumber:currencySymbol
-            formatNumber:groupingUsed
-            formatNumber:maxIntegerDigits
-            formatNumber:minIntegerDigits
-            formatNumber:maxFractionDigits
-            formatNumber:minFractionDigits
-	    parseNumber:value
-	    parseNumber:pattern
-	    parseNumber:parseLocale
-            parseNumber:integerOnly
-	    formatDate:value
-	    formatDate:pattern
-	    formatDate:timeZone
-	    parseDate:value
-	    parseDate:pattern
-	    parseDate:timeZone
-	    parseDate:parseLocale
-	</param-value>
-	<description>
-	    Whitespace-separated list of colon-separated token pairs
-	    describing tag:attribute combinations that accept expressions.
-	    The validator uses this information to determine which
-	    attributes need their syntax validated.
-	</description>
-     </init-param>
-  </validator>
-
-  <tag>
-    <name>requestEncoding</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.RequestEncodingTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-        Sets the request character encoding
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>setLocale</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.SetLocaleTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-        Stores the given locale in the locale configuration variable
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>variant</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>timeZone</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.TimeZoneTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Specifies the time zone for any time formatting or parsing actions
-        nested in its body
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>setTimeZone</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.SetTimeZoneTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-        Stores the given time zone in the time zone configuration variable
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>bundle</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.BundleTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Loads a resource bundle to be used by its tag body
-    </description>
-    <attribute>
-        <name>basename</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>prefix</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>setBundle</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.SetBundleTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-        Loads a resource bundle and stores it in the named scoped variable or
-        the bundle configuration variable
-    </description>
-    <attribute>
-        <name>basename</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>message</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.MessageTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Maps key to localized message and performs parametric replacement
-    </description>
-    <attribute>
-        <name>key</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>bundle</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>param</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.ParamTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Supplies an argument for parametric replacement to a containing
-        &lt;message&gt; tag
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>formatNumber</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.FormatNumberTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Formats a numeric value as a number, currency, or percentage
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>currencyCode</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>currencySymbol</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>groupingUsed</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>maxIntegerDigits</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>minIntegerDigits</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>maxFractionDigits</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>minFractionDigits</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>parseNumber</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.ParseNumberTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Parses the string representation of a number, currency, or percentage
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>parseLocale</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>integerOnly</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>formatDate</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.FormatDateTag</tag-class>
-    <body-content>empty</body-content>
-    <description>
-        Formats a date and/or time using the supplied styles and pattern
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>dateStyle</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>timeStyle</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>timeZone</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <name>parseDate</name>
-    <tag-class>org.apache.taglibs.standard.tag.el.fmt.ParseDateTag</tag-class>
-    <body-content>JSP</body-content>
-    <description>
-        Parses the string representation of a date and/or time
-    </description>
-    <attribute>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>dateStyle</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>timeStyle</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>timeZone</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>parseLocale</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/spring.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.3/spring.tld
deleted file mode 100644
index a6f7bff..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.3/spring.tld
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>

-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

-

-<taglib>

-

-	<tlib-version>1.1.1</tlib-version>

-

-	<jsp-version>1.2</jsp-version>

-

-	<short-name>Spring</short-name>

-

-	<uri>http://www.springframework.org/tags</uri>

-

-	<description>Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller</description>

-

-

-	<tag>

-

-		<name>htmlEscape</name>

-		<tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Sets default HTML escape value for the current page.

-			Overrides a "defaultHtmlEscape" context-param in web.xml, if any.

-		</description>

-

-		<attribute>

-			<name>defaultHtmlEscape</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>escapeBody</name>

-		<tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>message</name>

-		<tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Retrieves the message with the given code, or text if code isn't resolvable.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>code</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>arguments</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>text</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>theme</name>

-		<tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Retrieves the theme message with the given code, or text if code isn't resolvable.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>code</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>arguments</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>text</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>hasBindErrors</name>

-		<tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides Errors instance in case of bind errors.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<variable>

-			<name-given>errors</name-given>

-			<variable-class>org.springframework.validation.Errors</variable-class>

-		</variable>

-

-		<attribute>

-			<name>name</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>nestedPath</name>

-		<tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Sets a nested path to be used by the bind tag's path.

-		</description>

-

-		<variable>

-			<name-given>nestedPath</name-given>

-			<variable-class>java.lang.String</variable-class>

-		</variable>

-

-		<attribute>

-			<name>path</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>bind</name>

-		<tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides BindStatus object for the given bind path.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<variable>

-			<name-given>status</name-given>

-			<variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>

-		</variable>

-

-		<attribute>

-			<name>path</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>ignoreNestedPath</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>transform</name>

-		<tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides transformation of variables to Strings, using an appropriate

-			custom PropertyEditor from BindTag (can only be used inside BindTag).

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>value</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-</taglib>

diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/c.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.4/c.tld
deleted file mode 100644
index 22698c9..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/c.tld
+++ /dev/null
@@ -1,563 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
-    version="2.0">
-    
-  <description>JSTL 1.1 core library</description>
-  <display-name>JSTL core</display-name>
-  <tlib-version>1.1</tlib-version>
-  <short-name>c</short-name>
-  <uri>http://java.sun.com/jsp/jstl/core</uri>
-
-  <validator>
-    <description>
-        Provides core validation features for JSTL tags.
-    </description>
-    <validator-class>
-        org.apache.taglibs.standard.tlv.JstlCoreTLV
-    </validator-class>
-  </validator>
-
-  <tag>
-    <description>
-        Catches any Throwable that occurs in its body and optionally
-        exposes it.
-    </description>
-    <name>catch</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-exception thrown from a nested action. The type of the
-scoped variable is the type of the exception thrown.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	Simple conditional tag that establishes a context for
-	mutually exclusive conditional operations, marked by
-	&lt;when&gt; and &lt;otherwise&gt;
-    </description>
-    <name>choose</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
-    <body-content>JSP</body-content>
-  </tag>
-
-  <tag>
-    <description>
-	Simple conditional tag, which evalutes its body if the
-	supplied condition is true and optionally exposes a Boolean
-	scripting variable representing the evaluation of this condition
-    </description>
-    <name>if</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The test condition that determines whether or
-not the body content should be processed.
-        </description>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-	<type>boolean</type>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-resulting value of the test condition. The type
-of the scoped variable is Boolean.        
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Retrieves an absolute or relative URL and exposes its contents
-        to either the page, a String in 'var', or a Reader in 'varReader'.
-    </description>
-    <name>import</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The URL of the resource to import.
-        </description>
-        <name>url</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-resource's content. The type of the scoped
-variable is String.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-resource's content. The type of the scoped
-variable is Reader.
-        </description>
-        <name>varReader</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the context when accessing a relative
-URL resource that belongs to a foreign
-context.
-        </description>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Character encoding of the content at the input
-resource.
-        </description>
-        <name>charEncoding</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	The basic iteration tag, accepting many different
-        collection types and supporting subsetting and other
-        functionality
-    </description>
-    <name>forEach</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
-    <tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Collection of items to iterate over.
-        </description>
-	<name>items</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>java.lang.Object</type>
-    </attribute>
-    <attribute>
-        <description>
-If items specified:
-Iteration begins at the item located at the
-specified index. First item of the collection has
-index 0.
-If items not specified:
-Iteration begins with index set at the value
-specified.
-        </description>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-If items specified:
-Iteration ends at the item located at the
-specified index (inclusive).
-If items not specified:
-Iteration ends when index reaches the value
-specified.
-        </description>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Iteration will only process every step items of
-the collection, starting with the first one.
-        </description>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-current item of the iteration. This scoped
-variable has nested visibility. Its type depends
-on the object of the underlying collection.
-        </description>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-status of the iteration. Object exported is of type
-javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
-visibility.
-        </description>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	Iterates over tokens, separated by the supplied delimeters
-    </description>
-    <name>forTokens</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-String of tokens to iterate over.
-        </description>
-	<name>items</name>
-	<required>true</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>java.lang.String</type>
-    </attribute>
-    <attribute>
-        <description>
-The set of delimiters (the characters that
-separate the tokens in the string).
-        </description>
-	<name>delims</name>
-	<required>true</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>java.lang.String</type>
-    </attribute>
-    <attribute>
-        <description>
-Iteration begins at the token located at the
-specified index. First token has index 0.
-        </description>
-	<name>begin</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Iteration ends at the token located at the
-specified index (inclusive).
-        </description>
-	<name>end</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Iteration will only process every step tokens
-of the string, starting with the first one.
-        </description>
-	<name>step</name>
-	<required>false</required>
-	<rtexprvalue>true</rtexprvalue>
-	<type>int</type>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-current item of the iteration. This scoped
-variable has nested visibility.
-        </description>
-	<name>var</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-status of the iteration. Object exported is of
-type
-javax.servlet.jsp.jstl.core.LoopTag
-Status. This scoped variable has nested
-visibility.
-        </description>
-	<name>varStatus</name>
-	<required>false</required>
-	<rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Like &lt;%= ... &gt;, but for expressions.
-    </description> 
-    <name>out</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Expression to be evaluated.
-        </description>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Default value if the resulting value is null.
-        </description>
-        <name>default</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Determines whether characters &lt;,&gt;,&amp;,'," in the
-resulting string should be converted to their
-corresponding character entity codes. Default value is
-true.
-        </description>
-        <name>escapeXml</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-
-  <tag>
-    <description>
-        Subtag of &lt;choose&gt; that follows &lt;when&gt; tags
-        and runs only if all of the prior conditions evaluated to
-        'false'
-    </description>
-    <name>otherwise</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.OtherwiseTag</tag-class>
-    <body-content>JSP</body-content>
-  </tag>
-
-  <tag>
-    <description>
-        Adds a parameter to a containing 'import' tag's URL.
-    </description>
-    <name>param</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the query string parameter.
-        </description>
-        <name>name</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Value of the parameter.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Redirects to a new URL.
-    </description>
-    <name>redirect</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.RedirectTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The URL of the resource to redirect to.
-        </description>
-        <name>url</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the context when redirecting to a relative URL
-resource that belongs to a foreign context.
-        </description>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Removes a scoped variable (from a particular scope, if specified).
-    </description>
-    <name>remove</name>
-    <tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-Name of the scoped variable to be removed.
-        </description>
-        <name>var</name>
-        <required>true</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
- <tag>
-    <description>
-        Sets the result of an expression evaluation in a 'scope'
-    </description>
-    <name>set</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.SetTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the exported scoped variable to hold the value
-specified in the action. The type of the scoped variable is
-whatever type the value expression evaluates to.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Expression to be evaluated.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Target object whose property will be set. Must evaluate to
-a JavaBeans object with setter property property, or to a
-java.util.Map object.
-        </description>
-        <name>target</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the property to be set in the target object.
-        </description>
-        <name>property</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Creates a URL with optional query parameters.
-    </description>
-    <name>url</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.UrlTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Name of the exported scoped variable for the
-processed url. The type of the scoped variable is
-String.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope for var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-URL to be processed.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the context when specifying a relative URL
-resource that belongs to a foreign context.
-        </description>
-        <name>context</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-	Subtag of &lt;choose&gt; that includes its body if its
-	condition evalutes to 'true'
-    </description>
-    <name>when</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.core.WhenTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The test condition that determines whether or not the
-body content should be processed.
-        </description>
-        <name>test</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-	<type>boolean</type>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/fmt.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.4/fmt.tld
deleted file mode 100644
index 3b9a54a..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/fmt.tld
+++ /dev/null
@@ -1,671 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
-    version="2.0">
-    
-  <description>JSTL 1.1 i18n-capable formatting library</description>
-  <display-name>JSTL fmt</display-name>
-  <tlib-version>1.1</tlib-version>
-  <short-name>fmt</short-name>
-  <uri>http://java.sun.com/jsp/jstl/fmt</uri>
-
-  <validator>
-    <description>
-        Provides core validation features for JSTL tags.
-    </description>
-    <validator-class>
-        org.apache.taglibs.standard.tlv.JstlFmtTLV
-    </validator-class>
-  </validator>
-
-  <tag>
-    <description>
-        Sets the request character encoding
-    </description>
-    <name>requestEncoding</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-Name of character encoding to be applied when
-decoding request parameters.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Stores the given locale in the locale configuration variable
-    </description>
-    <name>setLocale</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-A String value is interpreted as the
-printable representation of a locale, which
-must contain a two-letter (lower-case)
-language code (as defined by ISO-639),
-and may contain a two-letter (upper-case)
-country code (as defined by ISO-3166).
-Language and country codes must be
-separated by hyphen (-) or underscore
-(_).        
-	</description>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Vendor- or browser-specific variant.
-See the java.util.Locale javadocs for
-more information on variants.
-        </description>
-        <name>variant</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of the locale configuration variable.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Specifies the time zone for any time formatting or parsing actions
-        nested in its body
-    </description>
-    <name>timeZone</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-The time zone. A String value is interpreted as
-a time zone ID. This may be one of the time zone
-IDs supported by the Java platform (such as
-"America/Los_Angeles") or a custom time zone
-ID (such as "GMT-8"). See
-java.util.TimeZone for more information on
-supported time zone formats.
-        </description>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Stores the given time zone in the time zone configuration variable
-    </description>
-    <name>setTimeZone</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-The time zone. A String value is interpreted as
-a time zone ID. This may be one of the time zone
-IDs supported by the Java platform (such as
-"America/Los_Angeles") or a custom time zone
-ID (such as "GMT-8"). See java.util.TimeZone for
-more information on supported time zone
-formats.
-        </description>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable which
-stores the time zone of type
-java.util.TimeZone.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var or the time zone configuration
-variable.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Loads a resource bundle to be used by its tag body
-    </description>
-    <name>bundle</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.BundleTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Resource bundle base name. This is the bundle's
-fully-qualified resource name, which has the same
-form as a fully-qualified class name, that is, it uses
-"." as the package component separator and does not
-have any file type (such as ".class" or ".properties")
-suffix.
-        </description>
-        <name>basename</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Prefix to be prepended to the value of the message
-key of any nested &lt;fmt:message&gt; action.
-        </description>
-        <name>prefix</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Loads a resource bundle and stores it in the named scoped variable or
-        the bundle configuration variable
-    </description>
-    <name>setBundle</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-Resource bundle base name. This is the bundle's
-fully-qualified resource name, which has the same
-form as a fully-qualified class name, that is, it uses
-"." as the package component separator and does not
-have any file type (such as ".class" or ".properties")
-suffix.
-        </description>
-        <name>basename</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable which stores
-the i18n localization context of type
-javax.servlet.jsp.jstl.fmt.LocalizationC
-ontext.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var or the localization context
-configuration variable.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Maps key to localized message and performs parametric replacement
-    </description>
-    <name>message</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.MessageTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Message key to be looked up.
-        </description>
-        <name>key</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Localization context in whose resource
-bundle the message key is looked up.
-        </description>
-        <name>bundle</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable
-which stores the localized message.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Supplies an argument for parametric replacement to a containing
-        &lt;message&gt; tag
-    </description>
-    <name>param</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParamTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Argument used for parametric replacement.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Formats a numeric value as a number, currency, or percentage
-    </description>
-    <name>formatNumber</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Numeric value to be formatted.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether the value is to be
-formatted as number, currency, or
-percentage.
-        </description>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Custom formatting pattern.
-        </description>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-ISO 4217 currency code. Applied only
-when formatting currencies (i.e. if type is
-equal to "currency"); ignored otherwise.
-        </description>
-        <name>currencyCode</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Currency symbol. Applied only when
-formatting currencies (i.e. if type is equal
-to "currency"); ignored otherwise.
-        </description>
-        <name>currencySymbol</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether the formatted output
-will contain any grouping separators.
-        </description>
-        <name>groupingUsed</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Maximum number of digits in the integer
-portion of the formatted output.
-        </description>
-        <name>maxIntegerDigits</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Minimum number of digits in the integer
-portion of the formatted output.
-        </description>
-        <name>minIntegerDigits</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Maximum number of digits in the
-fractional portion of the formatted output.
-        </description>
-        <name>maxFractionDigits</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Minimum number of digits in the
-fractional portion of the formatted output.
-        </description>
-        <name>minFractionDigits</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable
-which stores the formatted result as a
-String.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Parses the string representation of a number, currency, or percentage
-    </description>
-    <name>parseNumber</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-String to be parsed.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether the string in the value
-attribute should be parsed as a number,
-currency, or percentage.
-        </description>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Custom formatting pattern that determines
-how the string in the value attribute is to be
-parsed.
-        </description>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Locale whose default formatting pattern (for
-numbers, currencies, or percentages,
-respectively) is to be used during the parse
-operation, or to which the pattern specified
-via the pattern attribute (if present) is
-applied.
-        </description>
-        <name>parseLocale</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether just the integer portion of
-the given value should be parsed.
-        </description>
-        <name>integerOnly</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable which
-stores the parsed result (of type
-java.lang.Number).
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Formats a date and/or time using the supplied styles and pattern
-    </description>
-    <name>formatDate</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag</tag-class>
-    <body-content>empty</body-content>
-    <attribute>
-        <description>
-Date and/or time to be formatted.
-        </description>
-        <name>value</name>
-        <required>true</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether the time, the date, or both
-the time and date components of the given
-date are to be formatted. 
-        </description>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Predefined formatting style for dates. Follows
-the semantics defined in class
-java.text.DateFormat. Applied only
-when formatting a date or both a date and
-time (i.e. if type is missing or is equal to
-"date" or "both"); ignored otherwise.
-        </description>
-        <name>dateStyle</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Predefined formatting style for times. Follows
-the semantics defined in class
-java.text.DateFormat. Applied only
-when formatting a time or both a date and
-time (i.e. if type is equal to "time" or "both");
-ignored otherwise.
-        </description>
-        <name>timeStyle</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Custom formatting style for dates and times.
-        </description>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Time zone in which to represent the formatted
-time.
-        </description>
-        <name>timeZone</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable which
-stores the formatted result as a String.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-  <tag>
-    <description>
-        Parses the string representation of a date and/or time
-    </description>
-    <name>parseDate</name>
-    <tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag</tag-class>
-    <body-content>JSP</body-content>
-    <attribute>
-        <description>
-Date string to be parsed.
-        </description>
-        <name>value</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Specifies whether the date string in the
-value attribute is supposed to contain a
-time, a date, or both.
-        </description>
-        <name>type</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Predefined formatting style for days
-which determines how the date
-component of the date string is to be
-parsed. Applied only when formatting a
-date or both a date and time (i.e. if type
-is missing or is equal to "date" or "both");
-ignored otherwise.
-        </description>
-        <name>dateStyle</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Predefined formatting styles for times
-which determines how the time
-component in the date string is to be
-parsed. Applied only when formatting a
-time or both a date and time (i.e. if type
-is equal to "time" or "both"); ignored
-otherwise.
-        </description>
-        <name>timeStyle</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Custom formatting pattern which
-determines how the date string is to be
-parsed.
-        </description>
-        <name>pattern</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Time zone in which to interpret any time
-information in the date string.
-        </description>
-        <name>timeZone</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Locale whose predefined formatting styles
-for dates and times are to be used during
-the parse operation, or to which the
-pattern specified via the pattern
-attribute (if present) is applied.
-        </description>
-        <name>parseLocale</name>
-        <required>false</required>
-        <rtexprvalue>true</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Name of the exported scoped variable in
-which the parsing result (of type
-java.util.Date) is stored.
-        </description>
-        <name>var</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-    <attribute>
-        <description>
-Scope of var.
-        </description>
-        <name>scope</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-    </attribute>
-  </tag>
-
-</taglib>
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/spring.tld b/groovy/modules/grails/src/war/WEB-INF/tld/2.4/spring.tld
deleted file mode 100644
index a6f7bff..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/2.4/spring.tld
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>

-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

-

-<taglib>

-

-	<tlib-version>1.1.1</tlib-version>

-

-	<jsp-version>1.2</jsp-version>

-

-	<short-name>Spring</short-name>

-

-	<uri>http://www.springframework.org/tags</uri>

-

-	<description>Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller</description>

-

-

-	<tag>

-

-		<name>htmlEscape</name>

-		<tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Sets default HTML escape value for the current page.

-			Overrides a "defaultHtmlEscape" context-param in web.xml, if any.

-		</description>

-

-		<attribute>

-			<name>defaultHtmlEscape</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>escapeBody</name>

-		<tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>message</name>

-		<tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Retrieves the message with the given code, or text if code isn't resolvable.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>code</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>arguments</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>text</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>theme</name>

-		<tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Retrieves the theme message with the given code, or text if code isn't resolvable.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>code</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>arguments</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>text</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>javaScriptEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>hasBindErrors</name>

-		<tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides Errors instance in case of bind errors.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<variable>

-			<name-given>errors</name-given>

-			<variable-class>org.springframework.validation.Errors</variable-class>

-		</variable>

-

-		<attribute>

-			<name>name</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>nestedPath</name>

-		<tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Sets a nested path to be used by the bind tag's path.

-		</description>

-

-		<variable>

-			<name-given>nestedPath</name-given>

-			<variable-class>java.lang.String</variable-class>

-		</variable>

-

-		<attribute>

-			<name>path</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>bind</name>

-		<tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides BindStatus object for the given bind path.

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<variable>

-			<name-given>status</name-given>

-			<variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>

-		</variable>

-

-		<attribute>

-			<name>path</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>ignoreNestedPath</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-

-	<tag>

-

-		<name>transform</name>

-		<tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>

-		<body-content>JSP</body-content>

-

-		<description>

-			Provides transformation of variables to Strings, using an appropriate

-			custom PropertyEditor from BindTag (can only be used inside BindTag).

-			The HTML escaping flag participates in a page-wide or application-wide setting

-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).

-		</description>

-

-		<attribute>

-			<name>value</name>

-			<required>true</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>var</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>scope</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-		<attribute>

-			<name>htmlEscape</name>

-			<required>false</required>

-			<rtexprvalue>true</rtexprvalue>

-		</attribute>

-

-	</tag>

-

-</taglib>

diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/grails.tld b/groovy/modules/grails/src/war/WEB-INF/tld/grails.tld
deleted file mode 100644
index a1d48c3..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/grails.tld
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
-            http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
-        version="2.0">
-    <description>The Grails (Groovy on Rails) custom tag library</description>
-
-	<tlib-version>1.0</tlib-version>
-	<short-name>grails</short-name>
-    <uri>http://grails.codehaus.org/tags</uri>
-
-    <tag>
-		<name>link</name>
-        <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspLinkTag</tag-class>
-        <body-content>JSP</body-content>
-        <attribute>
-			<name>action</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>controller</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-		<attribute>
-			<name>id</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>				
-		<dynamic-attributes>true</dynamic-attributes>
-	</tag>
-    <tag>
-        <name>renderInput</name>
-        <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspRenderInputTag</tag-class>
-        <body-content>empty</body-content>
-        <attribute>
-            <name>bean</name>
-            <required>true</required>
-            <rtexprvalue>false</rtexprvalue>
-        </attribute>
-        <attribute>
-            <name>property</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-    </tag>
-    <tag>
-        <name>invokeTag</name>
-        <tag-class>org.codehaus.groovy.grails.web.taglib.jsp.JspInvokeGrailsTagLibTag</tag-class>
-        <body-content>JSP</body-content>
-        <variable>
-            <name-given>it</name-given>
-            <variable-class>java.lang.Object</variable-class>
-            <declare>true</declare>
-            <scope>NESTED</scope>
-        </variable>
-        <attribute>
-            <name>name</name>
-            <required>true</required>
-            <rtexprvalue>true</rtexprvalue>
-        </attribute>
-        <dynamic-attributes>true</dynamic-attributes>
-    </tag>
-</taglib>
-
diff --git a/groovy/modules/grails/src/war/WEB-INF/tld/spring.tld b/groovy/modules/grails/src/war/WEB-INF/tld/spring.tld
deleted file mode 100644
index 1bc7091..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/tld/spring.tld
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-
-<taglib>
-
-	<tlib-version>1.1.1</tlib-version>
-
-	<jsp-version>1.2</jsp-version>
-
-	<short-name>Spring</short-name>
-
-	<uri>http://www.springframework.org/tags</uri>
-
-	<description>Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller</description>
-
-
-	<tag>
-
-		<name>htmlEscape</name>
-		<tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Sets default HTML escape value for the current page.
-			Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
-		</description>
-
-		<attribute>
-			<name>defaultHtmlEscape</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>escapeBody</name>
-		<tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>javaScriptEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>message</name>
-		<tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Retrieves the message with the given code, or text if code isn't resolvable.
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<attribute>
-			<name>code</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>arguments</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>text</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>var</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>scope</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>javaScriptEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>theme</name>
-		<tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Retrieves the theme message with the given code, or text if code isn't resolvable.
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<attribute>
-			<name>code</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>arguments</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>text</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>var</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>scope</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>javaScriptEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>hasBindErrors</name>
-		<tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Provides Errors instance in case of bind errors.
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<variable>
-			<name-given>errors</name-given>
-			<variable-class>org.springframework.validation.Errors</variable-class>
-		</variable>
-
-		<attribute>
-			<name>name</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>nestedPath</name>
-		<tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Sets a nested path to be used by the bind tag's path.
-		</description>
-
-		<variable>
-			<name-given>nestedPath</name-given>
-			<variable-class>java.lang.String</variable-class>
-		</variable>
-
-		<attribute>
-			<name>path</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>bind</name>
-		<tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Provides BindStatus object for the given bind path.
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<variable>
-			<name-given>status</name-given>
-			<variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>
-		</variable>
-
-		<attribute>
-			<name>path</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>ignoreNestedPath</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-
-	<tag>
-
-		<name>transform</name>
-		<tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>
-		<body-content>JSP</body-content>
-
-		<description>
-			Provides transformation of variables to Strings, using an appropriate
-			custom PropertyEditor from BindTag (can only be used inside BindTag).
-			The HTML escaping flag participates in a page-wide or application-wide setting
-			(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
-		</description>
-
-		<attribute>
-			<name>value</name>
-			<required>true</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>var</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>scope</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-		<attribute>
-			<name>htmlEscape</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-
-	</tag>
-
-</taglib>
diff --git a/groovy/modules/grails/src/war/WEB-INF/web2.3.template.xml b/groovy/modules/grails/src/war/WEB-INF/web2.3.template.xml
deleted file mode 100644
index 2319dbc..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/web2.3.template.xml
+++ /dev/null
@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!DOCTYPE web-app PUBLIC
-	"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-	"http://java.sun.com/dtd/web-app_2_3.dtd">
-
-<web-app>
-
-	<context-param>
-		<param-name>log4jConfigLocation</param-name>
-		<param-value>/WEB-INF/log4j.properties</param-value>
-	</context-param>
-
-	<filter>
-	   	<filter-name>sitemesh</filter-name>
-	    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
-	</filter>
-	
-  	<filter>
-	    <filter-name>hibernateFilter</filter-name>
-    	<filter-class>org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewFilter</filter-class>
-   	</filter>
-
-    <% if(dev) { %>
-    <filter>
-        <filter-name>reloadFilter</filter-name>
-        <filter-class>org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>reloadFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-    <% } %>
-
-    <filter-mapping>
-    	<filter-name>sitemesh</filter-name>
-	    <url-pattern>/*</url-pattern>
-	</filter-mapping>
-	
-	<filter-mapping>
-	    <filter-name>hibernateFilter</filter-name>
-	     <url-pattern>/*</url-pattern>
-	</filter-mapping>
-
-
-    <servlet>
-		<servlet-name>log4j</servlet-name>
-		<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
-		<load-on-startup>1</load-on-startup>
-	</servlet>
-
-	<!-- Context loader servlet for those older servlet engines. -->
-	<servlet>
-		<servlet-name>context</servlet-name>
-		<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
-		<load-on-startup>2</load-on-startup>
-	</servlet>
-
-	<!-- Grails dispatcher servlet -->
-	<servlet>
-		<servlet-name>grails</servlet-name>
-		<servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class>
-		<load-on-startup>3</load-on-startup>
-	</servlet>
-
-    <!-- The Groovy Server Pages servlet -->
-      <servlet>
-        <servlet-name>gsp</servlet-name>
-        <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class>
-        <% if(dev) { %>
-        <init-param>
-            <param-name>showSource</param-name>
-            <param-value>1</param-value>
-            <description>
-              Allows developers to view the intermediade source code, when they pass
-                a spillGroovy argument in the URL.
-           </description>
-        </init-param>
-        <% } %>
-     </servlet>
-
-    <servlet-mapping>
-        <servlet-name>gsp</servlet-name>
-        <url-pattern>*.gsp</url-pattern>
-    </servlet-mapping>
-    <!-- Map all requests to the Grails dispatcher servlet -->
-	<% for ( c in controllers ) { %>	
-		<servlet-mapping>
-			<servlet-name>grails</servlet-name>
-			<url-pattern>/${c}/*</url-pattern>
-		</servlet-mapping>
-	<% } %>		
-	
-	<% for ( f in flows ) { %>
-		<servlet-mapping>
-			<servlet-name>grails</servlet-name>
-			<url-pattern>/${f}/*</url-pattern>
-		</servlet-mapping>
-	<% } %>		
-
-	
-	<taglib>
-		<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
-		<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
-	</taglib>
-	
-	<taglib>
-		<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
-		<taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
-	</taglib>
-	
-	<taglib>
-		<taglib-uri>http://www.springframework.org/tags</taglib-uri>
-		<taglib-location>/WEB-INF/tld/spring.tld</taglib-location>
-	</taglib>
-	
-	<taglib>
-		<taglib-uri>http://grails.codehaus.org/tags</taglib-uri>
-		<taglib-location>/WEB-INF/tld/grails.tld</taglib-location>
-	</taglib>		
-</web-app>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/WEB-INF/web2.4.template.xml b/groovy/modules/grails/src/war/WEB-INF/web2.4.template.xml
deleted file mode 100644
index d3ca508..0000000
--- a/groovy/modules/grails/src/war/WEB-INF/web2.4.template.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<web-app version="2.4"
-         xmlns="http://java.sun.com/xml/ns/j2ee"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
-
-	<context-param>
-		<param-name>log4jConfigLocation</param-name>
-		<param-value>/WEB-INF/log4j.properties</param-value>
-	</context-param>
-
-	<filter>
-	   	<filter-name>sitemesh</filter-name>
-	    <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
-	</filter>
-	
-  	<filter>
-	    <filter-name>hibernateFilter</filter-name>
-    	<filter-class>org.codehaus.groovy.grails.orm.hibernate.support.GrailsOpenSessionInViewFilter</filter-class>
-   	</filter>	
-
-    <% if(dev) { %>
-    <filter>
-        <filter-name>reloadFilter</filter-name>
-        <filter-class>org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter</filter-class>
-    </filter>
-
-    <filter-mapping>
-        <filter-name>reloadFilter</filter-name>
-        <url-pattern>/*</url-pattern>
-    </filter-mapping>
-    <% } %>
-
-    <filter-mapping>
-    	<filter-name>sitemesh</filter-name>
-	    <url-pattern>/*</url-pattern>
-	</filter-mapping>
-	
-	<filter-mapping>
-	    <filter-name>hibernateFilter</filter-name>
-	     <url-pattern>/*</url-pattern>
-	</filter-mapping>	
-
-    <servlet>
-		<servlet-name>log4j</servlet-name>
-		<servlet-class>org.springframework.web.util.Log4jConfigServlet</servlet-class>
-		<load-on-startup>1</load-on-startup>
-	</servlet>
-
-
-    <!-- Context loader servlet for those older servlet engines. -->
-    <servlet>
-        <servlet-name>context</servlet-name>
-        <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <!-- Grails dispatcher servlet -->
-    <servlet>
-        <servlet-name>grails</servlet-name>
-        <servlet-class>org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet</servlet-class>
-        <load-on-startup>3</load-on-startup>
-    </servlet>
-
-    <!-- The Groovy Server Pages servlet -->
-      <servlet>
-        <servlet-name>gsp</servlet-name>
-        <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class>
-        <% if(dev) { %>
-        <init-param>
-            <param-name>showSource</param-name>
-            <param-value>1</param-value>
-            <description>
-              Allows developers to view the intermediade source code, when they pass
-                a spillGroovy argument in the URL.
-           </description>
-        </init-param>
-        <% } %>
-     </servlet>
-
-    <servlet-mapping>
-        <servlet-name>gsp</servlet-name>
-        <url-pattern>*.gsp</url-pattern>
-    </servlet-mapping>    
-    <!-- Map all requests to the Grails dispatcher servlet -->
-	<% for ( c in controllers ) { %>	
-		<servlet-mapping>
-			<servlet-name>grails</servlet-name>
-			<url-pattern>/${c}/*</url-pattern>
-		</servlet-mapping>
-	<% } %>		
-	
-	<% for ( f in flows ) { %>
-		<servlet-mapping>
-			<servlet-name>grails</servlet-name>
-			<url-pattern>/${f}/*</url-pattern>
-		</servlet-mapping>
-	<% } %>		
-
-    <jsp-config>
-        <taglib>
-            <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
-            <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
-        </taglib>
-        <taglib>
-            <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
-            <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
-        </taglib>
-		<taglib>
-			<taglib-uri>http://www.springframework.org/tags</taglib-uri>
-			<taglib-location>/WEB-INF/tld/spring.tld</taglib-location>
-		</taglib>
-		<taglib>
-			<taglib-uri>http://grails.codehaus.org/tags</taglib-uri>
-			<taglib-location>/WEB-INF/tld/grails.tld</taglib-location>
-		</taglib>						
-    </jsp-config>
-
-</web-app>
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/css/main.css b/groovy/modules/grails/src/war/css/main.css
deleted file mode 100644
index 153bc85..0000000
--- a/groovy/modules/grails/src/war/css/main.css
+++ /dev/null
@@ -1,114 +0,0 @@
-a:active,a:link,a:visited,a:hover {
-    color:#0D5798;    
-}
-.menuButton {
-	background-color:#80B0DA;
-	border: 1px solid white;
-	border-style: none solid none none ;
-	margin-left:0px;
-	padding-bottom: 5px;
-}
-
-.menuButton a:active,.menuButton a:link,.menuButton a:visited,.menuButton a:hover {
-	font-family:Arial,sans-serif;
-	color: white;	
-	text-decoration:none;
-	padding:20px;
-}
-.actionButton a:active,.actionButton a:link,.actionButton a:visited,.actionButton a:hover {
-	font-family:Arial,sans-serif;
-	font-size:0.8em;
-	font-weight:bold;
-	color: #578BB8;	
-}
-
-
-h1 {
-	font-family:Arial,sans-serif;
-	color:#578BB8;
-	font-size:1.6em;
-}
-
-body {
-	margin:0px;
-	font-family:Arial,sans-serif;
-	color: #616161;
-}
-textarea {
-	width: 300px;
-	height: 100px;
-}
-table {
-	width: 100%;
-}
-.body {
-	padding: 25px;
-}
-.nav {
-	width:100%;
-	margin-top: 30px;
-	background-color:#D6D6D6;
-	height: 30px;
-	border: 2px solid #578BB8;
-	border-style: solid none none none ;	
-}
-
-th {
-	background-color:#578BB8;
-	color:white;
-	width:30px;
-	font-family:Arial,sans-serif;
-	padding:5px;
-	
-}
-td {
-	background-color:#F0F0F0;
-	text-align:center;
-}
-.dialog 
-{
-	padding: 15px;
-	background-color:#F0F0F0;
-	
-}
-.dialog label{
-	width: 120px;
-	font-weight: bold;
-}
-
-.dialog .textfield, textarea{
-	width: 180px;
-	margin-bottom: 5px;
-}
-
-textarea{
-	width: 250px;
-	height: 150px;
-}
-.prop {
-	padding: 5px;
-}
-.buttons {
-	margin-top: 15px;
-}
-.actionButtons {
-	width:100px;
-}
-div .errors {
-	border: 2px solid red;
-	padding: 5px;
-	margin-top:10px;
-	margin-bottom:10px;
-}
-td .errors {
-   border: 1px solid red;
-}
-.message {
-	border: 1px solid #FFCC00;
-	padding: 5px;
-	margin-top:10px;
-	margin-bottom:10px;
-}
-.prop .name {
-	font-weight:bold;
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/builder.js b/groovy/modules/grails/src/war/js/builder.js
deleted file mode 100644
index 5b15ba9..0000000
--- a/groovy/modules/grails/src/war/js/builder.js
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// See scriptaculous.js for full license.
-
-var Builder = {
-  NODEMAP: {
-    AREA: 'map',
-    CAPTION: 'table',
-    COL: 'table',
-    COLGROUP: 'table',
-    LEGEND: 'fieldset',
-    OPTGROUP: 'select',
-    OPTION: 'select',
-    PARAM: 'object',
-    TBODY: 'table',
-    TD: 'table',
-    TFOOT: 'table',
-    TH: 'table',
-    THEAD: 'table',
-    TR: 'table'
-  },
-  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
-  //       due to a Firefox bug
-  node: function(elementName) {
-    elementName = elementName.toUpperCase();
-    
-    // try innerHTML approach
-    var parentTag = this.NODEMAP[elementName] || 'div';
-    var parentElement = document.createElement(parentTag);
-    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
-    } catch(e) {}
-    var element = parentElement.firstChild || null;
-      
-    // see if browser added wrapping tags
-    if(element && (element.tagName != elementName))
-      element = element.getElementsByTagName(elementName)[0];
-    
-    // fallback to createElement approach
-    if(!element) element = document.createElement(elementName);
-    
-    // abort if nothing could be created
-    if(!element) return;
-
-    // attributes (or text)
-    if(arguments[1])
-      if(this._isStringOrNumber(arguments[1]) ||
-        (arguments[1] instanceof Array)) {
-          this._children(element, arguments[1]);
-        } else {
-          var attrs = this._attributes(arguments[1]);
-          if(attrs.length) {
-            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-              parentElement.innerHTML = "<" +elementName + " " +
-                attrs + "></" + elementName + ">";
-            } catch(e) {}
-            element = parentElement.firstChild || null;
-            // workaround firefox 1.0.X bug
-            if(!element) {
-              element = document.createElement(elementName);
-              for(attr in arguments[1]) 
-                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
-            }
-            if(element.tagName != elementName)
-              element = parentElement.getElementsByTagName(elementName)[0];
-            }
-        } 
-
-    // text, or array of children
-    if(arguments[2])
-      this._children(element, arguments[2]);
-
-     return element;
-  },
-  _text: function(text) {
-     return document.createTextNode(text);
-  },
-  _attributes: function(attributes) {
-    var attrs = [];
-    for(attribute in attributes)
-      attrs.push((attribute=='className' ? 'class' : attribute) +
-          '="' + attributes[attribute].toString().escapeHTML() + '"');
-    return attrs.join(" ");
-  },
-  _children: function(element, children) {
-    if(typeof children=='object') { // array can hold nodes and text
-      children.flatten().each( function(e) {
-        if(typeof e=='object')
-          element.appendChild(e)
-        else
-          if(Builder._isStringOrNumber(e))
-            element.appendChild(Builder._text(e));
-      });
-    } else
-      if(Builder._isStringOrNumber(children)) 
-         element.appendChild(Builder._text(children));
-  },
-  _isStringOrNumber: function(param) {
-    return(typeof param=='string' || typeof param=='number');
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/controls.js b/groovy/modules/grails/src/war/js/controls.js
deleted file mode 100644
index 9742b69..0000000
--- a/groovy/modules/grails/src/war/js/controls.js
+++ /dev/null
@@ -1,750 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-//           (c) 2005 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-//  Richard Livsey
-//  Rahul Bhargava
-//  Rob Wills
-// 
-// See scriptaculous.js for full license.
-
-// Autocompleter.Base handles all the autocompletion functionality 
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least, 
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method 
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most 
-// useful when one of the tokens is \n (a newline), as it 
-// allows smart autocompletion after linebreaks.
-
-var Autocompleter = {}
-Autocompleter.Base = function() {};
-Autocompleter.Base.prototype = {
-  baseInitialize: function(element, update, options) {
-    this.element     = $(element); 
-    this.update      = $(update);  
-    this.hasFocus    = false; 
-    this.changed     = false; 
-    this.active      = false; 
-    this.index       = 0;     
-    this.entryCount  = 0;
-
-    if (this.setOptions)
-      this.setOptions(options);
-    else
-      this.options = options || {};
-
-    this.options.paramName    = this.options.paramName || this.element.name;
-    this.options.tokens       = this.options.tokens || [];
-    this.options.frequency    = this.options.frequency || 0.4;
-    this.options.minChars     = this.options.minChars || 1;
-    this.options.onShow       = this.options.onShow || 
-    function(element, update){ 
-      if(!update.style.position || update.style.position=='absolute') {
-        update.style.position = 'absolute';
-        Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
-      }
-      Effect.Appear(update,{duration:0.15});
-    };
-    this.options.onHide = this.options.onHide || 
-    function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
-    if (typeof(this.options.tokens) == 'string') 
-      this.options.tokens = new Array(this.options.tokens);
-
-    this.observer = null;
-    
-    this.element.setAttribute('autocomplete','off');
-
-    Element.hide(this.update);
-
-    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
-  },
-
-  show: function() {
-    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
-    if(!this.iefix && 
-      (navigator.appVersion.indexOf('MSIE')>0) &&
-      (navigator.userAgent.indexOf('Opera')<0) &&
-      (Element.getStyle(this.update, 'position')=='absolute')) {
-      new Insertion.After(this.update, 
-       '<iframe id="' + this.update.id + '_iefix" '+
-       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
-       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
-      this.iefix = $(this.update.id+'_iefix');
-    }
-    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
-  },
-  
-  fixIEOverlapping: function() {
-    Position.clone(this.update, this.iefix);
-    this.iefix.style.zIndex = 1;
-    this.update.style.zIndex = 2;
-    Element.show(this.iefix);
-  },
-
-  hide: function() {
-    this.stopIndicator();
-    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
-    if(this.iefix) Element.hide(this.iefix);
-  },
-
-  startIndicator: function() {
-    if(this.options.indicator) Element.show(this.options.indicator);
-  },
-
-  stopIndicator: function() {
-    if(this.options.indicator) Element.hide(this.options.indicator);
-  },
-
-  onKeyPress: function(event) {
-    if(this.active)
-      switch(event.keyCode) {
-       case Event.KEY_TAB:
-       case Event.KEY_RETURN:
-         this.selectEntry();
-         Event.stop(event);
-       case Event.KEY_ESC:
-         this.hide();
-         this.active = false;
-         Event.stop(event);
-         return;
-       case Event.KEY_LEFT:
-       case Event.KEY_RIGHT:
-         return;
-       case Event.KEY_UP:
-         this.markPrevious();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-       case Event.KEY_DOWN:
-         this.markNext();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-      }
-     else 
-      if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN) 
-        return;
-
-    this.changed = true;
-    this.hasFocus = true;
-
-    if(this.observer) clearTimeout(this.observer);
-      this.observer = 
-        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
-  },
-
-  onHover: function(event) {
-    var element = Event.findElement(event, 'LI');
-    if(this.index != element.autocompleteIndex) 
-    {
-        this.index = element.autocompleteIndex;
-        this.render();
-    }
-    Event.stop(event);
-  },
-  
-  onClick: function(event) {
-    var element = Event.findElement(event, 'LI');
-    this.index = element.autocompleteIndex;
-    this.selectEntry();
-    this.hide();
-  },
-  
-  onBlur: function(event) {
-    // needed to make click events working
-    setTimeout(this.hide.bind(this), 250);
-    this.hasFocus = false;
-    this.active = false;     
-  }, 
-  
-  render: function() {
-    if(this.entryCount > 0) {
-      for (var i = 0; i < this.entryCount; i++)
-        this.index==i ? 
-          Element.addClassName(this.getEntry(i),"selected") : 
-          Element.removeClassName(this.getEntry(i),"selected");
-        
-      if(this.hasFocus) { 
-        this.show();
-        this.active = true;
-      }
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-  
-  markPrevious: function() {
-    if(this.index > 0) this.index--
-      else this.index = this.entryCount-1;
-  },
-  
-  markNext: function() {
-    if(this.index < this.entryCount-1) this.index++
-      else this.index = 0;
-  },
-  
-  getEntry: function(index) {
-    return this.update.firstChild.childNodes[index];
-  },
-  
-  getCurrentEntry: function() {
-    return this.getEntry(this.index);
-  },
-  
-  selectEntry: function() {
-    this.active = false;
-    this.updateElement(this.getCurrentEntry());
-  },
-
-  updateElement: function(selectedElement) {
-    if (this.options.updateElement) {
-      this.options.updateElement(selectedElement);
-      return;
-    }
-
-    var value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-    var lastTokenPos = this.findLastToken();
-    if (lastTokenPos != -1) {
-      var newValue = this.element.value.substr(0, lastTokenPos + 1);
-      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
-      if (whitespace)
-        newValue += whitespace[0];
-      this.element.value = newValue + value;
-    } else {
-      this.element.value = value;
-    }
-    this.element.focus();
-    
-    if (this.options.afterUpdateElement)
-      this.options.afterUpdateElement(this.element, selectedElement);
-  },
-
-  updateChoices: function(choices) {
-    if(!this.changed && this.hasFocus) {
-      this.update.innerHTML = choices;
-      Element.cleanWhitespace(this.update);
-      Element.cleanWhitespace(this.update.firstChild);
-
-      if(this.update.firstChild && this.update.firstChild.childNodes) {
-        this.entryCount = 
-          this.update.firstChild.childNodes.length;
-        for (var i = 0; i < this.entryCount; i++) {
-          var entry = this.getEntry(i);
-          entry.autocompleteIndex = i;
-          this.addObservers(entry);
-        }
-      } else { 
-        this.entryCount = 0;
-      }
-
-      this.stopIndicator();
-
-      this.index = 0;
-      this.render();
-    }
-  },
-
-  addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
-  },
-
-  onObserverEvent: function() {
-    this.changed = false;   
-    if(this.getToken().length>=this.options.minChars) {
-      this.startIndicator();
-      this.getUpdatedChoices();
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-
-  getToken: function() {
-    var tokenPos = this.findLastToken();
-    if (tokenPos != -1)
-      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
-    else
-      var ret = this.element.value;
-
-    return /\n/.test(ret) ? '' : ret;
-  },
-
-  findLastToken: function() {
-    var lastTokenPos = -1;
-
-    for (var i=0; i<this.options.tokens.length; i++) {
-      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
-      if (thisTokenPos > lastTokenPos)
-        lastTokenPos = thisTokenPos;
-    }
-    return lastTokenPos;
-  }
-}
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
-  initialize: function(element, update, url, options) {
-	  this.baseInitialize(element, update, options);
-    this.options.asynchronous  = true;
-    this.options.onComplete    = this.onComplete.bind(this);
-    this.options.defaultParams = this.options.parameters || null;
-    this.url                   = url;
-  },
-
-  getUpdatedChoices: function() {
-    entry = encodeURIComponent(this.options.paramName) + '=' + 
-      encodeURIComponent(this.getToken());
-
-    this.options.parameters = this.options.callback ?
-      this.options.callback(this.element, entry) : entry;
-
-    if(this.options.defaultParams) 
-      this.options.parameters += '&' + this.options.defaultParams;
-
-    new Ajax.Request(this.url, this.options);
-  },
-
-  onComplete: function(request) {
-    this.updateChoices(request.responseText);
-  }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-//                    text only at the beginning of strings in the 
-//                    autocomplete array. Defaults to true, which will
-//                    match text at the beginning of any *word* in the
-//                    strings in the autocomplete array. If you want to
-//                    search anywhere in the string, additionally set
-//                    the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-//                   a partial match (unlike minChars, which defines
-//                   how many characters are required to do any match
-//                   at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-//                 Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector' 
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
-  initialize: function(element, update, array, options) {
-    this.baseInitialize(element, update, options);
-    this.options.array = array;
-  },
-
-  getUpdatedChoices: function() {
-    this.updateChoices(this.options.selector(this));
-  },
-
-  setOptions: function(options) {
-    this.options = Object.extend({
-      choices: 10,
-      partialSearch: true,
-      partialChars: 2,
-      ignoreCase: true,
-      fullSearch: false,
-      selector: function(instance) {
-        var ret       = []; // Beginning matches
-        var partial   = []; // Inside matches
-        var entry     = instance.getToken();
-        var count     = 0;
-
-        for (var i = 0; i < instance.options.array.length &&  
-          ret.length < instance.options.choices ; i++) { 
-
-          var elem = instance.options.array[i];
-          var foundPos = instance.options.ignoreCase ? 
-            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
-            elem.indexOf(entry);
-
-          while (foundPos != -1) {
-            if (foundPos == 0 && elem.length != entry.length) { 
-              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
-                elem.substr(entry.length) + "</li>");
-              break;
-            } else if (entry.length >= instance.options.partialChars && 
-              instance.options.partialSearch && foundPos != -1) {
-              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
-                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
-                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
-                  foundPos + entry.length) + "</li>");
-                break;
-              }
-            }
-
-            foundPos = instance.options.ignoreCase ? 
-              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
-              elem.indexOf(entry, foundPos + 1);
-
-          }
-        }
-        if (partial.length)
-          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
-        return "<ul>" + ret.join('') + "</ul>";
-      }
-    }, options || {});
-  }
-});
-
-// AJAX in-place editor
-//
-// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
-  setTimeout(function() {
-    Field.activate(field);
-  }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
-Ajax.InPlaceEditor.prototype = {
-  initialize: function(element, url, options) {
-    this.url = url;
-    this.element = $(element);
-
-    this.options = Object.extend({
-      okText: "ok",
-      cancelText: "cancel",
-      savingText: "Saving...",
-      clickToEditText: "Click to edit",
-      okText: "ok",
-      rows: 1,
-      onComplete: function(transport, element) {
-        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
-      },
-      onFailure: function(transport) {
-        alert("Error communicating with the server: " + transport.responseText.stripTags());
-      },
-      callback: function(form) {
-        return Form.serialize(form);
-      },
-      handleLineBreaks: true,
-      loadingText: 'Loading...',
-      savingClassName: 'inplaceeditor-saving',
-      loadingClassName: 'inplaceeditor-loading',
-      formClassName: 'inplaceeditor-form',
-      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
-      highlightendcolor: "#FFFFFF",
-      externalControl:	null,
-      ajaxOptions: {}
-    }, options || {});
-
-    if(!this.options.formId && this.element.id) {
-      this.options.formId = this.element.id + "-inplaceeditor";
-      if ($(this.options.formId)) {
-        // there's already a form with that name, don't specify an id
-        this.options.formId = null;
-      }
-    }
-    
-    if (this.options.externalControl) {
-      this.options.externalControl = $(this.options.externalControl);
-    }
-    
-    this.originalBackground = Element.getStyle(this.element, 'background-color');
-    if (!this.originalBackground) {
-      this.originalBackground = "transparent";
-    }
-    
-    this.element.title = this.options.clickToEditText;
-    
-    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
-    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
-    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
-    Event.observe(this.element, 'click', this.onclickListener);
-    Event.observe(this.element, 'mouseover', this.mouseoverListener);
-    Event.observe(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.observe(this.options.externalControl, 'click', this.onclickListener);
-      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  },
-  enterEditMode: function(evt) {
-    if (this.saving) return;
-    if (this.editing) return;
-    this.editing = true;
-    this.onEnterEditMode();
-    if (this.options.externalControl) {
-      Element.hide(this.options.externalControl);
-    }
-    Element.hide(this.element);
-    this.createForm();
-    this.element.parentNode.insertBefore(this.form, this.element);
-    Field.scrollFreeActivate(this.editField);
-    // stop the event to avoid a page refresh in Safari
-    if (evt) {
-      Event.stop(evt);
-    }
-    return false;
-  },
-  createForm: function() {
-    this.form = document.createElement("form");
-    this.form.id = this.options.formId;
-    Element.addClassName(this.form, this.options.formClassName)
-    this.form.onsubmit = this.onSubmit.bind(this);
-
-    this.createEditField();
-
-    if (this.options.textarea) {
-      var br = document.createElement("br");
-      this.form.appendChild(br);
-    }
-
-    okButton = document.createElement("input");
-    okButton.type = "submit";
-    okButton.value = this.options.okText;
-    this.form.appendChild(okButton);
-
-    cancelLink = document.createElement("a");
-    cancelLink.href = "#";
-    cancelLink.appendChild(document.createTextNode(this.options.cancelText));
-    cancelLink.onclick = this.onclickCancel.bind(this);
-    this.form.appendChild(cancelLink);
-  },
-  hasHTMLLineBreaks: function(string) {
-    if (!this.options.handleLineBreaks) return false;
-    return string.match(/<br/i) || string.match(/<p>/i);
-  },
-  convertHTMLLineBreaks: function(string) {
-    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
-  },
-  createEditField: function() {
-    var text;
-    if(this.options.loadTextURL) {
-      text = this.options.loadingText;
-    } else {
-      text = this.getText();
-    }
-    
-    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
-      this.options.textarea = false;
-      var textField = document.createElement("input");
-      textField.type = "text";
-      textField.name = "value";
-      textField.value = text;
-      textField.style.backgroundColor = this.options.highlightcolor;
-      var size = this.options.size || this.options.cols || 0;
-      if (size != 0) textField.size = size;
-      this.editField = textField;
-    } else {
-      this.options.textarea = true;
-      var textArea = document.createElement("textarea");
-      textArea.name = "value";
-      textArea.value = this.convertHTMLLineBreaks(text);
-      textArea.rows = this.options.rows;
-      textArea.cols = this.options.cols || 40;
-      this.editField = textArea;
-    }
-    
-    if(this.options.loadTextURL) {
-      this.loadExternalText();
-    }
-    this.form.appendChild(this.editField);
-  },
-  getText: function() {
-    return this.element.innerHTML;
-  },
-  loadExternalText: function() {
-    Element.addClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = true;
-    new Ajax.Request(
-      this.options.loadTextURL,
-      Object.extend({
-        asynchronous: true,
-        onComplete: this.onLoadedExternalText.bind(this)
-      }, this.options.ajaxOptions)
-    );
-  },
-  onLoadedExternalText: function(transport) {
-    Element.removeClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = false;
-    this.editField.value = transport.responseText.stripTags();
-  },
-  onclickCancel: function() {
-    this.onComplete();
-    this.leaveEditMode();
-    return false;
-  },
-  onFailure: function(transport) {
-    this.options.onFailure(transport);
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-      this.oldInnerHTML = null;
-    }
-    return false;
-  },
-  onSubmit: function() {
-    // onLoading resets these so we need to save them away for the Ajax call
-    var form = this.form;
-    var value = this.editField.value;
-    
-    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
-    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
-    // to be displayed indefinitely
-    this.onLoading();
-    
-    new Ajax.Updater(
-      { 
-        success: this.element,
-         // don't update on failure (this could be an option)
-        failure: null
-      },
-      this.url,
-      Object.extend({
-        parameters: this.options.callback(form, value),
-        onComplete: this.onComplete.bind(this),
-        onFailure: this.onFailure.bind(this)
-      }, this.options.ajaxOptions)
-    );
-    // stop the event to avoid a page refresh in Safari
-    if (arguments.length > 1) {
-      Event.stop(arguments[0]);
-    }
-    return false;
-  },
-  onLoading: function() {
-    this.saving = true;
-    this.removeForm();
-    this.leaveHover();
-    this.showSaving();
-  },
-  showSaving: function() {
-    this.oldInnerHTML = this.element.innerHTML;
-    this.element.innerHTML = this.options.savingText;
-    Element.addClassName(this.element, this.options.savingClassName);
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-  },
-  removeForm: function() {
-    if(this.form) {
-      if (this.form.parentNode) Element.remove(this.form);
-      this.form = null;
-    }
-  },
-  enterHover: function() {
-    if (this.saving) return;
-    this.element.style.backgroundColor = this.options.highlightcolor;
-    if (this.effect) {
-      this.effect.cancel();
-    }
-    Element.addClassName(this.element, this.options.hoverClassName)
-  },
-  leaveHover: function() {
-    if (this.options.backgroundColor) {
-      this.element.style.backgroundColor = this.oldBackground;
-    }
-    Element.removeClassName(this.element, this.options.hoverClassName)
-    if (this.saving) return;
-    this.effect = new Effect.Highlight(this.element, {
-      startcolor: this.options.highlightcolor,
-      endcolor: this.options.highlightendcolor,
-      restorecolor: this.originalBackground
-    });
-  },
-  leaveEditMode: function() {
-    Element.removeClassName(this.element, this.options.savingClassName);
-    this.removeForm();
-    this.leaveHover();
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-    if (this.options.externalControl) {
-      Element.show(this.options.externalControl);
-    }
-    this.editing = false;
-    this.saving = false;
-    this.oldInnerHTML = null;
-    this.onLeaveEditMode();
-  },
-  onComplete: function(transport) {
-    this.leaveEditMode();
-    this.options.onComplete.bind(this)(transport, this.element);
-  },
-  onEnterEditMode: function() {},
-  onLeaveEditMode: function() {},
-  dispose: function() {
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-    }
-    this.leaveEditMode();
-    Event.stopObserving(this.element, 'click', this.onclickListener);
-    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
-    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
-      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  }
-};
-
-// Delayed observer, like Form.Element.Observer, 
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
-  initialize: function(element, delay, callback) {
-    this.delay     = delay || 0.5;
-    this.element   = $(element);
-    this.callback  = callback;
-    this.timer     = null;
-    this.lastValue = $F(this.element); 
-    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
-  },
-  delayedListener: function(event) {
-    if(this.lastValue == $F(this.element)) return;
-    if(this.timer) clearTimeout(this.timer);
-    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
-    this.lastValue = $F(this.element);
-  },
-  onTimerEvent: function() {
-    this.timer = null;
-    this.callback(this.element, $F(this.element));
-  }
-};
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/dragdrop.js b/groovy/modules/grails/src/war/js/dragdrop.js
deleted file mode 100644
index 92d1f73..0000000
--- a/groovy/modules/grails/src/war/js/dragdrop.js
+++ /dev/null
@@ -1,584 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// See scriptaculous.js for full license.
-
-/*--------------------------------------------------------------------------*/
-
-var Droppables = {
-  drops: [],
-
-  remove: function(element) {
-    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
-  },
-
-  add: function(element) {
-    element = $(element);
-    var options = Object.extend({
-      greedy:     true,
-      hoverclass: null  
-    }, arguments[1] || {});
-
-    // cache containers
-    if(options.containment) {
-      options._containers = [];
-      var containment = options.containment;
-      if((typeof containment == 'object') && 
-        (containment.constructor == Array)) {
-        containment.each( function(c) { options._containers.push($(c)) });
-      } else {
-        options._containers.push($(containment));
-      }
-    }
-    
-    if(options.accept) options.accept = [options.accept].flatten();
-
-    Element.makePositioned(element); // fix IE
-    options.element = element;
-
-    this.drops.push(options);
-  },
-
-  isContained: function(element, drop) {
-    var parentNode = element.parentNode;
-    return drop._containers.detect(function(c) { return parentNode == c });
-  },
-
-  isAffected: function(point, element, drop) {
-    return (
-      (drop.element!=element) &&
-      ((!drop._containers) ||
-        this.isContained(element, drop)) &&
-      ((!drop.accept) ||
-        (Element.classNames(element).detect( 
-          function(v) { return drop.accept.include(v) } ) )) &&
-      Position.within(drop.element, point[0], point[1]) );
-  },
-
-  deactivate: function(drop) {
-    if(drop.hoverclass)
-      Element.removeClassName(drop.element, drop.hoverclass);
-    this.last_active = null;
-  },
-
-  activate: function(drop) {
-    if(drop.hoverclass)
-      Element.addClassName(drop.element, drop.hoverclass);
-    this.last_active = drop;
-  },
-
-  show: function(point, element) {
-    if(!this.drops.length) return;
-    
-    if(this.last_active) this.deactivate(this.last_active);
-    this.drops.each( function(drop) {
-      if(Droppables.isAffected(point, element, drop)) {
-        if(drop.onHover)
-           drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-        if(drop.greedy) { 
-          Droppables.activate(drop);
-          throw $break;
-        }
-      }
-    });
-  },
-
-  fire: function(event, element) {
-    if(!this.last_active) return;
-    Position.prepare();
-
-    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
-      if (this.last_active.onDrop) 
-        this.last_active.onDrop(element, this.last_active.element, event);
-  },
-
-  reset: function() {
-    if(this.last_active)
-      this.deactivate(this.last_active);
-  }
-}
-
-var Draggables = {
-  drags: [],
-  observers: [],
-  
-  register: function(draggable) {
-    if(this.drags.length == 0) {
-      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
-      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
-      
-      Event.observe(document, "mouseup", this.eventMouseUp);
-      Event.observe(document, "mousemove", this.eventMouseMove);
-      Event.observe(document, "keypress", this.eventKeypress);
-    }
-    this.drags.push(draggable);
-  },
-  
-  unregister: function(draggable) {
-    this.drags = this.drags.reject(function(d) { return d==draggable });
-    if(this.drags.length == 0) {
-      Event.stopObserving(document, "mouseup", this.eventMouseUp);
-      Event.stopObserving(document, "mousemove", this.eventMouseMove);
-      Event.stopObserving(document, "keypress", this.eventKeypress);
-    }
-  },
-  
-  activate: function(draggable) {
-    window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
-    this.activeDraggable = draggable;
-  },
-  
-  deactivate: function(draggbale) {
-    this.activeDraggable = null;
-  },
-  
-  updateDrag: function(event) {
-    if(!this.activeDraggable) return;
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    // Mozilla-based browsers fire successive mousemove events with
-    // the same coordinates, prevent needless redrawing (moz bug?)
-    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
-    this._lastPointer = pointer;
-    this.activeDraggable.updateDrag(event, pointer);
-  },
-  
-  endDrag: function(event) {
-    if(!this.activeDraggable) return;
-    this._lastPointer = null;
-    this.activeDraggable.endDrag(event);
-  },
-  
-  keyPress: function(event) {
-    if(this.activeDraggable)
-      this.activeDraggable.keyPress(event);
-  },
-  
-  addObserver: function(observer) {
-    this.observers.push(observer);
-    this._cacheObserverCallbacks();
-  },
-  
-  removeObserver: function(element) {  // element instead of observer fixes mem leaks
-    this.observers = this.observers.reject( function(o) { return o.element==element });
-    this._cacheObserverCallbacks();
-  },
-  
-  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
-    if(this[eventName+'Count'] > 0)
-      this.observers.each( function(o) {
-        if(o[eventName]) o[eventName](eventName, draggable, event);
-      });
-  },
-  
-  _cacheObserverCallbacks: function() {
-    ['onStart','onEnd','onDrag'].each( function(eventName) {
-      Draggables[eventName+'Count'] = Draggables.observers.select(
-        function(o) { return o[eventName]; }
-      ).length;
-    });
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable.prototype = {
-  initialize: function(element) {
-    var options = Object.extend({
-      handle: false,
-      starteffect: function(element) { 
-        new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7}); 
-      },
-      reverteffect: function(element, top_offset, left_offset) {
-        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
-        element._revert = new Effect.MoveBy(element, -top_offset, -left_offset, {duration:dur});
-      },
-      endeffect: function(element) { 
-        new Effect.Opacity(element, {duration:0.2, from:0.7, to:1.0}); 
-      },
-      zindex: 1000,
-      revert: false,
-      snap: false   // false, or xy or [x,y] or function(x,y){ return [x,y] }
-    }, arguments[1] || {});
-
-    this.element = $(element);
-    
-    if(options.handle && (typeof options.handle == 'string'))
-      this.handle = Element.childrenWithClassName(this.element, options.handle)[0];  
-    if(!this.handle) this.handle = $(options.handle);
-    if(!this.handle) this.handle = this.element;
-
-    Element.makePositioned(this.element); // fix IE    
-
-    this.delta    = this.currentDelta();
-    this.options  = options;
-    this.dragging = false;   
-
-    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
-    Event.observe(this.handle, "mousedown", this.eventMouseDown);
-    
-    Draggables.register(this);
-  },
-  
-  destroy: function() {
-    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
-    Draggables.unregister(this);
-  },
-  
-  currentDelta: function() {
-    return([
-      parseInt(this.element.style.left || '0'),
-      parseInt(this.element.style.top || '0')]);
-  },
-  
-  initDrag: function(event) {
-    if(Event.isLeftClick(event)) {    
-      // abort on form elements, fixes a Firefox issue
-      var src = Event.element(event);
-      if(src.tagName && (
-        src.tagName=='INPUT' ||
-        src.tagName=='SELECT' ||
-        src.tagName=='BUTTON' ||
-        src.tagName=='TEXTAREA')) return;
-        
-      if(this.element._revert) {
-        this.element._revert.cancel();
-        this.element._revert = null;
-      }
-      
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      var pos     = Position.cumulativeOffset(this.element);
-      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-      
-      Draggables.activate(this);
-      Event.stop(event);
-    }
-  },
-  
-  startDrag: function(event) {
-    this.dragging = true;
-    
-    if(this.options.zindex) {
-      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
-      this.element.style.zIndex = this.options.zindex;
-    }
-    
-    if(this.options.ghosting) {
-      this._clone = this.element.cloneNode(true);
-      Position.absolutize(this.element);
-      this.element.parentNode.insertBefore(this._clone, this.element);
-    }
-    
-    Draggables.notify('onStart', this, event);
-    if(this.options.starteffect) this.options.starteffect(this.element);
-  },
-  
-  updateDrag: function(event, pointer) {
-    if(!this.dragging) this.startDrag(event);
-    Position.prepare();
-    Droppables.show(pointer, this.element);
-    Draggables.notify('onDrag', this, event);
-    this.draw(pointer);
-    if(this.options.change) this.options.change(this);
-    
-    // fix AppleWebKit rendering
-    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-    Event.stop(event);
-  },
-  
-  finishDrag: function(event, success) {
-    this.dragging = false;
-
-    if(this.options.ghosting) {
-      Position.relativize(this.element);
-      Element.remove(this._clone);
-      this._clone = null;
-    }
-
-    if(success) Droppables.fire(event, this.element);
-    Draggables.notify('onEnd', this, event);
-
-    var revert = this.options.revert;
-    if(revert && typeof revert == 'function') revert = revert(this.element);
-    
-    var d = this.currentDelta();
-    if(revert && this.options.reverteffect) {
-      this.options.reverteffect(this.element, 
-        d[1]-this.delta[1], d[0]-this.delta[0]);
-    } else {
-      this.delta = d;
-    }
-
-    if(this.options.zindex)
-      this.element.style.zIndex = this.originalZ;
-
-    if(this.options.endeffect) 
-      this.options.endeffect(this.element);
-
-    Draggables.deactivate(this);
-    Droppables.reset();
-  },
-  
-  keyPress: function(event) {
-    if(!event.keyCode==Event.KEY_ESC) return;
-    this.finishDrag(event, false);
-    Event.stop(event);
-  },
-  
-  endDrag: function(event) {
-    if(!this.dragging) return;
-    this.finishDrag(event, true);
-    Event.stop(event);
-  },
-  
-  draw: function(point) {
-    var pos = Position.cumulativeOffset(this.element);
-    var d = this.currentDelta();
-    pos[0] -= d[0]; pos[1] -= d[1];
-    
-    var p = [0,1].map(function(i){ return (point[i]-pos[i]-this.offset[i]) }.bind(this));
-    
-    if(this.options.snap) {
-      if(typeof this.options.snap == 'function') {
-        p = this.options.snap(p[0],p[1]);
-      } else {
-      if(this.options.snap instanceof Array) {
-        p = p.map( function(v, i) {
-          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
-      } else {
-        p = p.map( function(v) {
-          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
-      }
-    }}
-    
-    var style = this.element.style;
-    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
-      style.left = p[0] + "px";
-    if((!this.options.constraint) || (this.options.constraint=='vertical'))
-      style.top  = p[1] + "px";
-    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
-  initialize: function(element, observer) {
-    this.element   = $(element);
-    this.observer  = observer;
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onStart: function() {
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onEnd: function() {
-    Sortable.unmark();
-    if(this.lastValue != Sortable.serialize(this.element))
-      this.observer(this.element)
-  }
-}
-
-var Sortable = {
-  sortables: new Array(),
-  
-  options: function(element){
-    element = $(element);
-    return this.sortables.detect(function(s) { return s.element == element });
-  },
-  
-  destroy: function(element){
-    element = $(element);
-    this.sortables.findAll(function(s) { return s.element == element }).each(function(s){
-      Draggables.removeObserver(s.element);
-      s.droppables.each(function(d){ Droppables.remove(d) });
-      s.draggables.invoke('destroy');
-    });
-    this.sortables = this.sortables.reject(function(s) { return s.element == element });
-  },
-  
-  create: function(element) {
-    element = $(element);
-    var options = Object.extend({ 
-      element:     element,
-      tag:         'li',       // assumes li children, override with tag: 'tagname'
-      dropOnEmpty: false,
-      tree:        false,      // fixme: unimplemented
-      overlap:     'vertical', // one of 'vertical', 'horizontal'
-      constraint:  'vertical', // one of 'vertical', 'horizontal', false
-      containment: element,    // also takes array of elements (or id's); or false
-      handle:      false,      // or a CSS class
-      only:        false,
-      hoverclass:  null,
-      ghosting:    false,
-      format:      null,
-      onChange:    Prototype.emptyFunction,
-      onUpdate:    Prototype.emptyFunction
-    }, arguments[1] || {});
-
-    // clear any old sortable with same element
-    this.destroy(element);
-
-    // build options for the draggables
-    var options_for_draggable = {
-      revert:      true,
-      ghosting:    options.ghosting,
-      constraint:  options.constraint,
-      handle:      options.handle };
-
-    if(options.starteffect)
-      options_for_draggable.starteffect = options.starteffect;
-
-    if(options.reverteffect)
-      options_for_draggable.reverteffect = options.reverteffect;
-    else
-      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
-        element.style.top  = 0;
-        element.style.left = 0;
-      };
-
-    if(options.endeffect)
-      options_for_draggable.endeffect = options.endeffect;
-
-    if(options.zindex)
-      options_for_draggable.zindex = options.zindex;
-
-    // build options for the droppables  
-    var options_for_droppable = {
-      overlap:     options.overlap,
-      containment: options.containment,
-      hoverclass:  options.hoverclass,
-      onHover:     Sortable.onHover,
-      greedy:      !options.dropOnEmpty
-    }
-
-    // fix for gecko engine
-    Element.cleanWhitespace(element); 
-
-    options.draggables = [];
-    options.droppables = [];
-
-    // make it so
-
-    // drop on empty handling
-    if(options.dropOnEmpty) {
-      Droppables.add(element,
-        {containment: options.containment, onHover: Sortable.onEmptyHover, greedy: false});
-      options.droppables.push(element);
-    }
-
-    (this.findElements(element, options) || []).each( function(e) {
-      // handles are per-draggable
-      var handle = options.handle ? 
-        Element.childrenWithClassName(e, options.handle)[0] : e;    
-      options.draggables.push(
-        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
-      Droppables.add(e, options_for_droppable);
-      options.droppables.push(e);      
-    });
-
-    // keep reference
-    this.sortables.push(options);
-
-    // for onupdate
-    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
-  },
-
-  // return all suitable-for-sortable elements in a guaranteed order
-  findElements: function(element, options) {
-    if(!element.hasChildNodes()) return null;
-    var elements = [];
-    $A(element.childNodes).each( function(e) {
-      if(e.tagName && e.tagName.toUpperCase()==options.tag.toUpperCase() &&
-        (!options.only || (Element.hasClassName(e, options.only))))
-          elements.push(e);
-      if(options.tree) {
-        var grandchildren = this.findElements(e, options);
-        if(grandchildren) elements.push(grandchildren);
-      }
-    });
-
-    return (elements.length>0 ? elements.flatten() : null);
-  },
-
-  onHover: function(element, dropon, overlap) {
-    if(overlap>0.5) {
-      Sortable.mark(dropon, 'before');
-      if(dropon.previousSibling != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, dropon);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    } else {
-      Sortable.mark(dropon, 'after');
-      var nextElement = dropon.nextSibling || null;
-      if(nextElement != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, nextElement);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    }
-  },
-
-  onEmptyHover: function(element, dropon) {
-    if(element.parentNode!=dropon) {
-      var oldParentNode = element.parentNode;
-      dropon.appendChild(element);
-      Sortable.options(oldParentNode).onChange(element);
-      Sortable.options(dropon).onChange(element);
-    }
-  },
-
-  unmark: function() {
-    if(Sortable._marker) Element.hide(Sortable._marker);
-  },
-
-  mark: function(dropon, position) {
-    // mark on ghosting only
-    var sortable = Sortable.options(dropon.parentNode);
-    if(sortable && !sortable.ghosting) return; 
-
-    if(!Sortable._marker) {
-      Sortable._marker = $('dropmarker') || document.createElement('DIV');
-      Element.hide(Sortable._marker);
-      Element.addClassName(Sortable._marker, 'dropmarker');
-      Sortable._marker.style.position = 'absolute';
-      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
-    }    
-    var offsets = Position.cumulativeOffset(dropon);
-    Sortable._marker.style.left = offsets[0] + 'px';
-    Sortable._marker.style.top = offsets[1] + 'px';
-    
-    if(position=='after')
-      if(sortable.overlap == 'horizontal') 
-        Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px';
-      else
-        Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px';
-    
-    Element.show(Sortable._marker);
-  },
-
-  serialize: function(element) {
-    element = $(element);
-    var sortableOptions = this.options(element);
-    var options = Object.extend({
-      tag:  sortableOptions.tag,
-      only: sortableOptions.only,
-      name: element.id,
-      format: sortableOptions.format || /^[^_]*_(.*)$/
-    }, arguments[1] || {});
-    return $(this.findElements(element, options) || []).map( function(item) {
-      return (encodeURIComponent(options.name) + "[]=" + 
-              encodeURIComponent(item.id.match(options.format) ? item.id.match(options.format)[1] : ''));
-    }).join("&");
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/effects.js b/groovy/modules/grails/src/war/js/effects.js
deleted file mode 100644
index 414398c..0000000
--- a/groovy/modules/grails/src/war/js/effects.js
+++ /dev/null
@@ -1,854 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// See scriptaculous.js for full license.  
-
-/* ------------- element ext -------------- */  
- 
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';  
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}  
-
-Element.collectTextNodesIgnoreClass = function(element, ignoreclass) {  
-  var children = $(element).childNodes;  
-  var text     = '';  
-  var classtest = new RegExp('^([^ ]+ )*' + ignoreclass+ '( [^ ]+)*$','i');  
- 
-  for (var i = 0; i < children.length; i++) {  
-    if(children[i].nodeType==3) {  
-      text+=children[i].nodeValue;  
-    } else {  
-      if((!children[i].className.match(classtest)) && children[i].hasChildNodes())  
-        text += Element.collectTextNodesIgnoreClass(children[i], ignoreclass);  
-    }  
-  }  
- 
-  return text;
-}
-
-Element.setStyle = function(element, style) {
-  element = $(element);
-  for(k in style) element.style[k.camelize()] = style[k];
-}
-
-Element.setContentZoom = function(element, percent) {  
-  Element.setStyle(element, {fontSize: (percent/100) + 'em'});   
-  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);  
-}
-
-Element.getOpacity = function(element){  
-  var opacity;
-  if (opacity = Element.getStyle(element, 'opacity'))  
-    return parseFloat(opacity);  
-  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  
-    if(opacity[1]) return parseFloat(opacity[1]) / 100;  
-  return 1.0;  
-}
-
-Element.setOpacity = function(element, value){  
-  element= $(element);  
-  if (value == 1){
-    Element.setStyle(element, { opacity: 
-      (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 
-      0.999999 : null });
-    if(/MSIE/.test(navigator.userAgent))  
-      Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  
-  } else {  
-    if(value < 0.00001) value = 0;  
-    Element.setStyle(element, {opacity: value});
-    if(/MSIE/.test(navigator.userAgent))  
-     Element.setStyle(element, 
-       { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
-                 'alpha(opacity='+value*100+')' });  
-  }   
-}  
- 
-Element.getInlineOpacity = function(element){  
-  return $(element).style.opacity || '';
-}  
-
-Element.childrenWithClassName = function(element, className) {  
-  return $A($(element).getElementsByTagName('*')).select(
-    function(c) { return Element.hasClassName(c, className) });
-}
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  tagifyText: function(element) {
-    var tagifyStyle = 'position:relative';
-    if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {}
-
-Effect.Transitions.linear = function(pos) {
-  return pos;
-}
-Effect.Transitions.sinoidal = function(pos) {
-  return (-Math.cos(pos*Math.PI)/2) + 0.5;
-}
-Effect.Transitions.reverse  = function(pos) {
-  return 1-pos;
-}
-Effect.Transitions.flicker = function(pos) {
-  return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-}
-Effect.Transitions.wobble = function(pos) {
-  return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-}
-Effect.Transitions.pulse = function(pos) {
-  return (Math.floor(pos*10) % 2 == 0 ? 
-    (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
-}
-Effect.Transitions.none = function(pos) {
-  return 0;
-}
-Effect.Transitions.full = function(pos) {
-  return 1;
-}
-
-/* ------------- core effects ------------- */
-
-Effect.Queue = {
-  effects:  [],
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  interval: null,
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    switch(effect.options.queue) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-    this.effects.push(effect);
-    if(!this.interval) 
-      this.interval = setInterval(this.loop.bind(this), 40);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    this.effects.invoke('loop', timePos);
-  }
-}
-Object.extend(Effect.Queue, Enumerable);
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  setOptions: function(options) {
-    this.options = Object.extend({
-      transition: Effect.Transitions.sinoidal,
-      duration:   1.0,   // seconds
-      fps:        25.0,  // max. 25fps due to Effect.Queue implementation
-      sync:       false, // true for combining
-      from:       0.0,
-      to:         1.0,
-      delay:      0.0,
-      queue:      'parallel'
-    }, options || {});
-  },
-  start: function(options) {
-    this.setOptions(options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn + (this.options.duration*1000);
-    this.event('beforeStart');
-    if(!this.options.sync) Effect.Queue.add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
-      var frame = Math.round(pos * this.options.fps * this.options.duration);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  render: function(pos) {
-    if(this.state == 'idle') {
-      this.state = 'running';
-      this.event('beforeSetup');
-      if(this.setup) this.setup();
-      this.event('afterSetup');
-    }
-    if(this.state == 'running') {
-      if(this.options.transition) pos = this.options.transition(pos);
-      pos *= (this.options.to-this.options.from);
-      pos += this.options.from;
-      this.position = pos;
-      this.event('beforeUpdate');
-      if(this.update) this.update(pos);
-      this.event('afterUpdate');
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync) Effect.Queue.remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    // make this work on IE on elements without 'layout'
-    if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
-      Element.setStyle(this.element, {zoom: 1});
-    var options = Object.extend({
-      from: Element.getOpacity(this.element) || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    Element.setOpacity(this.element, position);
-  }
-});
-
-Effect.MoveBy = Class.create();
-Object.extend(Object.extend(Effect.MoveBy.prototype, Effect.Base.prototype), {
-  initialize: function(element, toTop, toLeft) {
-    this.element      = $(element);
-    this.toTop        = toTop;
-    this.toLeft       = toLeft;
-    this.start(arguments[3]);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    Element.makePositioned(this.element);
-    this.originalTop  = parseFloat(Element.getStyle(this.element,'top')  || '0');
-    this.originalLeft = parseFloat(Element.getStyle(this.element,'left') || '0');
-  },
-  update: function(position) {
-    Element.setStyle(this.element, {
-      top:  this.toTop  * position + this.originalTop + 'px',
-      left: this.toLeft * position + this.originalLeft + 'px'
-    });
-  }
-});
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element)
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = Element.getStyle(this.element,'position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = Element.getStyle(this.element,'font-size') || '100%';
-    ['em','px','%'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      Element.setStyle(this.element, {fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if (this.restoreAfterFinish) Element.setStyle(this.element, this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = width + 'px';
-    if(this.options.scaleY) d.height = height + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    Element.setStyle(this.element, d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(Element.getStyle(this.element, 'display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {
-      backgroundImage: Element.getStyle(this.element, 'background-image') };
-    Element.setStyle(this.element, {backgroundImage: 'none'});
-    if(!this.options.endcolor)
-      this.options.endcolor = Element.getStyle(this.element, 'background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = Element.getStyle(this.element, 'background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    Element.setStyle(this.element,{backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    Element.setStyle(this.element, Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  var oldOpacity = Element.getInlineOpacity(element);
-  var options = Object.extend({
-  from: Element.getOpacity(element) || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { with(Element) { 
-    if(effect.options.to!=0) return;
-    hide(effect.element);
-    setStyle(effect.element, {opacity: oldOpacity}); }}
-  }, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  var options = Object.extend({
-  from: (Element.getStyle(element, 'display') == 'none' ? 0.0 : Element.getOpacity(element) || 0.0),
-  to:   1.0,
-  beforeSetup: function(effect) { with(Element) {
-    setOpacity(effect.element, effect.options.from);
-    show(effect.element); }}
-  }, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { opacity: Element.getInlineOpacity(element), position: Element.getStyle(element, 'position') };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) { with(Element) {
-        setStyle(effect.effects[0].element, {position: 'absolute'}); }},
-      afterFinishInternal: function(effect) { with(Element) {
-         hide(effect.effects[0].element);
-         setStyle(effect.effects[0].element, oldStyle); }}
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  Element.makeClipping(element);
-  return new Effect.Scale(element, 0, 
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) { with(Element) {
-        [hide, undoClipping].call(effect.element); }} 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var oldHeight = Element.getStyle(element, 'height');
-  var elementDimensions = Element.getDimensions(element);
-  return new Effect.Scale(element, 100, 
-    Object.extend({ scaleContent: false, 
-      scaleX: false,
-      scaleFrom: 0,
-      scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-      restoreAfterFinish: true,
-      afterSetup: function(effect) { with(Element) {
-        makeClipping(effect.element);
-        setStyle(effect.element, {height: '0px'});
-        show(effect.element); 
-      }},  
-      afterFinishInternal: function(effect) { with(Element) {
-        undoClipping(effect.element);
-        setStyle(effect.element, {height: oldHeight});
-      }}
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = Element.getInlineOpacity(element);
-  return new Effect.Appear(element, { 
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { with(Element) {
-          [makePositioned,makeClipping].call(effect.element);
-        }},
-        afterFinishInternal: function(effect) { with(Element) {
-          [hide,undoClipping,undoPositioned].call(effect.element);
-          setStyle(effect.element, {opacity: oldOpacity});
-        }}
-      })
-    }
-  });
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: Element.getStyle(element, 'top'),
-    left: Element.getStyle(element, 'left'),
-    opacity: Element.getInlineOpacity(element) };
-  return new Effect.Parallel(
-    [ new Effect.MoveBy(element, 100, 0, { sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) { with(Element) {
-          makePositioned(effect.effects[0].element); }},
-        afterFinishInternal: function(effect) { with(Element) {
-          [hide, undoPositioned].call(effect.effects[0].element);
-          setStyle(effect.effects[0].element, oldStyle); }} 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: Element.getStyle(element, 'top'),
-    left: Element.getStyle(element, 'left') };
-  return new Effect.MoveBy(element, 0, 20, 
-    { duration: 0.05, afterFinishInternal: function(effect) {
-  new Effect.MoveBy(effect.element, 0, -40, 
-    { duration: 0.1, afterFinishInternal: function(effect) {
-  new Effect.MoveBy(effect.element, 0, 40, 
-    { duration: 0.1, afterFinishInternal: function(effect) {
-  new Effect.MoveBy(effect.element, 0, -40, 
-    { duration: 0.1, afterFinishInternal: function(effect) {
-  new Effect.MoveBy(effect.element, 0, 40, 
-    { duration: 0.1, afterFinishInternal: function(effect) {
-  new Effect.MoveBy(effect.element, 0, -20, 
-    { duration: 0.05, afterFinishInternal: function(effect) { with(Element) {
-        undoPositioned(effect.element);
-        setStyle(effect.element, oldStyle);
-  }}}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element);
-  Element.cleanWhitespace(element);
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
-  var elementDimensions = Element.getDimensions(element);
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) { with(Element) {
-      makePositioned(effect.element);
-      makePositioned(effect.element.firstChild);
-      if(window.opera) setStyle(effect.element, {top: ''});
-      makeClipping(effect.element);
-      setStyle(effect.element, {height: '0px'});
-      show(element); }},
-    afterUpdateInternal: function(effect) { with(Element) {
-      setStyle(effect.element.firstChild, {bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); }},
-    afterFinishInternal: function(effect) { with(Element) {
-      undoClipping(effect.element); 
-      undoPositioned(effect.element.firstChild);
-      undoPositioned(effect.element);
-      setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}
-    }, arguments[1] || {})
-  );
-}
-  
-Effect.SlideUp = function(element) {
-  element = $(element);
-  Element.cleanWhitespace(element);
-  var oldInnerBottom = Element.getStyle(element.firstChild, 'bottom');
-  return new Effect.Scale(element, 0, 
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) { with(Element) {
-      makePositioned(effect.element);
-      makePositioned(effect.element.firstChild);
-      if(window.opera) setStyle(effect.element, {top: ''});
-      makeClipping(effect.element);
-      show(element); }},  
-    afterUpdateInternal: function(effect) { with(Element) {
-      setStyle(effect.element.firstChild, {bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); }},
-    afterFinishInternal: function(effect) { with(Element) {
-        [hide, undoClipping].call(effect.element); 
-        undoPositioned(effect.element.firstChild);
-        undoPositioned(effect.element);
-        setStyle(effect.element.firstChild, {bottom: oldInnerBottom}); }}
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, 
-    { restoreAfterFinish: true,
-      beforeSetup: function(effect) { with(Element) {
-        makeClipping(effect.element); }},  
-      afterFinishInternal: function(effect) { with(Element) {
-        hide(effect.element); 
-        undoClipping(effect.element); }}
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransistion: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: Element.getInlineOpacity(element) };
-
-  var dims = Element.getDimensions(element);    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.MoveBy(element, initialMoveY, initialMoveX, { 
-    duration: 0.01, 
-    beforeSetup: function(effect) { with(Element) {
-      hide(effect.element);
-      makeClipping(effect.element);
-      makePositioned(effect.element);
-    }},
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.MoveBy(effect.element, moveY, moveX, { sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) { with(Element) {
-               setStyle(effect.effects[0].element, {height: '0px'});
-               show(effect.effects[0].element); }},
-             afterFinishInternal: function(effect) { with(Element) {
-               [undoClipping, undoPositioned].call(effect.effects[0].element); 
-               setStyle(effect.effects[0].element, oldStyle); }}
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransistion: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: Element.getInlineOpacity(element) };
-
-  var dims = Element.getDimensions(element);
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.MoveBy(element, moveY, moveX, { sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) { with(Element) {
-           [makePositioned, makeClipping].call(effect.effects[0].element) }},
-         afterFinishInternal: function(effect) { with(Element) {
-           [hide, undoClipping, undoPositioned].call(effect.effects[0].element);
-           setStyle(effect.effects[0].element, oldStyle); }}
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = Element.getInlineOpacity(element);
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 3.0, from: 0,
-      afterFinishInternal: function(effect) { Element.setStyle(effect.element, {opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  Element.makeClipping(element);
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) { with(Element) {
-        [hide, undoClipping].call(effect.element); 
-        setStyle(effect.element, oldStyle);
-      }} });
-  }}, arguments[1] || {}));
-}
diff --git a/groovy/modules/grails/src/war/js/prototype.js b/groovy/modules/grails/src/war/js/prototype.js
deleted file mode 100644
index e9ccd3c..0000000
--- a/groovy/modules/grails/src/war/js/prototype.js
+++ /dev/null
@@ -1,1785 +0,0 @@
-/*  Prototype JavaScript framework, version 1.4.0
- *  (c) 2005 Sam Stephenson <sam@conio.net>
- *
- *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
- *  against the source tree, available from the Prototype darcs repository.
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.4.0',
-  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
-
-  emptyFunction: function() {},
-  K: function(x) {return x}
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.inspect = function(object) {
-  try {
-    if (object == undefined) return 'undefined';
-    if (object == null) return 'null';
-    return object.inspect ? object.inspect() : object.toString();
-  } catch (e) {
-    if (e instanceof RangeError) return '...';
-    throw e;
-  }
-}
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this;
-  return function(event) {
-    return __method.call(object, event || window.event);
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    var digits = this.toString(16);
-    if (this < 16) return '0' + digits;
-    return digits;
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  }
-});
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0; i < arguments.length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback();
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-function $() {
-  var elements = new Array();
-
-  for (var i = 0; i < arguments.length; i++) {
-    var element = arguments[i];
-    if (typeof element == 'string')
-      element = document.getElementById(element);
-
-    if (arguments.length == 1)
-      return element;
-
-    elements.push(element);
-  }
-
-  return elements;
-}
-Object.extend(String.prototype, {
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(eval);
-  },
-
-  escapeHTML: function() {
-    var div = document.createElement('div');
-    var text = document.createTextNode(this);
-    div.appendChild(text);
-    return div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
-  },
-
-  toQueryParams: function() {
-    var pairs = this.match(/^\??(.*)$/)[1].split('&');
-    return pairs.inject({}, function(params, pairString) {
-      var pair = pairString.split('=');
-      params[pair[0]] = pair[1];
-      return params;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  camelize: function() {
-    var oStringList = this.split('-');
-    if (oStringList.length == 1) return oStringList[0];
-
-    var camelizedString = this.indexOf('-') == 0
-      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
-      : oStringList[0];
-
-    for (var i = 1, len = oStringList.length; i < len; i++) {
-      var s = oStringList[i];
-      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
-    }
-
-    return camelizedString;
-  },
-
-  inspect: function() {
-    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
-  }
-});
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-var $break    = new Object();
-var $continue = new Object();
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        try {
-          iterator(value, index++);
-        } catch (e) {
-          if (e != $continue) throw e;
-        }
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(iterator(value, index));
-    });
-    return results;
-  },
-
-  detect: function (iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.collect(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (value >= (result || value))
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (value <= (result || value))
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.collect(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.collect(Prototype.K);
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      iterator(value = collections.pluck(index));
-      return value;
-    });
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0; i < iterable.length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0; i < this.length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != undefined || value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0; i < this.length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  shift: function() {
-    var result = this[0];
-    for (var i = 0; i < this.length - 1; i++)
-      this[i] = this[i + 1];
-    this.length--;
-    return result;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  }
-});
-var Hash = {
-  _each: function(iterator) {
-    for (key in this) {
-      var value = this[key];
-      if (typeof value == 'function') continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject($H(this), function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  toQueryString: function() {
-    return this.map(function(pair) {
-      return pair.map(encodeURIComponent).join('=');
-    }).join('&');
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  }
-}
-
-function $H(object) {
-  var hash = Object.extend({}, object || {});
-  Object.extend(hash, Enumerable);
-  Object.extend(hash, Hash);
-  return hash;
-}
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    do {
-      iterator(value);
-      value = value.succ();
-    } while (this.include(value));
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
-      function() {return new XMLHttpRequest()}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responderToAdd) {
-    if (!this.include(responderToAdd))
-      this.responders.push(responderToAdd);
-  },
-
-  unregister: function(responderToRemove) {
-    this.responders = this.responders.without(responderToRemove);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (responder[callback] && typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-  },
-
-  responseIsSuccess: function() {
-    return this.transport.status == undefined
-        || this.transport.status == 0
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  responseIsFailure: function() {
-    return !this.responseIsSuccess();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    var parameters = this.options.parameters || '';
-    if (parameters.length > 0) parameters += '&_=';
-
-    try {
-      this.url = url;
-      if (this.options.method == 'get' && parameters.length > 0)
-        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
-
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.options.method, this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous) {
-        this.transport.onreadystatechange = this.onStateChange.bind(this);
-        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
-      }
-
-      this.setRequestHeaders();
-
-      var body = this.options.postBody ? this.options.postBody : parameters;
-      this.transport.send(this.options.method == 'post' ? body : null);
-
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  setRequestHeaders: function() {
-    var requestHeaders =
-      ['X-Requested-With', 'XMLHttpRequest',
-       'X-Prototype-Version', Prototype.Version];
-
-    if (this.options.method == 'post') {
-      requestHeaders.push('Content-type',
-        'application/x-www-form-urlencoded');
-
-      /* Force "Connection: close" for Mozilla browsers to work around
-       * a bug where XMLHttpReqeuest sends an incorrect Content-length
-       * header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType)
-        requestHeaders.push('Connection', 'close');
-    }
-
-    if (this.options.requestHeaders)
-      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
-
-    for (var i = 0; i < requestHeaders.length; i += 2)
-      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState != 1)
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  header: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) {}
-  },
-
-  evalJSON: function() {
-    try {
-      return eval(this.header('X-JSON'));
-    } catch (e) {}
-  },
-
-  evalResponse: function() {
-    try {
-      return eval(this.transport.responseText);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  respondToReadyState: function(readyState) {
-    var event = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (event == 'Complete') {
-      try {
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
-        this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + event, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
-    if (event == 'Complete')
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.containers = {
-      success: container.success ? $(container.success) : $(container),
-      failure: container.failure ? $(container.failure) :
-        (container.success ? null : $(container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, object) {
-      this.updateContent();
-      onComplete(transport, object);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.responseIsSuccess() ?
-      this.containers.success : this.containers.failure;
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts)
-      response = response.stripScripts();
-
-    if (receiver) {
-      if (this.options.insertion) {
-        new this.options.insertion(receiver, response);
-      } else {
-        Element.update(receiver, response);
-      }
-    }
-
-    if (this.responseIsSuccess()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-document.getElementsByClassName = function(className, parentElement) {
-  var children = ($(parentElement) || document.body).getElementsByTagName('*');
-  return $A(children).inject([], function(elements, child) {
-    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      elements.push(child);
-    return elements;
-  });
-}
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element) {
-  var Element = new Object();
-}
-
-Object.extend(Element, {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function() {
-    for (var i = 0; i < arguments.length; i++) {
-      var element = $(arguments[i]);
-      Element[Element.visible(element) ? 'hide' : 'show'](element);
-    }
-  },
-
-  hide: function() {
-    for (var i = 0; i < arguments.length; i++) {
-      var element = $(arguments[i]);
-      element.style.display = 'none';
-    }
-  },
-
-  show: function() {
-    for (var i = 0; i < arguments.length; i++) {
-      var element = $(arguments[i]);
-      element.style.display = '';
-    }
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-  },
-
-  update: function(element, html) {
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-  },
-
-  getHeight: function(element) {
-    element = $(element);
-    return element.offsetHeight;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return Element.classNames(element).include(className);
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return Element.classNames(element).add(className);
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    return Element.classNames(element).remove(className);
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    for (var i = 0; i < element.childNodes.length; i++) {
-      var node = element.childNodes[i];
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        Element.remove(node);
-    }
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.match(/^\s*$/);
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var x = element.x ? element.x : element.offsetLeft,
-        y = element.y ? element.y : element.offsetTop;
-    window.scrollTo(x, y);
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    var value = element.style[style.camelize()];
-    if (!value) {
-      if (document.defaultView && document.defaultView.getComputedStyle) {
-        var css = document.defaultView.getComputedStyle(element, null);
-        value = css ? css.getPropertyValue(style) : null;
-      } else if (element.currentStyle) {
-        value = element.currentStyle[style.camelize()];
-      }
-    }
-
-    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
-      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
-
-    return value == 'auto' ? null : value;
-  },
-
-  setStyle: function(element, style) {
-    element = $(element);
-    for (name in style)
-      element.style[name.camelize()] = style[name];
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    if (Element.getStyle(element, 'display') != 'none')
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = '';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = 'none';
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return;
-    element._overflow = element.style.overflow;
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return;
-    element.style.overflow = element._overflow;
-    element._overflow = undefined;
-  }
-});
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        if (this.element.tagName.toLowerCase() == 'tbody') {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set(this.toArray().concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set(this.select(function(className) {
-      return className != classNameToRemove;
-    }).join(' '));
-  },
-
-  toString: function() {
-    return this.toArray().join(' ');
-  }
-}
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Field = {
-  clear: function() {
-    for (var i = 0; i < arguments.length; i++)
-      $(arguments[i]).value = '';
-  },
-
-  focus: function(element) {
-    $(element).focus();
-  },
-
-  present: function() {
-    for (var i = 0; i < arguments.length; i++)
-      if ($(arguments[i]).value == '') return false;
-    return true;
-  },
-
-  select: function(element) {
-    $(element).select();
-  },
-
-  activate: function(element) {
-    element = $(element);
-    element.focus();
-    if (element.select)
-      element.select();
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Form = {
-  serialize: function(form) {
-    var elements = Form.getElements($(form));
-    var queryComponents = new Array();
-
-    for (var i = 0; i < elements.length; i++) {
-      var queryComponent = Form.Element.serialize(elements[i]);
-      if (queryComponent)
-        queryComponents.push(queryComponent);
-    }
-
-    return queryComponents.join('&');
-  },
-
-  getElements: function(form) {
-    form = $(form);
-    var elements = new Array();
-
-    for (tagName in Form.Element.Serializers) {
-      var tagElements = form.getElementsByTagName(tagName);
-      for (var j = 0; j < tagElements.length; j++)
-        elements.push(tagElements[j]);
-    }
-    return elements;
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name)
-      return inputs;
-
-    var matchingInputs = new Array();
-    for (var i = 0; i < inputs.length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) ||
-          (name && input.name != name))
-        continue;
-      matchingInputs.push(input);
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    var elements = Form.getElements(form);
-    for (var i = 0; i < elements.length; i++) {
-      var element = elements[i];
-      element.blur();
-      element.disabled = 'true';
-    }
-  },
-
-  enable: function(form) {
-    var elements = Form.getElements(form);
-    for (var i = 0; i < elements.length; i++) {
-      var element = elements[i];
-      element.disabled = '';
-    }
-  },
-
-  findFirstElement: function(form) {
-    return Form.getElements(form).find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    Field.activate(Form.findFirstElement(form));
-  },
-
-  reset: function(form) {
-    $(form).reset();
-  }
-}
-
-Form.Element = {
-  serialize: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    var parameter = Form.Element.Serializers[method](element);
-
-    if (parameter) {
-      var key = encodeURIComponent(parameter[0]);
-      if (key.length == 0) return;
-
-      if (parameter[1].constructor != Array)
-        parameter[1] = [parameter[1]];
-
-      return parameter[1].map(function(value) {
-        return key + '=' + encodeURIComponent(value);
-      }).join('&');
-    }
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    var parameter = Form.Element.Serializers[method](element);
-
-    if (parameter)
-      return parameter[1];
-  }
-}
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'submit':
-      case 'hidden':
-      case 'password':
-      case 'text':
-        return Form.Element.Serializers.textarea(element);
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-    }
-    return false;
-  },
-
-  inputSelector: function(element) {
-    if (element.checked)
-      return [element.name, element.value];
-  },
-
-  textarea: function(element) {
-    return [element.name, element.value];
-  },
-
-  select: function(element) {
-    return Form.Element.Serializers[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var value = '', opt, index = element.selectedIndex;
-    if (index >= 0) {
-      opt = element.options[index];
-      value = opt.value;
-      if (!value && !('value' in opt))
-        value = opt.text;
-    }
-    return [element.name, value];
-  },
-
-  selectMany: function(element) {
-    var value = new Array();
-    for (var i = 0; i < element.length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) {
-        var optValue = opt.value;
-        if (!optValue && !('value' in opt))
-          optValue = opt.text;
-        value.push(optValue);
-      }
-    }
-    return [element.name, value];
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    var elements = Form.getElements(this.element);
-    for (var i = 0; i < elements.length; i++)
-      this.registerCallback(elements[i]);
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        case 'password':
-        case 'text':
-        case 'textarea':
-        case 'select-one':
-        case 'select-multiple':
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-
-  element: function(event) {
-    return event.target || event.srcElement;
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0; i < Event.observers.length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    var element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.attachEvent))
-      name = 'keydown';
-
-    this._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    var element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.detachEvent))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      element.detachEvent('on' + name, observer);
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  clone: function(source, target) {
-    source = $(source);
-    target = $(target);
-    target.style.position = 'absolute';
-    var offsets = this.cumulativeOffset(source);
-    target.style.top    = offsets[1] + 'px';
-    target.style.left   = offsets[0] + 'px';
-    target.style.width  = source.offsetWidth + 'px';
-    target.style.height = source.offsetHeight + 'px';
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent==document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      valueT -= element.scrollTop  || 0;
-      valueL -= element.scrollLeft || 0;
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';;
-    element.style.left   = left + 'px';;
-    element.style.width  = width + 'px';;
-    element.style.height = height + 'px';;
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/rico.js b/groovy/modules/grails/src/war/js/rico.js
deleted file mode 100644
index f0b6fb5..0000000
--- a/groovy/modules/grails/src/war/js/rico.js
+++ /dev/null
@@ -1,2691 +0,0 @@
-/**
-  *
-  *  Copyright 2005 Sabre Airline Solutions
-  *
-  *  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.
-  **/
-
-
-//-------------------- rico.js
-var Rico = {
-  Version: '1.1-beta2'
-}
-
-Rico.ArrayExtensions = new Array();
-
-if (Object.prototype.extend) {
-   // in prototype.js...
-   Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Object.prototype.extend;
-}
-
-if (Array.prototype.push) {
-   // in prototype.js...
-   Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.push;
-}
-
-if (!Array.prototype.remove) {
-   Array.prototype.remove = function(dx) {
-      if( isNaN(dx) || dx > this.length )
-         return false;
-      for( var i=0,n=0; i<this.length; i++ )
-         if( i != dx )
-            this[n++]=this[i];
-      this.length-=1;
-   };
-  Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.remove;
-}
-
-if (!Array.prototype.removeItem) {
-   Array.prototype.removeItem = function(item) {
-      for ( var i = 0 ; i < this.length ; i++ )
-         if ( this[i] == item ) {
-            this.remove(i);
-            break;
-         }
-   };
-  Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.removeItem;
-}
-
-if (!Array.prototype.indices) {
-   Array.prototype.indices = function() {
-      var indexArray = new Array();
-      for ( index in this ) {
-         var ignoreThis = false;
-         for ( var i = 0 ; i < Rico.ArrayExtensions.length ; i++ ) {
-            if ( this[index] == Rico.ArrayExtensions[i] ) {
-               ignoreThis = true;
-               break;
-            }
-         }
-         if ( !ignoreThis )
-            indexArray[ indexArray.length ] = index;
-      }
-      return indexArray;
-   }
-  Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.indices;
-}
-
-// Create the loadXML method and xml getter for Mozilla
-if ( window.DOMParser &&
-	  window.XMLSerializer &&
-	  window.Node && Node.prototype && Node.prototype.__defineGetter__ ) {
-
-   if (!Document.prototype.loadXML) {
-      Document.prototype.loadXML = function (s) {
-         var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
-         while (this.hasChildNodes())
-            this.removeChild(this.lastChild);
-
-         for (var i = 0; i < doc2.childNodes.length; i++) {
-            this.appendChild(this.importNode(doc2.childNodes[i], true));
-         }
-      };
-	}
-
-	Document.prototype.__defineGetter__( "xml",
-	   function () {
-		   return (new XMLSerializer()).serializeToString(this);
-	   }
-	 );
-}
-
-document.getElementsByTagAndClassName = function(tagName, className) {
-  if ( tagName == null )
-     tagName = '*';
-
-  var children = document.getElementsByTagName(tagName) || document.all;
-  var elements = new Array();
-
-  if ( className == null )
-    return children;
-
-  for (var i = 0; i < children.length; i++) {
-    var child = children[i];
-    var classNames = child.className.split(' ');
-    for (var j = 0; j < classNames.length; j++) {
-      if (classNames[j] == className) {
-        elements.push(child);
-        break;
-      }
-    }
-  }
-
-  return elements;
-}
-
-
-//-------------------- ricoAccordion.js
-
-Rico.Accordion = Class.create();
-
-Rico.Accordion.prototype = {
-
-   initialize: function(container, options) {
-      this.container            = $(container);
-      this.lastExpandedTab      = null;
-      this.accordionTabs        = new Array();
-      this.setOptions(options);
-      this._attachBehaviors();
-
-      this.container.style.borderBottom = '1px solid ' + this.options.borderColor;
-
-      // set the initial visual state...
-      for ( var i=1 ; i < this.accordionTabs.length ; i++ )
-      {
-         this.accordionTabs[i].collapse();
-         this.accordionTabs[i].content.style.display = 'none';
-      }
-      this.lastExpandedTab = this.accordionTabs[0];
-      this.lastExpandedTab.content.style.height = this.options.panelHeight + "px";
-      this.lastExpandedTab.showExpanded();
-      this.lastExpandedTab.titleBar.style.fontWeight = this.options.expandedFontWeight;
-   },
-
-   setOptions: function(options) {
-      this.options = {
-         expandedBg          : '#63699c',
-         hoverBg             : '#63699c',
-         collapsedBg         : '#6b79a5',
-         expandedTextColor   : '#ffffff',
-         expandedFontWeight  : 'bold',
-         hoverTextColor      : '#ffffff',
-         collapsedTextColor  : '#ced7ef',
-         collapsedFontWeight : 'normal',
-         hoverTextColor      : '#ffffff',
-         borderColor         : '#1f669b',
-         panelHeight         : 200,
-         onHideTab           : null,
-         onShowTab           : null
-      }.extend(options || {});
-   },
-
-   showTabByIndex: function( anIndex, animate ) {
-      var doAnimate = arguments.length == 1 ? true : animate;
-      this.showTab( this.accordionTabs[anIndex], doAnimate );
-   },
-
-   showTab: function( accordionTab, animate ) {
-
-      var doAnimate = arguments.length == 1 ? true : animate;
-
-      if ( this.options.onHideTab )
-         this.options.onHideTab(this.lastExpandedTab);
-
-      this.lastExpandedTab.showCollapsed(); 
-      var accordion = this;
-      var lastExpandedTab = this.lastExpandedTab;
-
-      this.lastExpandedTab.content.style.height = (this.options.panelHeight - 1) + 'px';
-      accordionTab.content.style.display = '';
-
-      accordionTab.titleBar.style.fontWeight = this.options.expandedFontWeight;
-
-      if ( doAnimate ) {
-         new Effect.AccordionSize( this.lastExpandedTab.content,
-                                   accordionTab.content,
-                                   1,
-                                   this.options.panelHeight,
-                                   100, 10,
-                                   { complete: function() {accordion.showTabDone(lastExpandedTab)} } );
-         this.lastExpandedTab = accordionTab;
-      }
-      else {
-         this.lastExpandedTab.content.style.height = "1px";
-         accordionTab.content.style.height = this.options.panelHeight + "px";
-         this.lastExpandedTab = accordionTab;
-         this.showTabDone(lastExpandedTab);
-      }
-   },
-
-   showTabDone: function(collapsedTab) {
-      collapsedTab.content.style.display = 'none';
-      this.lastExpandedTab.showExpanded();
-      if ( this.options.onShowTab )
-         this.options.onShowTab(this.lastExpandedTab);
-   },
-
-   _attachBehaviors: function() {
-      var panels = this._getDirectChildrenByTag(this.container, 'DIV');
-      for ( var i = 0 ; i < panels.length ; i++ ) {
-
-         var tabChildren = this._getDirectChildrenByTag(panels[i],'DIV');
-         if ( tabChildren.length != 2 )
-            continue; // unexpected
-
-         var tabTitleBar   = tabChildren[0];
-         var tabContentBox = tabChildren[1];
-         this.accordionTabs.push( new Rico.Accordion.Tab(this,tabTitleBar,tabContentBox) );
-      }
-   },
-
-   _getDirectChildrenByTag: function(e, tagName) {
-      var kids = new Array();
-      var allKids = e.childNodes;
-      for( var i = 0 ; i < allKids.length ; i++ )
-         if ( allKids[i] && allKids[i].tagName && allKids[i].tagName == tagName )
-            kids.push(allKids[i]);
-      return kids;
-   }
-
-};
-
-Rico.Accordion.Tab = Class.create();
-
-Rico.Accordion.Tab.prototype = {
-
-   initialize: function(accordion, titleBar, content) {
-      this.accordion = accordion;
-      this.titleBar  = titleBar;
-      this.content   = content;
-      this._attachBehaviors();
-   },
-
-   collapse: function() {
-      this.showCollapsed();
-      this.content.style.height = "1px";
-   },
-
-   showCollapsed: function() {
-      this.expanded = false;
-      this.titleBar.style.backgroundColor = this.accordion.options.collapsedBg;
-      this.titleBar.style.color           = this.accordion.options.collapsedTextColor;
-      this.titleBar.style.fontWeight      = this.accordion.options.collapsedFontWeight;
-      this.content.style.overflow = "hidden";
-   },
-
-   showExpanded: function() {
-      this.expanded = true;
-      this.titleBar.style.backgroundColor = this.accordion.options.expandedBg;
-      this.titleBar.style.color           = this.accordion.options.expandedTextColor;
-      this.content.style.overflow         = "visible";
-   },
-
-   titleBarClicked: function(e) {
-      if ( this.accordion.lastExpandedTab == this )
-         return;
-      this.accordion.showTab(this);
-   },
-
-   hover: function(e) {
-		this.titleBar.style.backgroundColor = this.accordion.options.hoverBg;
-		this.titleBar.style.color           = this.accordion.options.hoverTextColor;
-   },
-
-   unhover: function(e) {
-      if ( this.expanded ) {
-         this.titleBar.style.backgroundColor = this.accordion.options.expandedBg;
-         this.titleBar.style.color           = this.accordion.options.expandedTextColor;
-      }
-      else {
-         this.titleBar.style.backgroundColor = this.accordion.options.collapsedBg;
-         this.titleBar.style.color           = this.accordion.options.collapsedTextColor;
-      }
-   },
-
-   _attachBehaviors: function() {
-      this.content.style.border = "1px solid " + this.accordion.options.borderColor;
-      this.content.style.borderTopWidth    = "0px";
-      this.content.style.borderBottomWidth = "0px";
-      this.content.style.margin            = "0px";
-
-      this.titleBar.onclick     = this.titleBarClicked.bindAsEventListener(this);
-      this.titleBar.onmouseover = this.hover.bindAsEventListener(this);
-      this.titleBar.onmouseout  = this.unhover.bindAsEventListener(this);
-   }
-
-};
-
-
-//-------------------- ricoAjaxEngine.js
-
-Rico.AjaxEngine = Class.create();
-
-Rico.AjaxEngine.prototype = {
-
-   initialize: function() {
-      this.ajaxElements = new Array();
-      this.ajaxObjects  = new Array();
-      this.requestURLS  = new Array();
-   },
-
-   registerAjaxElement: function( anId, anElement ) {
-      if ( arguments.length == 1 )
-         anElement = $(anId);
-      this.ajaxElements[anId] = anElement;
-   },
-
-   registerAjaxObject: function( anId, anObject ) {
-      this.ajaxObjects[anId] = anObject;
-   },
-
-   registerRequest: function (requestLogicalName, requestURL) {
-      this.requestURLS[requestLogicalName] = requestURL;
-   },
-
-   sendRequest: function(requestName) {
-      var requestURL = this.requestURLS[requestName];
-      if ( requestURL == null )
-         return;
-
-      var queryString = "";
-      
-      if ( arguments.length > 1 ) {
-      	 if(typeof(arguments[1]) == "object" && arguments[1].length != undefined) {
-	      	 queryString = this._createQueryString(arguments[1], 0);
-      	 }
-      	 else {
-	         queryString = this._createQueryString(arguments, 1);
-	     }         
-       }
-             
-      new Ajax.Request(requestURL, this._requestOptions(queryString));
-   },
-
-   sendRequestWithData: function(requestName, xmlDocument) {
-      var requestURL = this.requestURLS[requestName];
-      if ( requestURL == null )
-         return;
-
-      var queryString = "";
-      if ( arguments.length > 2 ) {
-      	 if(typeof(arguments[2]) == "object" && arguments[2].length != undefined) {
-	      	 queryString = this._createQueryString(arguments[2], 0);
-      	 }
-      	 else {
-	         queryString = this._createQueryString(arguments, 2);
-	     }         
-       }             
-
-      new Ajax.Request(requestURL + "?" + queryString, this._requestOptions(null,xmlDocument));
-   },
-
-   sendRequestAndUpdate: function(requestName,container,options) {
-      var requestURL = this.requestURLS[requestName];
-      if ( requestURL == null )
-         return;
-
-      var queryString = "";
-      if ( arguments.length > 3 ) {
-      	 if(typeof(arguments[3]) == "object" && arguments[3].length != undefined) {
-	      	 queryString = this._createQueryString(arguments[3], 0);
-      	 }
-      	 else {
-	         queryString = this._createQueryString(arguments, 3);
-	     }         
-       }  
-             
-      var updaterOptions = this._requestOptions(queryString);
-      updaterOptions.onComplete = null;
-      updaterOptions.extend(options);
-
-      new Ajax.Updater(container, requestURL, updaterOptions);
-   },
-
-   sendRequestWithDataAndUpdate: function(requestName,xmlDocument,container,options) {
-      var requestURL = this.requestURLS[requestName];
-      if ( requestURL == null )
-         return;
-
-      var queryString = "";
-      if ( arguments.length > 4 ) {
-      	 if(typeof(arguments[4]) == "object" && arguments[4].length != undefined) {
-	      	 queryString = this._createQueryString(arguments[4], 0);
-      	 }
-      	 else {
-	         queryString = this._createQueryString(arguments, 4);
-	     }         
-       }
-
-
-      var updaterOptions = this._requestOptions(queryString,xmlDocument);
-      updaterOptions.onComplete = null;
-      updaterOptions.extend(options);
-
-      new Ajax.Updater(container, requestURL + "?" + queryString, updaterOptions);
-   },
-
-   // Private -- not part of intended engine API --------------------------------------------------------------------
-
-   _requestOptions: function(queryString,xmlDoc) {
-      var self = this;
-
-      var requestHeaders = ['X-Rico-Version', Rico.Version ];
-      var sendMethod = "post"
-      if ( arguments[1] )
-         requestHeaders.push( 'Content-type', 'text/xml' );
-      else
-         sendMethod = "get";
-
-      return { requestHeaders: requestHeaders,
-               parameters:     queryString,
-               postBody:       arguments[1] ? xmlDoc : null,
-               method:         sendMethod,
-               onComplete:     self._onRequestComplete.bind(self) };
-   },
-
-   _createQueryString: function( theArgs, offset ) {
-   	  var self = this;
-      var queryString = ""
-      for ( var i = offset ; i < theArgs.length ; i++ ) {
-          if ( i != offset )
-            queryString += "&";
-
-          var anArg = theArgs[i];
-                  
-          if ( anArg.name != undefined && anArg.value != undefined ) {
-            queryString += anArg.name +  "=" + escape(anArg.value);
-          }
-          else {
-             var ePos  = anArg.indexOf('=');
-             var argName  = anArg.substring( 0, ePos );
-             var argValue = anArg.substring( ePos + 1 );
-             queryString += argName + "=" + escape(argValue);
-          }
-      }
-
-      return queryString;
-   },
-   _onRequestComplete : function(request) {
-
-      //!!TODO: error handling infrastructure?? 
-      if (request.status != 200)
-        return;
-
-      var response = request.responseXML.getElementsByTagName("ajax-response");
-      if (response == null || response.length != 1)
-         return;
-      this._processAjaxResponse( response[0].childNodes );
-   },
-
-   _processAjaxResponse: function( xmlResponseElements ) {
-      for ( var i = 0 ; i < xmlResponseElements.length ; i++ ) {
-         var responseElement = xmlResponseElements[i];
-
-         // only process nodes of type element.....
-         if ( responseElement.nodeType != 1 )
-            continue;
-
-         var responseType = responseElement.getAttribute("type");
-         var responseId   = responseElement.getAttribute("id");
-
-         if ( responseType == "object" )
-            this._processAjaxObjectUpdate( this.ajaxObjects[ responseId ], responseElement );
-         else if ( responseType == "element" )
-            this._processAjaxElementUpdate( this.ajaxElements[ responseId ], responseElement );
-         else
-            alert('unrecognized AjaxResponse type : ' + responseType );
-      }
-   },
-
-   _processAjaxObjectUpdate: function( ajaxObject, responseElement ) {
-      ajaxObject.ajaxUpdate( responseElement );
-   },
-
-   _processAjaxElementUpdate: function( ajaxElement, responseElement ) {
-      ajaxElement.innerHTML = RicoUtil.getContentAsString(responseElement);
-   }
-
-}
-
-var ajaxEngine = new Rico.AjaxEngine();
-
-
-//-------------------- ricoColor.js
-Rico.Color = Class.create();
-
-Rico.Color.prototype = {
-
-   initialize: function(red, green, blue) {
-      this.rgb = { r: red, g : green, b : blue };
-   },
-
-   setRed: function(r) {
-      this.rgb.r = r;
-   },
-
-   setGreen: function(g) {
-      this.rgb.g = g;
-   },
-
-   setBlue: function(b) {
-      this.rgb.b = b;
-   },
-
-   setHue: function(h) {
-
-      // get an HSB model, and set the new hue...
-      var hsb = this.asHSB();
-      hsb.h = h;
-
-      // convert back to RGB...
-      this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b);
-   },
-
-   setSaturation: function(s) {
-      // get an HSB model, and set the new hue...
-      var hsb = this.asHSB();
-      hsb.s = s;
-
-      // convert back to RGB and set values...
-      this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b);
-   },
-
-   setBrightness: function(b) {
-      // get an HSB model, and set the new hue...
-      var hsb = this.asHSB();
-      hsb.b = b;
-
-      // convert back to RGB and set values...
-      this.rgb = Rico.Color.HSBtoRGB( hsb.h, hsb.s, hsb.b );
-   },
-
-   darken: function(percent) {
-      var hsb  = this.asHSB();
-      this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.max(hsb.b - percent,0));
-   },
-
-   brighten: function(percent) {
-      var hsb  = this.asHSB();
-      this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.min(hsb.b + percent,1));
-   },
-
-   blend: function(other) {
-      this.rgb.r = Math.floor((this.rgb.r + other.rgb.r)/2);
-      this.rgb.g = Math.floor((this.rgb.g + other.rgb.g)/2);
-      this.rgb.b = Math.floor((this.rgb.b + other.rgb.b)/2);
-   },
-
-   isBright: function() {
-      var hsb = this.asHSB();
-      return this.asHSB().b > 0.5;
-   },
-
-   isDark: function() {
-      return ! this.isBright();
-   },
-
-   asRGB: function() {
-      return "rgb(" + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")";
-   },
-
-   asHex: function() {
-      return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart();
-   },
-
-   asHSB: function() {
-      return Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b);
-   },
-
-   toString: function() {
-      return this.asHex();
-   }
-
-};
-
-Rico.Color.createFromHex = function(hexCode) {
-
-   if ( hexCode.indexOf('#') == 0 )
-      hexCode = hexCode.substring(1);
-   var red   = hexCode.substring(0,2);
-   var green = hexCode.substring(2,4);
-   var blue  = hexCode.substring(4,6);
-   return new Rico.Color( parseInt(red,16), parseInt(green,16), parseInt(blue,16) );
-}
-
-/**
- * Factory method for creating a color from the background of
- * an HTML element.
- */
-Rico.Color.createColorFromBackground = function(elem) {
-
-   var actualColor = RicoUtil.getElementsComputedStyle($(elem), "backgroundColor", "background-color");
-
-   if ( actualColor == "transparent" && elem.parent )
-      return Rico.Color.createColorFromBackground(elem.parent);
-
-   if ( actualColor == null )
-      return new Rico.Color(255,255,255);
-
-   if ( actualColor.indexOf("rgb(") == 0 ) {
-      var colors = actualColor.substring(4, actualColor.length - 1 );
-      var colorArray = colors.split(",");
-      return new Rico.Color( parseInt( colorArray[0] ),
-                            parseInt( colorArray[1] ),
-                            parseInt( colorArray[2] )  );
-
-   }
-   else if ( actualColor.indexOf("#") == 0 ) {
-      var redPart   = parseInt(actualColor.substring(1,3), 16);
-      var greenPart = parseInt(actualColor.substring(3,5), 16);
-      var bluePart  = parseInt(actualColor.substring(5), 16);
-      return new Rico.Color( redPart, greenPart, bluePart );
-   }
-   else
-      return new Rico.Color(255,255,255);
-}
-
-Rico.Color.HSBtoRGB = function(hue, saturation, brightness) {
-
-   var red   = 0;
-	var green = 0;
-	var blue  = 0;
-
-   if (saturation == 0) {
-      red = parseInt(brightness * 255.0 + 0.5);
-	   green = red;
-	   blue = red;
-	}
-	else {
-      var h = (hue - Math.floor(hue)) * 6.0;
-      var f = h - Math.floor(h);
-      var p = brightness * (1.0 - saturation);
-      var q = brightness * (1.0 - saturation * f);
-      var t = brightness * (1.0 - (saturation * (1.0 - f)));
-
-      switch (parseInt(h)) {
-         case 0:
-            red   = (brightness * 255.0 + 0.5);
-            green = (t * 255.0 + 0.5);
-            blue  = (p * 255.0 + 0.5);
-            break;
-         case 1:
-            red   = (q * 255.0 + 0.5);
-            green = (brightness * 255.0 + 0.5);
-            blue  = (p * 255.0 + 0.5);
-            break;
-         case 2:
-            red   = (p * 255.0 + 0.5);
-            green = (brightness * 255.0 + 0.5);
-            blue  = (t * 255.0 + 0.5);
-            break;
-         case 3:
-            red   = (p * 255.0 + 0.5);
-            green = (q * 255.0 + 0.5);
-            blue  = (brightness * 255.0 + 0.5);
-            break;
-         case 4:
-            red   = (t * 255.0 + 0.5);
-            green = (p * 255.0 + 0.5);
-            blue  = (brightness * 255.0 + 0.5);
-            break;
-          case 5:
-            red   = (brightness * 255.0 + 0.5);
-            green = (p * 255.0 + 0.5);
-            blue  = (q * 255.0 + 0.5);
-            break;
-	    }
-	}
-
-   return { r : parseInt(red), g : parseInt(green) , b : parseInt(blue) };
-}
-
-Rico.Color.RGBtoHSB = function(r, g, b) {
-
-   var hue;
-   var saturaton;
-   var brightness;
-
-   var cmax = (r > g) ? r : g;
-   if (b > cmax)
-      cmax = b;
-
-   var cmin = (r < g) ? r : g;
-   if (b < cmin)
-      cmin = b;
-
-   brightness = cmax / 255.0;
-   if (cmax != 0)
-      saturation = (cmax - cmin)/cmax;
-   else
-      saturation = 0;
-
-   if (saturation == 0)
-      hue = 0;
-   else {
-      var redc   = (cmax - r)/(cmax - cmin);
-    	var greenc = (cmax - g)/(cmax - cmin);
-    	var bluec  = (cmax - b)/(cmax - cmin);
-
-    	if (r == cmax)
-    	   hue = bluec - greenc;
-    	else if (g == cmax)
-    	   hue = 2.0 + redc - bluec;
-      else
-    	   hue = 4.0 + greenc - redc;
-
-    	hue = hue / 6.0;
-    	if (hue < 0)
-    	   hue = hue + 1.0;
-   }
-
-   return { h : hue, s : saturation, b : brightness };
-}
-
-
-//-------------------- ricoCorner.js
-
-Rico.Corner = {
-
-   round: function(e, options) {
-      var e = $(e);
-      this._setOptions(options);
-
-      var color = this.options.color;
-      if ( this.options.color == "fromElement" )
-         color = this._background(e);
-
-      var bgColor = this.options.bgColor;
-      if ( this.options.bgColor == "fromParent" )
-         bgColor = this._background(e.offsetParent);
-
-      this._roundCornersImpl(e, color, bgColor);
-   },
-
-   _roundCornersImpl: function(e, color, bgColor) {
-      if(this.options.border)
-         this._renderBorder(e,bgColor);
-      if(this._isTopRounded())
-         this._roundTopCorners(e,color,bgColor);
-      if(this._isBottomRounded())
-         this._roundBottomCorners(e,color,bgColor);
-   },
-
-   _renderBorder: function(el,bgColor) {
-      var borderValue = "1px solid " + this._borderColor(bgColor);
-      var borderL = "border-left: "  + borderValue;
-      var borderR = "border-right: " + borderValue;
-      var style   = "style='" + borderL + ";" + borderR +  "'";
-      el.innerHTML = "<div " + style + ">" + el.innerHTML + "</div>"
-   },
-
-   _roundTopCorners: function(el, color, bgColor) {
-      var corner = this._createCorner(bgColor);
-      for(var i=0 ; i < this.options.numSlices ; i++ )
-         corner.appendChild(this._createCornerSlice(color,bgColor,i,"top"));
-      el.style.paddingTop = 0;
-      el.insertBefore(corner,el.firstChild);
-   },
-
-   _roundBottomCorners: function(el, color, bgColor) {
-      var corner = this._createCorner(bgColor);
-      for(var i=(this.options.numSlices-1) ; i >= 0 ; i-- )
-         corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom"));
-      el.style.paddingBottom = 0;
-      el.appendChild(corner);
-   },
-
-   _createCorner: function(bgColor) {
-      var corner = document.createElement("div");
-      corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor);
-      return corner;
-   },
-
-   _createCornerSlice: function(color,bgColor, n, position) {
-      var slice = document.createElement("span");
-
-      var inStyle = slice.style;
-      inStyle.backgroundColor = color;
-      inStyle.display  = "block";
-      inStyle.height   = "1px";
-      inStyle.overflow = "hidden";
-      inStyle.fontSize = "1px";
-
-      var borderColor = this._borderColor(color,bgColor);
-      if ( this.options.border && n == 0 ) {
-         inStyle.borderTopStyle    = "solid";
-         inStyle.borderTopWidth    = "1px";
-         inStyle.borderLeftWidth   = "0px";
-         inStyle.borderRightWidth  = "0px";
-         inStyle.borderBottomWidth = "0px";
-         inStyle.height            = "0px"; // assumes css compliant box model
-         inStyle.borderColor       = borderColor;
-      }
-      else if(borderColor) {
-         inStyle.borderColor = borderColor;
-         inStyle.borderStyle = "solid";
-         inStyle.borderWidth = "0px 1px";
-      }
-
-      if ( !this.options.compact && (n == (this.options.numSlices-1)) )
-         inStyle.height = "2px";
-
-      this._setMargin(slice, n, position);
-      this._setBorder(slice, n, position);
-
-      return slice;
-   },
-
-   _setOptions: function(options) {
-      this.options = {
-         corners : "all",
-         color   : "fromElement",
-         bgColor : "fromParent",
-         blend   : true,
-         border  : false,
-         compact : false
-      }.extend(options || {});
-
-      this.options.numSlices = this.options.compact ? 2 : 4;
-      if ( this._isTransparent() )
-         this.options.blend = false;
-   },
-
-   _whichSideTop: function() {
-      if ( this._hasString(this.options.corners, "all", "top") )
-         return "";
-
-      if ( this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0 )
-         return "";
-
-      if (this.options.corners.indexOf("tl") >= 0)
-         return "left";
-      else if (this.options.corners.indexOf("tr") >= 0)
-          return "right";
-      return "";
-   },
-
-   _whichSideBottom: function() {
-      if ( this._hasString(this.options.corners, "all", "bottom") )
-         return "";
-
-      if ( this.options.corners.indexOf("bl")>=0 && this.options.corners.indexOf("br")>=0 )
-         return "";
-
-      if(this.options.corners.indexOf("bl") >=0)
-         return "left";
-      else if(this.options.corners.indexOf("br")>=0)
-         return "right";
-      return "";
-   },
-
-   _borderColor : function(color,bgColor) {
-      if ( color == "transparent" )
-         return bgColor;
-      else if ( this.options.border )
-         return this.options.border;
-      else if ( this.options.blend )
-         return this._blend( bgColor, color );
-      else
-         return "";
-   },
-
-
-   _setMargin: function(el, n, corners) {
-      var marginSize = this._marginSize(n);
-      var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
-
-      if ( whichSide == "left" ) {
-         el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px";
-      }
-      else if ( whichSide == "right" ) {
-         el.style.marginRight = marginSize + "px"; el.style.marginLeft  = "0px";
-      }
-      else {
-         el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px";
-      }
-   },
-
-   _setBorder: function(el,n,corners) {
-      var borderSize = this._borderSize(n);
-      var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
-
-      if ( whichSide == "left" ) {
-         el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px";
-      }
-      else if ( whichSide == "right" ) {
-         el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth  = "0px";
-      }
-      else {
-         el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px";
-      }
-   },
-
-   _marginSize: function(n) {
-      if ( this._isTransparent() )
-         return 0;
-
-      var marginSizes          = [ 5, 3, 2, 1 ];
-      var blendedMarginSizes   = [ 3, 2, 1, 0 ];
-      var compactMarginSizes   = [ 2, 1 ];
-      var smBlendedMarginSizes = [ 1, 0 ];
-
-      if ( this.options.compact && this.options.blend )
-         return smBlendedMarginSizes[n];
-      else if ( this.options.compact )
-         return compactMarginSizes[n];
-      else if ( this.options.blend )
-         return blendedMarginSizes[n];
-      else
-         return marginSizes[n];
-   },
-
-   _borderSize: function(n) {
-      var transparentBorderSizes = [ 5, 3, 2, 1 ];
-      var blendedBorderSizes     = [ 2, 1, 1, 1 ];
-      var compactBorderSizes     = [ 1, 0 ];
-      var actualBorderSizes      = [ 0, 2, 0, 0 ];
-
-      if ( this.options.compact && (this.options.blend || this._isTransparent()) )
-         return 1;
-      else if ( this.options.compact )
-         return compactBorderSizes[n];
-      else if ( this.options.blend )
-         return blendedBorderSizes[n];
-      else if ( this.options.border )
-         return actualBorderSizes[n];
-      else if ( this._isTransparent() )
-         return transparentBorderSizes[n];
-      return 0;
-   },
-
-   _hasString: function(str) { for(var i=1 ; i<arguments.length ; i++) if (str.indexOf(arguments[i]) >= 0) return true; return false; },
-   _blend: function(c1, c2) { var cc1 = Rico.Color.createFromHex(c1); cc1.blend(Rico.Color.createFromHex(c2)); return cc1; },
-   _background: function(el) { try { return Rico.Color.createColorFromBackground(el).asHex(); } catch(err) { return "#ffffff"; } },
-   _isTransparent: function() { return this.options.color == "transparent"; },
-   _isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); },
-   _isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); },
-   _hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; }
-}
-
-
-//-------------------- ricoDragAndDrop.js
-Rico.DragAndDrop = Class.create();
-
-Rico.DragAndDrop.prototype = {
-
-   initialize: function() {
-      this.dropZones                = new Array();
-      this.draggables               = new Array();
-      this.currentDragObjects       = new Array();
-      this.dragElement              = null;
-      this.lastSelectedDraggable    = null;
-      this.currentDragObjectVisible = false;
-      this.interestedInMotionEvents = false;
-   },
-
-   registerDropZone: function(aDropZone) {
-      this.dropZones[ this.dropZones.length ] = aDropZone;
-   },
-
-   deregisterDropZone: function(aDropZone) {
-      var newDropZones = new Array();
-      var j = 0;
-      for ( var i = 0 ; i < this.dropZones.length ; i++ ) {
-         if ( this.dropZones[i] != aDropZone )
-            newDropZones[j++] = this.dropZones[i];
-      }
-
-      this.dropZones = newDropZones;
-   },
-
-   clearDropZones: function() {
-      this.dropZones = new Array();
-   },
-
-   registerDraggable: function( aDraggable ) {
-      this.draggables[ this.draggables.length ] = aDraggable;
-      this._addMouseDownHandler( aDraggable );
-   },
-
-   clearSelection: function() {
-      for ( var i = 0 ; i < this.currentDragObjects.length ; i++ )
-         this.currentDragObjects[i].deselect();
-      this.currentDragObjects = new Array();
-      this.lastSelectedDraggable = null;
-   },
-
-   hasSelection: function() {
-      return this.currentDragObjects.length > 0;
-   },
-
-   setStartDragFromElement: function( e, mouseDownElement ) {
-      this.origPos = RicoUtil.toDocumentPosition(mouseDownElement);
-      this.startx = e.screenX - this.origPos.x
-      this.starty = e.screenY - this.origPos.y
-      //this.startComponentX = e.layerX ? e.layerX : e.offsetX;
-      //this.startComponentY = e.layerY ? e.layerY : e.offsetY;
-      //this.adjustedForDraggableSize = false;
-
-      this.interestedInMotionEvents = this.hasSelection();
-      this._terminateEvent(e);
-   },
-
-   updateSelection: function( draggable, extendSelection ) {
-      if ( ! extendSelection )
-         this.clearSelection();
-
-      if ( draggable.isSelected() ) {
-         this.currentDragObjects.removeItem(draggable);
-         draggable.deselect();
-         if ( draggable == this.lastSelectedDraggable )
-            this.lastSelectedDraggable = null;
-      }
-      else {
-         this.currentDragObjects[ this.currentDragObjects.length ] = draggable;
-         draggable.select();
-         this.lastSelectedDraggable = draggable;
-      }
-   },
-
-   _mouseDownHandler: function(e) {
-      if ( arguments.length == 0 )
-         e = event;
-
-      // if not button 1 ignore it...
-      var nsEvent = e.which != undefined;
-      if ( (nsEvent && e.which != 1) || (!nsEvent && e.button != 1))
-         return;
-
-      var eventTarget      = e.target ? e.target : e.srcElement;
-      var draggableObject  = eventTarget.draggable;
-
-      var candidate = eventTarget;
-      while (draggableObject == null && candidate.parentNode) {
-         candidate = candidate.parentNode;
-         draggableObject = candidate.draggable;
-      }
-   
-      if ( draggableObject == null )
-         return;
-
-      this.updateSelection( draggableObject, e.ctrlKey );
-
-      // clear the drop zones postion cache...
-      if ( this.hasSelection() )
-         for ( var i = 0 ; i < this.dropZones.length ; i++ )
-            this.dropZones[i].clearPositionCache();
-
-      this.setStartDragFromElement( e, draggableObject.getMouseDownHTMLElement() );
-   },
-
-
-   _mouseMoveHandler: function(e) {
-      var nsEvent = e.which != undefined;
-      if ( !this.interestedInMotionEvents ) {
-         this._terminateEvent(e);
-         return;
-      }
-
-      if ( ! this.hasSelection() )
-         return;
-
-      if ( ! this.currentDragObjectVisible )
-         this._startDrag(e);
-
-      if ( !this.activatedDropZones )
-         this._activateRegisteredDropZones();
-
-      //if ( !this.adjustedForDraggableSize )
-      //   this._adjustForDraggableSize(e);
-
-      this._updateDraggableLocation(e);
-      this._updateDropZonesHover(e);
-
-      this._terminateEvent(e);
-   },
-
-   _makeDraggableObjectVisible: function(e)
-   {
-      if ( !this.hasSelection() )
-         return;
-
-      var dragElement;
-      if ( this.currentDragObjects.length > 1 )
-         dragElement = this.currentDragObjects[0].getMultiObjectDragGUI(this.currentDragObjects);
-      else
-         dragElement = this.currentDragObjects[0].getSingleObjectDragGUI();
-
-      // go ahead and absolute position it...
-      if ( RicoUtil.getElementsComputedStyle(dragElement, "position")  != "absolute" )
-         dragElement.style.position = "absolute";
-
-      // need to parent him into the document...
-      if ( dragElement.parentNode == null || dragElement.parentNode.nodeType == 11 )
-         document.body.appendChild(dragElement);
-
-      this.dragElement = dragElement;
-      this._updateDraggableLocation(e);
-
-      this.currentDragObjectVisible = true;
-   },
-
-   /**
-   _adjustForDraggableSize: function(e) {
-      var dragElementWidth  = this.dragElement.offsetWidth;
-      var dragElementHeight = this.dragElement.offsetHeight;
-      if ( this.startComponentX > dragElementWidth )
-         this.startx -= this.startComponentX - dragElementWidth + 2;
-      if ( e.offsetY ) {
-         if ( this.startComponentY > dragElementHeight )
-            this.starty -= this.startComponentY - dragElementHeight + 2;
-      }
-      this.adjustedForDraggableSize = true;
-   },
-   **/
-
-   _updateDraggableLocation: function(e) {
-      var dragObjectStyle = this.dragElement.style;
-      dragObjectStyle.left = (e.screenX - this.startx) + "px"
-      dragObjectStyle.top  = (e.screenY - this.starty) + "px";
-   },
-
-   _updateDropZonesHover: function(e) {
-      var n = this.dropZones.length;
-      for ( var i = 0 ; i < n ; i++ ) {
-         if ( ! this._mousePointInDropZone( e, this.dropZones[i] ) )
-            this.dropZones[i].hideHover();
-      }
-
-      for ( var i = 0 ; i < n ; i++ ) {
-         if ( this._mousePointInDropZone( e, this.dropZones[i] ) ) {
-            if ( this.dropZones[i].canAccept(this.currentDragObjects) )
-               this.dropZones[i].showHover();
-         }
-      }
-   },
-
-   _startDrag: function(e) {
-      for ( var i = 0 ; i < this.currentDragObjects.length ; i++ )
-         this.currentDragObjects[i].startDrag();
-
-      this._makeDraggableObjectVisible(e);
-   },
-
-   _mouseUpHandler: function(e) {
-      if ( ! this.hasSelection() )
-         return;
-
-      var nsEvent = e.which != undefined;
-      if ( (nsEvent && e.which != 1) || (!nsEvent && e.button != 1))
-         return;
-
-      this.interestedInMotionEvents = false;
-
-      if ( this.dragElement == null ) {
-         this._terminateEvent(e);
-         return;
-      }
-
-      if ( this._placeDraggableInDropZone(e) )
-         this._completeDropOperation(e);
-      else {
-         this._terminateEvent(e);
-         new Effect.Position( this.dragElement,
-                              this.origPos.x,
-                              this.origPos.y,
-                              200,
-                              20,
-                              { complete : this._doCancelDragProcessing.bind(this) } );
-      }
-   },
-
-   _completeDropOperation: function(e) {
-      if ( this.dragElement != this.currentDragObjects[0].getMouseDownHTMLElement() ) {
-         if ( this.dragElement.parentNode != null )
-            this.dragElement.parentNode.removeChild(this.dragElement);
-      }
-
-      this._deactivateRegisteredDropZones();
-      this._endDrag();
-      this.clearSelection();
-      this.dragElement = null;
-      this.currentDragObjectVisible = false;
-      this._terminateEvent(e);
-   },
-
-   _doCancelDragProcessing: function() {
-      this._cancelDrag();
-
-      if ( this.dragElement != this.currentDragObjects[0].getMouseDownHTMLElement() ) {
-         if ( this.dragElement.parentNode != null ) {
-            this.dragElement.parentNode.removeChild(this.dragElement);
-         }
-      }
-
-      this._deactivateRegisteredDropZones();
-      this.dragElement = null;
-      this.currentDragObjectVisible = false;
-   },
-
-   _placeDraggableInDropZone: function(e) {
-      var foundDropZone = false;
-      var n = this.dropZones.length;
-      for ( var i = 0 ; i < n ; i++ ) {
-         if ( this._mousePointInDropZone( e, this.dropZones[i] ) ) {
-            if ( this.dropZones[i].canAccept(this.currentDragObjects) ) {
-               this.dropZones[i].hideHover();
-               this.dropZones[i].accept(this.currentDragObjects);
-               foundDropZone = true;
-               break;
-            }
-         }
-      }
-
-      return foundDropZone;
-   },
-
-   _cancelDrag: function() {
-      for ( var i = 0 ; i < this.currentDragObjects.length ; i++ )
-         this.currentDragObjects[i].cancelDrag();
-   },
-
-   _endDrag: function() {
-      for ( var i = 0 ; i < this.currentDragObjects.length ; i++ )
-         this.currentDragObjects[i].endDrag();
-   },
-
-   _mousePointInDropZone: function( e, dropZone ) {
-
-      var absoluteRect = dropZone.getAbsoluteRect();
-
-      return e.clientX  > absoluteRect.left  &&
-             e.clientX  < absoluteRect.right &&
-             e.clientY  > absoluteRect.top   &&
-             e.clientY  < absoluteRect.bottom;
-   },
-
-   _addMouseDownHandler: function( aDraggable )
-   {
-      var htmlElement = aDraggable.getMouseDownHTMLElement();
-      if ( htmlElement != null ) {
-         htmlElement.draggable = aDraggable;
-         this._addMouseDownEvent( htmlElement );
-      }
-   },
-
-   _activateRegisteredDropZones: function() {
-      var n = this.dropZones.length;
-      for ( var i = 0 ; i < n ; i++ ) {
-         var dropZone = this.dropZones[i];
-         if ( dropZone.canAccept(this.currentDragObjects) )
-            dropZone.activate();
-      }
-
-      this.activatedDropZones = true;
-   },
-
-   _deactivateRegisteredDropZones: function() {
-      var n = this.dropZones.length;
-      for ( var i = 0 ; i < n ; i++ )
-         this.dropZones[i].deactivate();
-      this.activatedDropZones = false;
-   },
-
-   _addMouseDownEvent: function( htmlElement ) {
-      if ( typeof document.implementation != "undefined" &&
-         document.implementation.hasFeature("HTML",   "1.0") &&
-         document.implementation.hasFeature("Events", "2.0") &&
-         document.implementation.hasFeature("CSS",    "2.0") ) {
-         htmlElement.addEventListener("mousedown", this._mouseDownHandler.bindAsEventListener(this), false);
-      }
-      else {
-         htmlElement.attachEvent( "onmousedown", this._mouseDownHandler.bindAsEventListener(this) );
-      }
-   },
-
-   _terminateEvent: function(e) {
-      if ( e.stopPropagation != undefined )
-         e.stopPropagation();
-      else if ( e.cancelBubble != undefined )
-         e.cancelBubble = true;
-
-      if ( e.preventDefault != undefined )
-         e.preventDefault();
-      else
-         e.returnValue = false;
-   },
-
-   initializeEventHandlers: function() {
-      if ( typeof document.implementation != "undefined" &&
-         document.implementation.hasFeature("HTML",   "1.0") &&
-         document.implementation.hasFeature("Events", "2.0") &&
-         document.implementation.hasFeature("CSS",    "2.0") ) {
-         document.addEventListener("mouseup",   this._mouseUpHandler.bindAsEventListener(this),  false);
-         document.addEventListener("mousemove", this._mouseMoveHandler.bindAsEventListener(this), false);
-      }
-      else {
-         document.attachEvent( "onmouseup",   this._mouseUpHandler.bindAsEventListener(this) );
-         document.attachEvent( "onmousemove", this._mouseMoveHandler.bindAsEventListener(this) );
-      }
-   }
-}
-
-//var dndMgr = new Rico.DragAndDrop();
-//dndMgr.initializeEventHandlers();
-
-
-//-------------------- ricoDraggable.js
-Rico.Draggable = Class.create();
-
-Rico.Draggable.prototype = {
-
-   initialize: function( type, htmlElement ) {
-      this.type          = type;
-      this.htmlElement   = $(htmlElement);
-      this.selected      = false;
-   },
-
-   /**
-    *   Returns the HTML element that should have a mouse down event
-    *   added to it in order to initiate a drag operation
-    *
-    **/
-   getMouseDownHTMLElement: function() {
-      return this.htmlElement;
-   },
-
-   select: function() {
-      this.selected = true;
-
-      if ( this.showingSelected )
-         return;
-
-      var htmlElement = this.getMouseDownHTMLElement();
-
-      var color = Rico.Color.createColorFromBackground(htmlElement);
-      color.isBright() ? color.darken(0.033) : color.brighten(0.033);
-
-      this.saveBackground = RicoUtil.getElementsComputedStyle(htmlElement, "backgroundColor", "background-color");
-      htmlElement.style.backgroundColor = color.asHex();
-      this.showingSelected = true;
-   },
-
-   deselect: function() {
-      this.selected = false;
-      if ( !this.showingSelected )
-         return;
-
-      var htmlElement = this.getMouseDownHTMLElement();
-
-      htmlElement.style.backgroundColor = this.saveBackground;
-      this.showingSelected = false;
-   },
-
-   isSelected: function() {
-      return this.selected;
-   },
-
-   startDrag: function() {
-   },
-
-   cancelDrag: function() {
-   },
-
-   endDrag: function() {
-   },
-
-   getSingleObjectDragGUI: function() {
-      return this.htmlElement;
-   },
-
-   getMultiObjectDragGUI: function( draggables ) {
-      return this.htmlElement;
-   },
-
-   getDroppedGUI: function() {
-      return this.htmlElement;
-   },
-
-   toString: function() {
-      return this.type + ":" + this.htmlElement + ":";
-   }
-
-}
-
-
-//-------------------- ricoDropzone.js
-Rico.Dropzone = Class.create();
-
-Rico.Dropzone.prototype = {
-
-   initialize: function( htmlElement ) {
-      this.htmlElement  = $(htmlElement);
-      this.absoluteRect = null;
-   },
-
-   getHTMLElement: function() {
-      return this.htmlElement;
-   },
-
-   clearPositionCache: function() {
-      this.absoluteRect = null;
-   },
-
-   getAbsoluteRect: function() {
-      if ( this.absoluteRect == null ) {
-         var htmlElement = this.getHTMLElement();
-         var pos = RicoUtil.toViewportPosition(htmlElement);
-
-         this.absoluteRect = {
-            top:    pos.y,
-            left:   pos.x,
-            bottom: pos.y + htmlElement.offsetHeight,
-            right:  pos.x + htmlElement.offsetWidth
-         };
-      }
-      return this.absoluteRect;
-   },
-
-   activate: function() {
-      var htmlElement = this.getHTMLElement();
-      if (htmlElement == null  || this.showingActive)
-         return;
-
-      this.showingActive = true;
-      this.saveBackgroundColor = htmlElement.style.backgroundColor;
-
-      var fallbackColor = "#ffea84";
-      var currentColor = Rico.Color.createColorFromBackground(htmlElement);
-      if ( currentColor == null )
-         htmlElement.style.backgroundColor = fallbackColor;
-      else {
-         currentColor.isBright() ? currentColor.darken(0.2) : currentColor.brighten(0.2);
-         htmlElement.style.backgroundColor = currentColor.asHex();
-      }
-   },
-
-   deactivate: function() {
-      var htmlElement = this.getHTMLElement();
-      if (htmlElement == null || !this.showingActive)
-         return;
-
-      htmlElement.style.backgroundColor = this.saveBackgroundColor;
-      this.showingActive = false;
-      this.saveBackgroundColor = null;
-   },
-
-   showHover: function() {
-      var htmlElement = this.getHTMLElement();
-      if ( htmlElement == null || this.showingHover )
-         return;
-
-      this.saveBorderWidth = htmlElement.style.borderWidth;
-      this.saveBorderStyle = htmlElement.style.borderStyle;
-      this.saveBorderColor = htmlElement.style.borderColor;
-
-      this.showingHover = true;
-      htmlElement.style.borderWidth = "1px";
-      htmlElement.style.borderStyle = "solid";
-      //htmlElement.style.borderColor = "#ff9900";
-      htmlElement.style.borderColor = "#ffff00";
-   },
-
-   hideHover: function() {
-      var htmlElement = this.getHTMLElement();
-      if ( htmlElement == null || !this.showingHover )
-         return;
-
-      htmlElement.style.borderWidth = this.saveBorderWidth;
-      htmlElement.style.borderStyle = this.saveBorderStyle;
-      htmlElement.style.borderColor = this.saveBorderColor;
-      this.showingHover = false;
-   },
-
-   canAccept: function(draggableObjects) {
-      return true;
-   },
-
-   accept: function(draggableObjects) {
-      var htmlElement = this.getHTMLElement();
-      if ( htmlElement == null )
-         return;
-
-      n = draggableObjects.length;
-      for ( var i = 0 ; i < n ; i++ )
-      {
-         var theGUI = draggableObjects[i].getDroppedGUI();
-         if ( RicoUtil.getElementsComputedStyle( theGUI, "position" ) == "absolute" )
-         {
-            theGUI.style.position = "static";
-            theGUI.style.top = "";
-            theGUI.style.top = "";
-         }
-         htmlElement.appendChild(theGUI);
-      }
-   }
-}
-
-
-//-------------------- ricoEffects.js
-
-/**
-  *  Use the Effect namespace for effects.  If using scriptaculous effects
-  *  this will already be defined, otherwise we'll just create an empty
-  *  object for it...
- **/
-if ( window.Effect == undefined )
-   Effect = {};
-
-Effect.SizeAndPosition = Class.create();
-Effect.SizeAndPosition.prototype = {
-
-   initialize: function(element, x, y, w, h, duration, steps, options) {
-      this.element = $(element);
-      this.x = x;
-      this.y = y;
-      this.w = w;
-      this.h = h;
-      this.duration = duration;
-      this.steps    = steps;
-      this.options  = arguments[7] || {};
-
-      this.sizeAndPosition();
-   },
-
-   sizeAndPosition: function() {
-      if (this.isFinished()) {
-         if(this.options.complete) this.options.complete(this);
-         return;
-      }
-
-      if (this.timer)
-         clearTimeout(this.timer);
-
-      var stepDuration = Math.round(this.duration/this.steps) ;
-
-      // Get original values: x,y = top left corner;  w,h = width height
-      var currentX = this.element.offsetLeft;
-      var currentY = this.element.offsetTop;
-      var currentW = this.element.offsetWidth;
-      var currentH = this.element.offsetHeight;
-
-      // If values not set, or zero, we do not modify them, and take original as final as well
-      this.x = (this.x) ? this.x : currentX;
-      this.y = (this.y) ? this.y : currentY;
-      this.w = (this.w) ? this.w : currentW;
-      this.h = (this.h) ? this.h : currentH;
-
-      // how much do we need to modify our values for each step?
-      var difX = this.steps >  0 ? (this.x - currentX)/this.steps : 0;
-      var difY = this.steps >  0 ? (this.y - currentY)/this.steps : 0;
-      var difW = this.steps >  0 ? (this.w - currentW)/this.steps : 0;
-      var difH = this.steps >  0 ? (this.h - currentH)/this.steps : 0;
-
-      this.moveBy(difX, difY);
-      this.resizeBy(difW, difH);
-
-      this.duration -= stepDuration;
-      this.steps--;
-
-      this.timer = setTimeout(this.sizeAndPosition.bind(this), stepDuration);
-   },
-
-   isFinished: function() {
-      return this.steps <= 0;
-   },
-
-   moveBy: function( difX, difY ) {
-      var currentLeft = this.element.offsetLeft;
-      var currentTop  = this.element.offsetTop;
-      var intDifX     = parseInt(difX);
-      var intDifY     = parseInt(difY);
-
-      var style = this.element.style;
-      if ( intDifX != 0 )
-         style.left = (currentLeft + intDifX) + "px";
-      if ( intDifY != 0 )
-         style.top  = (currentTop + intDifY) + "px";
-   },
-
-   resizeBy: function( difW, difH ) {
-      var currentWidth  = this.element.offsetWidth;
-      var currentHeight = this.element.offsetHeight;
-      var intDifW       = parseInt(difW);
-      var intDifH       = parseInt(difH);
-
-      var style = this.element.style;
-      if ( intDifW != 0 )
-         style.width   = (currentWidth  + intDifW) + "px";
-      if ( intDifH != 0 )
-         style.height  = (currentHeight + intDifH) + "px";
-   }
-}
-
-Effect.Size = Class.create();
-Effect.Size.prototype = {
-
-   initialize: function(element, w, h, duration, steps, options) {
-      new Effect.SizeAndPosition(element, null, null, w, h, duration, steps, options);
-  }
-}
-
-Effect.Position = Class.create();
-Effect.Position.prototype = {
-
-   initialize: function(element, x, y, duration, steps, options) {
-      new Effect.SizeAndPosition(element, x, y, null, null, duration, steps, options);
-  }
-}
-
-Effect.Round = Class.create();
-Effect.Round.prototype = {
-
-   initialize: function(tagName, className, options) {
-      var elements = document.getElementsByTagAndClassName(tagName,className);
-      for ( var i = 0 ; i < elements.length ; i++ )
-         Rico.Corner.round( elements[i], options );
-   }
-};
-
-Effect.FadeTo = Class.create();
-Effect.FadeTo.prototype = {
-
-   initialize: function( element, opacity, duration, steps, options) {
-      this.element  = $(element);
-      this.opacity  = opacity;
-      this.duration = duration;
-      this.steps    = steps;
-      this.options  = arguments[4] || {};
-      this.fadeTo();
-   },
-
-   fadeTo: function() {
-      if (this.isFinished()) {
-         if(this.options.complete) this.options.complete(this);
-         return;
-      }
-
-      if (this.timer)
-         clearTimeout(this.timer);
-
-      var stepDuration = Math.round(this.duration/this.steps) ;
-      var currentOpacity = this.getElementOpacity();
-      var delta = this.steps > 0 ? (this.opacity - currentOpacity)/this.steps : 0;
-
-      this.changeOpacityBy(delta);
-      this.duration -= stepDuration;
-      this.steps--;
-
-      this.timer = setTimeout(this.fadeTo.bind(this), stepDuration);
-   },
-
-   changeOpacityBy: function(v) {
-      var currentOpacity = this.getElementOpacity();
-      var newOpacity = Math.max(0, Math.min(currentOpacity+v, 1));
-      this.element.ricoOpacity = newOpacity;
-
-      this.element.style.filter = "alpha(opacity:"+Math.round(newOpacity*100)+")";
-      this.element.style.opacity = newOpacity; /*//*/;
-   },
-
-   isFinished: function() {
-      return this.steps <= 0;
-   },
-
-   getElementOpacity: function() {
-      if ( this.element.ricoOpacity == undefined ) {
-         var opacity;
-         if ( this.element.currentStyle ) {
-            opacity = this.element.currentStyle.opacity;
-         }
-         else if ( document.defaultView.getComputedStyle != undefined ) {
-            var computedStyle = document.defaultView.getComputedStyle;
-            opacity = computedStyle(this.element, null).getPropertyValue('opacity');
-         }
-
-         this.element.ricoOpacity = opacity != undefined ? opacity : 1.0;
-      }
-
-      return parseFloat(this.element.ricoOpacity);
-   }
-}
-
-Effect.AccordionSize = Class.create();
-
-Effect.AccordionSize.prototype = {
-
-   initialize: function(e1, e2, start, end, duration, steps, options) {
-      this.e1       = $(e1);
-      this.e2       = $(e2);
-      this.start    = start;
-      this.end      = end;
-      this.duration = duration;
-      this.steps    = steps;
-      this.options  = arguments[6] || {};
-
-      this.accordionSize();
-   },
-
-   accordionSize: function() {
-
-      if (this.isFinished()) {
-         // just in case there are round errors or such...
-         this.e1.style.height = this.start + "px";
-         this.e2.style.height = this.end + "px";
-
-         if(this.options.complete)
-            this.options.complete(this);
-         return;
-      }
-
-      if (this.timer)
-         clearTimeout(this.timer);
-
-      var stepDuration = Math.round(this.duration/this.steps) ;
-
-      var diff = this.steps > 0 ? (parseInt(this.e1.offsetHeight) - this.start)/this.steps : 0;
-      this.resizeBy(diff);
-
-      this.duration -= stepDuration;
-      this.steps--;
-
-      this.timer = setTimeout(this.accordionSize.bind(this), stepDuration);
-   },
-
-   isFinished: function() {
-      return this.steps <= 0;
-   },
-
-   resizeBy: function(diff) {
-      var h1Height = this.e1.offsetHeight;
-      var h2Height = this.e2.offsetHeight;
-      var intDiff = parseInt(diff);
-      if ( diff != 0 ) {
-         this.e1.style.height = (h1Height - intDiff) + "px";
-         this.e2.style.height = (h2Height + intDiff) + "px";
-      }
-   }
-
-};
-
-
-//-------------------- ricoLiveGrid.js
-
-// Rico.LiveGridMetaData -----------------------------------------------------
-
-Rico.LiveGridMetaData = Class.create();
-
-Rico.LiveGridMetaData.prototype = {
-
-   initialize: function( pageSize, totalRows, columnCount, options ) {
-      this.pageSize  = pageSize;
-      this.totalRows = totalRows;
-      this.setOptions(options);
-      this.scrollArrowHeight = 16;
-      this.columnCount = columnCount;
-   },
-
-   setOptions: function(options) {
-      this.options = {
-         largeBufferSize    : 7.0,   // 7 pages
-         nearLimitFactor    : 0.2    // 20% of buffer
-      }.extend(options || {});
-   },
-
-   getPageSize: function() {
-      return this.pageSize;
-   },
-
-   getTotalRows: function() {
-      return this.totalRows;
-   },
-
-   setTotalRows: function(n) {
-      this.totalRows = n;
-   },
-
-   getLargeBufferSize: function() {
-      return parseInt(this.options.largeBufferSize * this.pageSize);
-   },
-
-   getLimitTolerance: function() {
-      return parseInt(this.getLargeBufferSize() * this.options.nearLimitFactor);
-   }
-};
-
-// Rico.LiveGridScroller -----------------------------------------------------
-
-Rico.LiveGridScroller = Class.create();
-
-Rico.LiveGridScroller.prototype = {
-
-   initialize: function(liveGrid, viewPort) {
-      this.isIE = navigator.userAgent.toLowerCase().indexOf("msie") >= 0;
-      this.liveGrid = liveGrid;
-      this.metaData = liveGrid.metaData;
-      this.createScrollBar();
-      this.scrollTimeout = null;
-      this.lastScrollPos = 0;
-      this.viewPort = viewPort;
-      this.rows = new Array();
-   },
-
-   isUnPlugged: function() {
-      return this.scrollerDiv.onscroll == null;
-   },
-
-   plugin: function() {
-      this.scrollerDiv.onscroll = this.handleScroll.bindAsEventListener(this);
-   },
-
-   unplug: function() {
-      this.scrollerDiv.onscroll = null;
-   },
-
-   sizeIEHeaderHack: function() {
-      if ( !this.isIE ) return;
-      var headerTable = $(this.liveGrid.tableId + "_header");
-      if ( headerTable )
-         headerTable.rows[0].cells[0].style.width =
-            (headerTable.rows[0].cells[0].offsetWidth + 1) + "px";
-   },
-
-   createScrollBar: function() {
-      var visibleHeight = this.liveGrid.viewPort.visibleHeight();
-      // create the outer div...
-      this.scrollerDiv  = document.createElement("div");
-      var scrollerStyle = this.scrollerDiv.style;
-      scrollerStyle.borderRight = "1px solid #ababab"; // hard coded color!!!
-      scrollerStyle.position    = "relative";
-      scrollerStyle.left        = this.isIE ? "-6px" : "-3px";
-      scrollerStyle.width       = "19px";
-      scrollerStyle.height      = visibleHeight + "px";
-      scrollerStyle.overflow    = "auto";
-
-      // create the inner div...
-      this.heightDiv = document.createElement("div");
-      this.heightDiv.style.width  = "1px";
-
-      this.heightDiv.style.height = parseInt(visibleHeight *
-                        this.metaData.getTotalRows()/this.metaData.getPageSize()) + "px" ;
-      this.scrollerDiv.appendChild(this.heightDiv);
-      this.scrollerDiv.onscroll = this.handleScroll.bindAsEventListener(this);
-
-     var table = this.liveGrid.table;
-     table.parentNode.parentNode.insertBefore( this.scrollerDiv, table.parentNode.nextSibling );
-   },
-
-   updateSize: function() {
-      var table = this.liveGrid.table;
-      var visibleHeight = this.viewPort.visibleHeight();
-      this.heightDiv.style.height = parseInt(visibleHeight *
-                                  this.metaData.getTotalRows()/this.metaData.getPageSize()) + "px";
-   },
-
-   rowToPixel: function(rowOffset) {
-      return (rowOffset / this.metaData.getTotalRows()) * this.heightDiv.offsetHeight
-   },
-   
-   moveScroll: function(rowOffset) {
-      this.scrollerDiv.scrollTop = this.rowToPixel(rowOffset);
-      if ( this.metaData.options.onscroll )
-         this.metaData.options.onscroll( this.liveGrid, rowOffset );    
-   },
-
-   handleScroll: function() {
-     if ( this.scrollTimeout )
-         clearTimeout( this.scrollTimeout );
-
-      var contentOffset = parseInt(this.scrollerDiv.scrollTop / this.viewPort.rowHeight);
-      this.liveGrid.requestContentRefresh(contentOffset);
-      this.viewPort.scrollTo(this.scrollerDiv.scrollTop);
-      
-      if ( this.metaData.options.onscroll )
-         this.metaData.options.onscroll( this.liveGrid, contentOffset );
-
-      this.scrollTimeout = setTimeout( this.scrollIdle.bind(this), 1200 );
-   },
-
-   scrollIdle: function() {
-      if ( this.metaData.options.onscrollidle )
-         this.metaData.options.onscrollidle();
-   }
-};
-
-// Rico.LiveGridBuffer -----------------------------------------------------
-
-Rico.LiveGridBuffer = Class.create();
-
-Rico.LiveGridBuffer.prototype = {
-
-   initialize: function(metaData, viewPort) {
-      this.startPos = 0;
-      this.size     = 0;
-      this.metaData = metaData;
-      this.rows     = new Array();
-      this.updateInProgress = false;
-      this.viewPort = viewPort;
-      this.maxBufferSize = metaData.getLargeBufferSize() * 2;
-      this.maxFetchSize = metaData.getLargeBufferSize();
-      this.lastOffset = 0;
-   },
-
-   getBlankRow: function() {
-      if (!this.blankRow ) {
-         this.blankRow = new Array();
-         for ( var i=0; i < this.metaData.columnCount ; i++ ) 
-            this.blankRow[i] = "&nbsp;";
-     }
-     return this.blankRow;
-   },
-   
-   loadRows: function(ajaxResponse) {
-      var rowsElement = ajaxResponse.getElementsByTagName('rows')[0];
-      this.updateUI = rowsElement.getAttribute("update_ui") == "true"
-      var newRows = new Array()
-      var trs = rowsElement.getElementsByTagName("tr");
-      for ( var i=0 ; i < trs.length; i++ ) {
-         var row = newRows[i] = new Array(); 
-         var cells = trs[i].getElementsByTagName("td");
-         for ( var j=0; j < cells.length ; j++ ) {
-            var cell = cells[j];
-            var convertSpaces = cell.getAttribute("convert_spaces") == "true";
-            var cellContent = RicoUtil.getContentAsString(cell);
-            row[j] = convertSpaces ? this.convertSpaces(cellContent) : cellContent;
-            if (!row[j]) 
-               row[j] = '&nbsp;';
-         }
-      }
-      return newRows;
-   },
-      
-   update: function(ajaxResponse, start) {
-     var newRows = this.loadRows(ajaxResponse);
-      if (this.rows.length == 0) { // initial load
-         this.rows = newRows;
-         this.size = this.rows.length;
-         this.startPos = start;
-         return;
-      }
-      if (start > this.startPos) { //appending
-         if (this.startPos + this.rows.length < start) {
-            this.rows =  newRows;
-            this.startPos = start;//
-         } else {
-              this.rows = this.rows.concat( newRows.slice(0, newRows.length));
-            if (this.rows.length > this.maxBufferSize) {
-               var fullSize = this.rows.length;
-               this.rows = this.rows.slice(this.rows.length - this.maxBufferSize, this.rows.length)
-               this.startPos = this.startPos +  (fullSize - this.rows.length);
-            }
-         }
-      } else { //prepending
-         if (start + newRows.length < this.startPos) {
-            this.rows =  newRows;
-         } else {
-            this.rows = newRows.slice(0, this.startPos).concat(this.rows);
-            if (this.rows.length > this.maxBufferSize) 
-               this.rows = this.rows.slice(0, this.maxBufferSize)
-         }
-         this.startPos =  start;
-      }
-      this.size = this.rows.length;
-   },
-   
-   clear: function() {
-      this.rows = new Array();
-      this.startPos = 0;
-      this.size = 0;
-   },
-
-   isOverlapping: function(start, size) {
-      return ((start < this.endPos()) && (this.startPos < start + size)) || (this.endPos() == 0)
-   },
-
-   isInRange: function(position) {
-      return (position >= this.startPos) && (position + this.metaData.getPageSize() <= this.endPos()); 
-             //&& this.size()  != 0;
-   },
-
-   isNearingTopLimit: function(position) {
-      return position - this.startPos < this.metaData.getLimitTolerance();
-   },
-
-   endPos: function() {
-      return this.startPos + this.rows.length;
-   },
-   
-   isNearingBottomLimit: function(position) {
-      return this.endPos() - (position + this.metaData.getPageSize()) < this.metaData.getLimitTolerance();
-   },
-
-   isAtTop: function() {
-      return this.startPos == 0;
-   },
-
-   isAtBottom: function() {
-      return this.endPos() == this.metaData.getTotalRows();
-   },
-
-   isNearingLimit: function(position) {
-      return ( !this.isAtTop()    && this.isNearingTopLimit(position)) ||
-             ( !this.isAtBottom() && this.isNearingBottomLimit(position) )
-   },
-
-   getFetchSize: function(offset) {
-      var adjustedOffset = this.getFetchOffset(offset);
-      var adjustedSize = 0;
-      if (adjustedOffset >= this.startPos) { //apending
-         var endFetchOffset = this.maxFetchSize  + adjustedOffset;
-         if (endFetchOffset > this.metaData.totalRows)
-            endFetchOffset = this.metaData.totalRows;
-         adjustedSize = endFetchOffset - adjustedOffset;   
-      } else {//prepending
-         var adjustedSize = this.startPos - adjustedOffset;
-         if (adjustedSize > this.maxFetchSize)
-            adjustedSize = this.maxFetchSize;
-      }
-      return adjustedSize;
-   }, 
-
-   getFetchOffset: function(offset) {
-      var adjustedOffset = offset;
-      if (offset > this.startPos)  //apending
-         adjustedOffset = (offset > this.endPos()) ? offset :  this.endPos(); 
-      else { //prepending
-         if (offset + this.maxFetchSize >= this.startPos) {
-            var adjustedOffset = this.startPos - this.maxFetchSize;
-            if (adjustedOffset < 0)
-               adjustedOffset = 0;
-         }
-      }
-      this.lastOffset = adjustedOffset;
-      return adjustedOffset;
-   },
-
-   getRows: function(start, count) {
-      var begPos = start - this.startPos
-      var endPos = begPos + count
-
-      // er? need more data...
-      if ( endPos > this.size )
-         endPos = this.size
-
-      var results = new Array()
-      var index = 0;
-      for ( var i=begPos ; i < endPos; i++ ) {
-         results[index++] = this.rows[i]
-      }
-      return results
-   },
-
-   convertSpaces: function(s) {
-      return s.split(" ").join("&nbsp;");
-   }
-
-};
-
-
-//Rico.GridViewPort --------------------------------------------------
-Rico.GridViewPort = Class.create();
-
-Rico.GridViewPort.prototype = {
-
-   initialize: function(table, rowHeight, visibleRows, buffer, liveGrid) {
-      this.lastDisplayedStartPos = 0;
-      this.div = table.parentNode;
-      this.table = table
-      this.rowHeight = rowHeight;
-      this.div.style.height = this.rowHeight * visibleRows;
-      this.div.style.overflow = "hidden";
-      this.buffer = buffer;
-      this.liveGrid = liveGrid;
-      this.visibleRows = visibleRows + 1;
-      this.lastPixelOffset = 0;
-      this.startPos = 0;
-   },
-
-   populateRow: function(htmlRow, row) {
-      for (var j=0; j < row.length; j++) {
-         htmlRow.cells[j].innerHTML = row[j]
-      }
-   },
-   
-   bufferChanged: function() {
-      this.refreshContents( parseInt(this.lastPixelOffset / this.rowHeight));
-   },
-   
-   clearRows: function() {
-      if (!this.isBlank) {
-         for (var i=0; i < this.visibleRows; i++)
-            this.populateRow(this.table.rows[i], this.buffer.getBlankRow());
-         this.isBlank = true;
-      }
-   },
-   
-   clearContents: function() {   
-      this.clearRows();
-      this.scrollTo(0);
-      this.startPos = 0;
-      this.lastStartPos = -1;   
-   },
-   
-   refreshContents: function(startPos) {
-      if (startPos == this.lastRowPos && !this.isPartialBlank && !this.isBlank) {
-         return;
-      }
-      if ((startPos + this.visibleRows < this.buffer.startPos)  
-          || (this.buffer.startPos + this.buffer.size < startPos) 
-          || (this.buffer.size == 0)) {
-         this.clearRows();
-         return;
-      }
-      this.isBlank = false;
-      var viewPrecedesBuffer = this.buffer.startPos > startPos
-      var contentStartPos = viewPrecedesBuffer ? this.buffer.startPos: startPos;
-   
-      var contentEndPos = (this.buffer.startPos + this.buffer.size < startPos + this.visibleRows) 
-                                 ? this.buffer.startPos + this.buffer.size
-                                 : startPos + this.visibleRows;       
-      var rowSize = contentEndPos - contentStartPos;
-      var rows = this.buffer.getRows(contentStartPos, rowSize ); 
-      var blankSize = this.visibleRows - rowSize;
-      var blankOffset = viewPrecedesBuffer ? 0: rowSize;
-      var contentOffset = viewPrecedesBuffer ? blankSize: 0;
-
-      for (var i=0; i < rows.length; i++) {//initialize what we have
-        this.populateRow(this.table.rows[i + contentOffset], rows[i]);
-      }       
-      for (var i=0; i < blankSize; i++) {// blank out the rest 
-        this.populateRow(this.table.rows[i + blankOffset], this.buffer.getBlankRow());
-      }
-      this.isPartialBlank = blankSize > 0;
-      this.lastRowPos = startPos;   
-   },
-
-   scrollTo: function(pixelOffset) {      
-      if (this.lastPixelOffset == pixelOffset)
-         return;
-
-      this.refreshContents(parseInt(pixelOffset / this.rowHeight))
-      this.div.scrollTop = pixelOffset % this.rowHeight        
-      
-      this.lastPixelOffset = pixelOffset;
-   },
-   
-   visibleHeight: function() {
-      return parseInt(this.div.style.height);
-   }
-   
-};
-
-
-Rico.LiveGridRequest = Class.create();
-Rico.LiveGridRequest.prototype = {
-   initialize: function( requestOffset, options ) {
-      this.requestOffset = requestOffset;
-   }
-};
-
-// Rico.LiveGrid -----------------------------------------------------
-
-Rico.LiveGrid = Class.create();
-
-Rico.LiveGrid.prototype = {
-
-   initialize: function( tableId, visibleRows, totalRows, url, options ) {
-      if ( options == null )
-         options = {};
-
-      this.tableId     = tableId; 
-      this.table       = $(tableId);
-      var columnCount  = this.table.rows[0].cells.length
-      this.metaData    = new Rico.LiveGridMetaData(visibleRows, totalRows, columnCount, options);
-      this.buffer      = new Rico.LiveGridBuffer(this.metaData);
-
-      var rowCount = this.table.rows.length;
-      this.viewPort =  new Rico.GridViewPort(this.table, 
-                                            this.table.offsetHeight/rowCount,
-                                            visibleRows,
-                                            this.buffer, this);
-      this.scroller    = new Rico.LiveGridScroller(this,this.viewPort);
-      
-      this.additionalParms       = options.requestParameters || [];
-      
-      options.sortHandler = this.sortHandler.bind(this);
-
-      if ( $(tableId + '_header') )
-         this.sort = new Rico.LiveGridSort(tableId + '_header', options)
-
-      this.processingRequest = null;
-      this.unprocessedRequest = null;
-
-      this.initAjax(url);
-      if ( options.prefetchBuffer || options.prefetchOffset > 0) {
-         var offset = 0;
-         if (options.offset ) {
-            offset = options.offset;            
-            this.scroller.moveScroll(offset);
-            this.viewPort.scrollTo(this.scroller.rowToPixel(offset));            
-         }
-         if (options.sortCol) {
-             this.sortCol = options.sortCol;
-             this.sortDir = options.sortDir;
-         }
-         this.requestContentRefresh(offset);
-      }
-   },
-
-   resetContents: function() {
-      this.scroller.moveScroll(0);
-      this.buffer.clear();
-      this.viewPort.clearContents();
-   },
-   
-   sortHandler: function(column) {
-      this.sortCol = column.name;
-      this.sortDir = column.currentSort;
-
-      this.resetContents();
-      this.requestContentRefresh(0) 
-   },
-   
-   setRequestParams: function() {
-      this.additionalParms = [];
-      for ( var i=0 ; i < arguments.length ; i++ )
-         this.additionalParms[i] = arguments[i];
-   },
-
-   setTotalRows: function( newTotalRows ) {
-      this.resetContents();
-      this.metaData.setTotalRows(newTotalRows);
-      this.scroller.updateSize();
-   },
-
-   initAjax: function(url) {
-      ajaxEngine.registerRequest( this.tableId + '_request', url );
-      ajaxEngine.registerAjaxObject( this.tableId + '_updater', this );
-   },
-
-   invokeAjax: function() {
-   },
-
-   handleTimedOut: function() {
-      //server did not respond in 4 seconds... assume that there could have been
-      //an error or something, and allow requests to be processed again...
-      this.processingRequest = null;
-      this.processQueuedRequest();
-   },
-
-   fetchBuffer: function(offset) {
-      if ( this.buffer.isInRange(offset) &&
-         !this.buffer.isNearingLimit(offset)) {
-         return;
-      }
-      if (this.processingRequest) {
-          this.unprocessedRequest = new Rico.LiveGridRequest(offset);
-         return;
-      }
-      var bufferStartPos = this.buffer.getFetchOffset(offset);
-      this.processingRequest = new Rico.LiveGridRequest(offset);
-      this.processingRequest.bufferOffset = bufferStartPos;   
-      var fetchSize = this.buffer.getFetchSize(offset);
-      var partialLoaded = false;
-      var callParms = []; 
-      callParms.push(this.tableId + '_request');
-      callParms.push('id='        + this.tableId);
-      callParms.push('page_size=' + fetchSize);
-      callParms.push('offset='    + bufferStartPos);
-      if ( this.sortCol) {
-         callParms.push('sort_col='    + this.sortCol);
-         callParms.push('sort_dir='    + this.sortDir);
-      }
-      
-      for( var i=0 ; i < this.additionalParms.length ; i++ )
-         callParms.push(this.additionalParms[i]);
-      ajaxEngine.sendRequest.apply( ajaxEngine, callParms );
-        
-      this.timeoutHandler = setTimeout( this.handleTimedOut.bind(this), 20000 ); //todo: make as option
-   },
-
-   requestContentRefresh: function(contentOffset) {
-      this.fetchBuffer(contentOffset);
-   },
-
-   ajaxUpdate: function(ajaxResponse) {
-      try {
-         clearTimeout( this.timeoutHandler );
-         this.buffer.update(ajaxResponse,this.processingRequest.bufferOffset);
-         this.viewPort.bufferChanged();
-      }
-      catch(err) {}
-      finally {this.processingRequest = null; }
-      this.processQueuedRequest();
-   },
-
-   processQueuedRequest: function() {
-      if (this.unprocessedRequest != null) {
-         this.requestContentRefresh(this.unprocessedRequest.requestOffset);
-         this.unprocessedRequest = null
-      }  
-   }
- 
-};
-
-
-//-------------------- ricoLiveGridSort.js
-Rico.LiveGridSort = Class.create();
-
-Rico.LiveGridSort.prototype = {
-
-   initialize: function(headerTableId, options) {
-      this.headerTableId = headerTableId;
-      this.headerTable   = $(headerTableId);
-      this.setOptions(options);
-      this.applySortBehavior();
-
-      if ( this.options.sortCol ) {
-         this.setSortUI( this.options.sortCol, this.options.sortDir );
-      }
-   },
-
-   setSortUI: function( columnName, sortDirection ) {
-      var cols = this.options.columns;
-      for ( var i = 0 ; i < cols.length ; i++ ) {
-         if ( cols[i].name == columnName ) {
-            this.setColumnSort(i, sortDirection);
-            break;
-         }
-      }
-   },
-
-   setOptions: function(options) {
-      this.options = {
-         sortAscendImg:    'images/sort_asc.gif',
-         sortDescendImg:   'images/sort_desc.gif',
-         imageWidth:       9,
-         imageHeight:      5,
-         ajaxSortURLParms: []
-      }.extend(options);
-
-      // preload the images...
-      new Image().src = this.options.sortAscendImg;
-      new Image().src = this.options.sortDescendImg;
-
-      this.sort = options.sortHandler;
-      if ( !this.options.columns )
-         this.options.columns = this.introspectForColumnInfo();
-      else {
-         // allow client to pass { columns: [ ["a", true], ["b", false] ] }
-         // and convert to an array of Rico.TableColumn objs...
-         this.options.columns = this.convertToTableColumns(this.options.columns);
-      }
-   },
-
-   applySortBehavior: function() {
-      var headerRow   = this.headerTable.rows[0];
-      var headerCells = headerRow.cells;
-      for ( var i = 0 ; i < headerCells.length ; i++ ) {
-         this.addSortBehaviorToColumn( i, headerCells[i] );
-      }
-   },
-
-   addSortBehaviorToColumn: function( n, cell ) {
-      if ( this.options.columns[n].isSortable() ) {
-         cell.id            = this.headerTableId + '_' + n;
-         cell.style.cursor  = 'pointer';
-         cell.onclick       = this.headerCellClicked.bindAsEventListener(this);
-         cell.innerHTML     = cell.innerHTML + '<span id="' + this.headerTableId + '_img_' + n + '">'
-                           + '&nbsp;&nbsp;&nbsp;</span>';
-      }
-   },
-
-   // event handler....
-   headerCellClicked: function(evt) {
-      var eventTarget = evt.target ? evt.target : evt.srcElement;
-      var cellId = eventTarget.id;
-      var columnNumber = parseInt(cellId.substring( cellId.lastIndexOf('_') + 1 ));
-      var sortedColumnIndex = this.getSortedColumnIndex();
-      if ( sortedColumnIndex != -1 ) {
-         if ( sortedColumnIndex != columnNumber ) {
-            this.removeColumnSort(sortedColumnIndex);
-            this.setColumnSort(columnNumber, Rico.TableColumn.SORT_ASC);
-         }
-         else
-            this.toggleColumnSort(sortedColumnIndex);
-      }
-      else
-         this.setColumnSort(columnNumber, Rico.TableColumn.SORT_ASC);
-
-      if (this.options.sortHandler) {
-         this.options.sortHandler(this.options.columns[columnNumber]);
-      }
-   },
-
-   removeColumnSort: function(n) {
-      this.options.columns[n].setUnsorted();
-      this.setSortImage(n);
-   },
-
-   setColumnSort: function(n, direction) {
-      this.options.columns[n].setSorted(direction);
-      this.setSortImage(n);
-   },
-
-   toggleColumnSort: function(n) {
-      this.options.columns[n].toggleSort();
-      this.setSortImage(n);
-   },
-
-   setSortImage: function(n) {
-      var sortDirection = this.options.columns[n].getSortDirection();
-
-      var sortImageSpan = $( this.headerTableId + '_img_' + n );
-      if ( sortDirection == Rico.TableColumn.UNSORTED )
-         sortImageSpan.innerHTML = '&nbsp;&nbsp;';
-      else if ( sortDirection == Rico.TableColumn.SORT_ASC )
-         sortImageSpan.innerHTML = '&nbsp;&nbsp;<img width="'  + this.options.imageWidth    + '" ' +
-                                                     'height="'+ this.options.imageHeight   + '" ' +
-                                                     'src="'   + this.options.sortAscendImg + '"/>';
-      else if ( sortDirection == Rico.TableColumn.SORT_DESC )
-         sortImageSpan.innerHTML = '&nbsp;&nbsp;<img width="'  + this.options.imageWidth    + '" ' +
-                                                     'height="'+ this.options.imageHeight   + '" ' +
-                                                     'src="'   + this.options.sortDescendImg + '"/>';
-   },
-
-   getSortedColumnIndex: function() {
-      var cols = this.options.columns;
-      for ( var i = 0 ; i < cols.length ; i++ ) {
-         if ( cols[i].isSorted() )
-            return i;
-      }
-
-      return -1;
-   },
-
-   introspectForColumnInfo: function() {
-      var columns = new Array();
-      var headerRow   = this.headerTable.rows[0];
-      var headerCells = headerRow.cells;
-      for ( var i = 0 ; i < headerCells.length ; i++ )
-         columns.push( new Rico.TableColumn( this.deriveColumnNameFromCell(headerCells[i],i), true ) );
-      return columns;
-   },
-
-   convertToTableColumns: function(cols) {
-      var columns = new Array();
-      for ( var i = 0 ; i < cols.length ; i++ )
-         columns.push( new Rico.TableColumn( cols[i][0], cols[i][1] ) );
-   },
-
-   deriveColumnNameFromCell: function(cell,columnNumber) {
-      var cellContent = cell.innerText != undefined ? cell.innerText : cell.textContent;
-      return cellContent ? cellContent.toLowerCase().split(' ').join('_') : "col_" + columnNumber;
-   }
-};
-
-Rico.TableColumn = Class.create();
-
-Rico.TableColumn.UNSORTED  = 0;
-Rico.TableColumn.SORT_ASC  = "ASC";
-Rico.TableColumn.SORT_DESC = "DESC";
-
-Rico.TableColumn.prototype = {
-   initialize: function(name, sortable) {
-      this.name        = name;
-      this.sortable    = sortable;
-      this.currentSort = Rico.TableColumn.UNSORTED;
-   },
-
-   isSortable: function() {
-      return this.sortable;
-   },
-
-   isSorted: function() {
-      return this.currentSort != Rico.TableColumn.UNSORTED;
-   },
-
-   getSortDirection: function() {
-      return this.currentSort;
-   },
-
-   toggleSort: function() {
-      if ( this.currentSort == Rico.TableColumn.UNSORTED || this.currentSort == Rico.TableColumn.SORT_DESC )
-         this.currentSort = Rico.TableColumn.SORT_ASC;
-      else if ( this.currentSort == Rico.TableColumn.SORT_ASC )
-         this.currentSort = Rico.TableColumn.SORT_DESC;
-   },
-
-   setUnsorted: function(direction) {
-      this.setSorted(Rico.TableColumn.UNSORTED);
-   },
-
-   setSorted: function(direction) {
-      // direction must by one of Rico.TableColumn.UNSORTED, .SORT_ASC, or .SET_DESC...
-      this.currentSort = direction;
-   }
-
-};
-
-
-//-------------------- ricoUtil.js
-
-var RicoUtil = {
-
-   getElementsComputedStyle: function ( htmlElement, cssProperty, mozillaEquivalentCSS) {
-      if ( arguments.length == 2 )
-         mozillaEquivalentCSS = cssProperty;
-
-      var el = $(htmlElement);
-      if ( el.currentStyle )
-         return el.currentStyle[cssProperty];
-      else
-         return document.defaultView.getComputedStyle(el, null).getPropertyValue(mozillaEquivalentCSS);
-   },
-
-   createXmlDocument : function() {
-      if (document.implementation && document.implementation.createDocument) {
-         var doc = document.implementation.createDocument("", "", null);
-
-         if (doc.readyState == null) {
-            doc.readyState = 1;
-            doc.addEventListener("load", function () {
-               doc.readyState = 4;
-               if (typeof doc.onreadystatechange == "function")
-                  doc.onreadystatechange();
-            }, false);
-         }
-
-         return doc;
-      }
-
-      if (window.ActiveXObject)
-          return Try.these(
-            function() { return new ActiveXObject('MSXML2.DomDocument')   },
-            function() { return new ActiveXObject('Microsoft.DomDocument')},
-            function() { return new ActiveXObject('MSXML.DomDocument')    },
-            function() { return new ActiveXObject('MSXML3.DomDocument')   }
-          ) || false;
-
-      return null;
-   },
-
-   getContentAsString: function( parentNode ) {
-      return parentNode.xml != undefined ? 
-         this._getContentAsStringIE(parentNode) :
-         this._getContentAsStringMozilla(parentNode);
-   },
-
-   _getContentAsStringIE: function(parentNode) {
-      var contentStr = "";
-      for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
-         contentStr += parentNode.childNodes[i].xml;
-      return contentStr;
-   },
-
-   _getContentAsStringMozilla: function(parentNode) {
-      var xmlSerializer = new XMLSerializer();
-      var contentStr = "";
-      for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
-         contentStr += xmlSerializer.serializeToString(parentNode.childNodes[i]);
-      return contentStr;
-   },
-
-   toViewportPosition: function(element) {
-      return this._toAbsolute(element,true);
-   },
-
-   toDocumentPosition: function(element) {
-      return this._toAbsolute(element,false);
-   },
-
-   /**
-    *  Compute the elements position in terms of the window viewport
-    *  so that it can be compared to the position of the mouse (dnd)
-    *  This is additions of all the offsetTop,offsetLeft values up the
-    *  offsetParent hierarchy, ...taking into account any scrollTop,
-    *  scrollLeft values along the way...
-    *
-    * IE has a bug reporting a correct offsetLeft of elements within a
-    * a relatively positioned parent!!!
-    **/
-   _toAbsolute: function(element,accountForDocScroll) {
-
-      if ( navigator.userAgent.toLowerCase().indexOf("msie") == -1 )
-         return this._toAbsoluteMozilla(element,accountForDocScroll);
-
-      var x = 0;
-      var y = 0;
-      var parent = element;
-      while ( parent ) {
-
-         var borderXOffset = 0;
-         var borderYOffset = 0;
-         if ( parent != element ) {
-            var borderXOffset = parseInt(this.getElementsComputedStyle(parent, "borderLeftWidth" ));
-            var borderYOffset = parseInt(this.getElementsComputedStyle(parent, "borderTopWidth" ));
-            borderXOffset = isNaN(borderXOffset) ? 0 : borderXOffset;
-            borderYOffset = isNaN(borderYOffset) ? 0 : borderYOffset;
-         }
-
-         x += parent.offsetLeft - parent.scrollLeft + borderXOffset;
-         y += parent.offsetTop - parent.scrollTop + borderYOffset;
-         parent = parent.offsetParent;
-      }
-
-      if ( accountForDocScroll ) {
-         x -= this.docScrollLeft();
-         y -= this.docScrollTop();
-      }
-
-      return { x:x, y:y };
-   },
-
-   /**
-    *  Mozilla did not report all of the parents up the hierarchy via the
-    *  offsetParent property that IE did.  So for the calculation of the
-    *  offsets we use the offsetParent property, but for the calculation of
-    *  the scrollTop/scrollLeft adjustments we navigate up via the parentNode
-    *  property instead so as to get the scroll offsets...
-    *
-    **/
-   _toAbsoluteMozilla: function(element,accountForDocScroll) {
-      var x = 0;
-      var y = 0;
-      var parent = element;
-      while ( parent ) {
-         x += parent.offsetLeft;
-         y += parent.offsetTop;
-         parent = parent.offsetParent;
-      }
-
-      parent = element;
-      while ( parent &&
-              parent != document.body &&
-              parent != document.documentElement ) {
-         if ( parent.scrollLeft  )
-            x -= parent.scrollLeft;
-         if ( parent.scrollTop )
-            y -= parent.scrollTop;
-         parent = parent.parentNode;
-      }
-
-      if ( accountForDocScroll ) {
-         x -= this.docScrollLeft();
-         y -= this.docScrollTop();
-      }
-
-      return { x:x, y:y };
-   },
-
-   docScrollLeft: function() {
-      if ( window.pageXOffset )
-         return window.pageXOffset;
-      else if ( document.documentElement && document.documentElement.scrollLeft )
-         return document.documentElement.scrollLeft;
-      else if ( document.body )
-         return document.body.scrollLeft;
-      else
-         return 0;
-   },
-
-   docScrollTop: function() {
-      if ( window.pageYOffset )
-         return window.pageYOffset;
-      else if ( document.documentElement && document.documentElement.scrollTop )
-         return document.documentElement.scrollTop;
-      else if ( document.body )
-         return document.body.scrollTop;
-      else
-         return 0;
-   }
-
-};
diff --git a/groovy/modules/grails/src/war/js/scriptaculous.js b/groovy/modules/grails/src/war/js/scriptaculous.js
deleted file mode 100644
index c0fa2ed..0000000
--- a/groovy/modules/grails/src/war/js/scriptaculous.js
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-var Scriptaculous = {
-  Version: '1.5.0',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
-  },
-  load: function() {
-    if((typeof Prototype=='undefined') ||
-      parseFloat(Prototype.Version.split(".")[0] + "." +
-                 Prototype.Version.split(".")[1]) < 1.4)
-      throw("script.aculo.us requires the Prototype JavaScript framework >= 1.4.0");
-    var scriptTags = document.getElementsByTagName("script");
-    for(var i=0;i<scriptTags.length;i++) {
-      if(scriptTags[i].src && scriptTags[i].src.match(/scriptaculous\.js(\?.*)?$/)) {
-        var path = scriptTags[i].src.replace(/scriptaculous\.js(\?.*)?$/,'');
-        this.require(path + 'builder.js');
-        this.require(path + 'effects.js');
-        this.require(path + 'dragdrop.js');
-        this.require(path + 'controls.js');
-        this.require(path + 'slider.js');
-        break;
-      }
-    }
-  }
-}
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/slider.js b/groovy/modules/grails/src/war/js/slider.js
deleted file mode 100644
index fdd0bcc..0000000
--- a/groovy/modules/grails/src/war/js/slider.js
+++ /dev/null
@@ -1,283 +0,0 @@
-// Copyright (c) 2005 Marty Haught, Thomas Fuchs 
-//
-// See http://script.aculo.us for more info
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-if(!Control) var Control = {};
-Control.Slider = Class.create();
-
-// options:
-//  axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-//  onChange(value)
-//  onSlide(value)
-Control.Slider.prototype = {
-  initialize: function(handle, track, options) {
-    var slider = this;
-    
-    if(handle instanceof Array) {
-      this.handles = handle.collect( function(e) { return $(e) });
-    } else {
-      this.handles = [$(handle)];
-    }
-    
-    this.track   = $(track);
-    this.options = options || {};
-
-    this.axis      = this.options.axis || 'horizontal';
-    this.increment = this.options.increment || 1;
-    this.step      = parseInt(this.options.step || '1');
-    this.range     = this.options.range || $R(0,1);
-    
-    this.value     = 0; // assure backwards compat
-    this.values    = this.handles.map( function() { return 0 });
-    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
-    this.options.startSpan = $(this.options.startSpan || null);
-    this.options.endSpan   = $(this.options.endSpan || null);
-
-    this.restricted = this.options.restricted || false;
-
-    this.maximum   = this.options.maximum || this.range.end;
-    this.minimum   = this.options.minimum || this.range.start;
-
-    // Will be used to align the handle onto the track, if necessary
-    this.alignX = parseInt(this.options.alignX || '0');
-    this.alignY = parseInt(this.options.alignY || '0');
-    
-    this.trackLength = this.maximumOffset() - this.minimumOffset();
-    this.handleLength = this.isVertical() ? this.handles[0].offsetHeight : this.handles[0].offsetWidth;
-
-    this.active   = false;
-    this.dragging = false;
-    this.disabled = false;
-
-    if(this.options.disabled) this.setDisabled();
-
-    // Allowed values array
-    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
-    if(this.allowedValues) {
-      this.minimum = this.allowedValues.min();
-      this.maximum = this.allowedValues.max();
-    }
-
-    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
-    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-    this.eventMouseMove = this.update.bindAsEventListener(this);
-
-    // Initialize handles in reverse (make sure first handle is active)
-    this.handles.each( function(h,i) {
-      i = slider.handles.length-1-i;
-      slider.setValue(parseFloat(
-        (slider.options.sliderValue instanceof Array ? 
-          slider.options.sliderValue[i] : slider.options.sliderValue) || 
-         slider.range.start), i);
-      Element.makePositioned(h); // fix IE
-      Event.observe(h, "mousedown", slider.eventMouseDown);
-    });
-    
-    Event.observe(this.track, "mousedown", this.eventMouseDown);
-    Event.observe(document, "mouseup", this.eventMouseUp);
-    Event.observe(document, "mousemove", this.eventMouseMove);
-    
-    this.initialized = true;
-  },
-  dispose: function() {
-    var slider = this;    
-    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
-    Event.stopObserving(document, "mouseup", this.eventMouseUp);
-    Event.stopObserving(document, "mousemove", this.eventMouseMove);
-    this.handles.each( function(h) {
-      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
-    });
-  },
-  setDisabled: function(){
-    this.disabled = true;
-  },
-  setEnabled: function(){
-    this.disabled = false;
-  },  
-  getNearestValue: function(value){
-    if(this.allowedValues){
-      if(value >= this.allowedValues.max()) return(this.allowedValues.max());
-      if(value <= this.allowedValues.min()) return(this.allowedValues.min());
-      
-      var offset = Math.abs(this.allowedValues[0] - value);
-      var newValue = this.allowedValues[0];
-      this.allowedValues.each( function(v) {
-        var currentOffset = Math.abs(v - value);
-        if(currentOffset <= offset){
-          newValue = v;
-          offset = currentOffset;
-        } 
-      });
-      return newValue;
-    }
-    if(value > this.range.end) return this.range.end;
-    if(value < this.range.start) return this.range.start;
-    return value;
-  },
-  setValue: function(sliderValue, handleIdx){
-    if(!this.active) {
-      this.activeHandle    = this.handles[handleIdx];
-      this.activeHandleIdx = handleIdx;
-      this.updateStyles();
-    }
-    handleIdx = handleIdx || this.activeHandleIdx || 0;
-    if(this.initialized && this.restricted) {
-      if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
-        sliderValue = this.values[handleIdx-1];
-      if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
-        sliderValue = this.values[handleIdx+1];
-    }
-    sliderValue = this.getNearestValue(sliderValue);
-    this.values[handleIdx] = sliderValue;
-    this.value = this.values[0]; // assure backwards compat
-    
-    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = 
-      this.translateToPx(sliderValue);
-    
-    this.drawSpans();
-    if(!this.dragging || !this.event) this.updateFinished();
-  },
-  setValueBy: function(delta, handleIdx) {
-    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, 
-      handleIdx || this.activeHandleIdx || 0);
-  },
-  translateToPx: function(value) {
-    return Math.round(
-      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * 
-      (value - this.range.start)) + "px";
-  },
-  translateToValue: function(offset) {
-    return ((offset/(this.trackLength-this.handleLength) * 
-      (this.range.end-this.range.start)) + this.range.start);
-  },
-  getRange: function(range) {
-    var v = this.values.sortBy(Prototype.K); 
-    range = range || 0;
-    return $R(v[range],v[range+1]);
-  },
-  minimumOffset: function(){
-    return(this.isVertical() ? this.alignY : this.alignX);
-  },
-  maximumOffset: function(){
-    return(this.isVertical() ?
-      this.track.offsetHeight - this.alignY : this.track.offsetWidth - this.alignX);
-  },  
-  isVertical:  function(){
-    return (this.axis == 'vertical');
-  },
-  drawSpans: function() {
-    var slider = this;
-    if(this.spans)
-      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
-    if(this.options.startSpan)
-      this.setSpan(this.options.startSpan,
-        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
-    if(this.options.endSpan)
-      this.setSpan(this.options.endSpan, 
-        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
-  },
-  setSpan: function(span, range) {
-    if(this.isVertical()) {
-      span.style.top = this.translateToPx(range.start);
-      span.style.height = this.translateToPx(range.end - range.start);
-    } else {
-      span.style.left = this.translateToPx(range.start);
-      span.style.width = this.translateToPx(range.end - range.start);
-    }
-  },
-  updateStyles: function() {
-    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
-    Element.addClassName(this.activeHandle, 'selected');
-  },
-  startDrag: function(event) {
-    if(Event.isLeftClick(event)) {
-      if(!this.disabled){
-        this.active = true;
-        
-        var handle = Event.element(event);
-        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
-        if(handle==this.track) {
-          var offsets  = Position.cumulativeOffset(this.track); 
-          this.event = event;
-          this.setValue(this.translateToValue( 
-           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
-          ));
-          var offsets  = Position.cumulativeOffset(this.activeHandle);
-          this.offsetX = (pointer[0] - offsets[0]);
-          this.offsetY = (pointer[1] - offsets[1]);
-        } else {
-          // find the handle (prevents issues with Safari)
-          while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
-            handle = handle.parentNode;
-        
-          this.activeHandle    = handle;
-          this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
-          this.updateStyles();
-        
-          var offsets  = Position.cumulativeOffset(this.activeHandle);
-          this.offsetX = (pointer[0] - offsets[0]);
-          this.offsetY = (pointer[1] - offsets[1]);
-        }
-      }
-      Event.stop(event);
-    }
-  },
-  update: function(event) {
-   if(this.active) {
-      if(!this.dragging) this.dragging = true;
-      this.draw(event);
-      // fix AppleWebKit rendering
-      if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-      Event.stop(event);
-   }
-  },
-  draw: function(event) {
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    var offsets = Position.cumulativeOffset(this.track);
-    pointer[0] -= this.offsetX + offsets[0];
-    pointer[1] -= this.offsetY + offsets[1];
-    this.event = event;
-    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
-    if(this.initialized && this.options.onSlide)
-      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
-  },
-  endDrag: function(event) {
-    if(this.active && this.dragging) {
-      this.finishDrag(event, true);
-      Event.stop(event);
-    }
-    this.active = false;
-    this.dragging = false;
-  },  
-  finishDrag: function(event, success) {
-    this.active = false;
-    this.dragging = false;
-    this.updateFinished();
-  },
-  updateFinished: function() {
-    if(this.initialized && this.options.onChange) 
-      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
-    this.event = null;
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/war/js/unittest.js b/groovy/modules/grails/src/war/js/unittest.js
deleted file mode 100644
index 20941ad..0000000
--- a/groovy/modules/grails/src/war/js/unittest.js
+++ /dev/null
@@ -1,363 +0,0 @@
-// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005 Jon Tirsen (http://www.tirsen.com)
-//           (c) 2005 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// See scriptaculous.js for full license.
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
-  var options = Object.extend({
-    pointerX: 0,
-    pointerY: 0,
-    buttons: 0
-  }, arguments[2] || {});
-  var oEvent = document.createEvent("MouseEvents");
-  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
-    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
-    false, false, false, false, 0, $(element));
-  
-  if(this.mark) Element.remove(this.mark);
-  this.mark = document.createElement('div');
-  this.mark.appendChild(document.createTextNode(" "));
-  document.body.appendChild(this.mark);
-  this.mark.style.position = 'absolute';
-  this.mark.style.top = options.pointerY + "px";
-  this.mark.style.left = options.pointerX + "px";
-  this.mark.style.width = "5px";
-  this.mark.style.height = "5px;";
-  this.mark.style.borderTop = "1px solid red;"
-  this.mark.style.borderLeft = "1px solid red;"
-  
-  if(this.step)
-    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-  
-  $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
-  var options = Object.extend({
-    ctrlKey: false,
-    altKey: false,
-    shiftKey: false,
-    metaKey: false,
-    keyCode: 0,
-    charCode: 0
-  }, arguments[2] || {});
-
-  var oEvent = document.createEvent("KeyEvents");
-  oEvent.initKeyEvent(eventName, true, true, window, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
-    options.keyCode, options.charCode );
-  $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
-  for(var i=0; i<command.length; i++) {
-    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
-  }
-};
-
-var Test = {}
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = function(obj) {
-  var info = [];
-
-  if(typeof obj=="string" || 
-     typeof obj=="number") {
-    return obj;
-  } else {
-    for(property in obj)
-      if(typeof obj[property]!="function")
-        info.push(property + ' => ' + 
-          (typeof obj[property] == "string" ?
-            '"' + obj[property] + '"' :
-            obj[property]));
-  }
-
-  return ("'" + obj + "' #" + typeof obj + 
-    ": {" + info.join(", ") + "}");
-}
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
-  initialize: function(log) {
-    this.log = $(log);
-    if (this.log) {
-      this._createLogTable();
-    }
-  },
-  start: function(testName) {
-    if (!this.log) return;
-    this.testName = testName;
-    this.lastLogLine = document.createElement('tr');
-    this.statusCell = document.createElement('td');
-    this.nameCell = document.createElement('td');
-    this.nameCell.appendChild(document.createTextNode(testName));
-    this.messageCell = document.createElement('td');
-    this.lastLogLine.appendChild(this.statusCell);
-    this.lastLogLine.appendChild(this.nameCell);
-    this.lastLogLine.appendChild(this.messageCell);
-    this.loglines.appendChild(this.lastLogLine);
-  },
-  finish: function(status, summary) {
-    if (!this.log) return;
-    this.lastLogLine.className = status;
-    this.statusCell.innerHTML = status;
-    this.messageCell.innerHTML = this._toHTML(summary);
-  },
-  message: function(message) {
-    if (!this.log) return;
-    this.messageCell.innerHTML = this._toHTML(message);
-  },
-  summary: function(summary) {
-    if (!this.log) return;
-    this.logsummary.innerHTML = this._toHTML(summary);
-  },
-  _createLogTable: function() {
-    this.log.innerHTML =
-    '<div id="logsummary"></div>' +
-    '<table id="logtable">' +
-    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
-    '<tbody id="loglines"></tbody>' +
-    '</table>';
-    this.logsummary = $('logsummary')
-    this.loglines = $('loglines');
-  },
-  _toHTML: function(txt) {
-    return txt.escapeHTML().replace(/\n/g,"<br/>");
-  }
-}
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
-  initialize: function(testcases) {
-    this.options = Object.extend({
-      testLog: 'testlog'
-    }, arguments[1] || {});
-    this.options.resultsURL = this.parseResultsURLQueryParameter();
-    if (this.options.testLog) {
-      this.options.testLog = $(this.options.testLog) || null;
-    }
-    if(this.options.tests) {
-      this.tests = [];
-      for(var i = 0; i < this.options.tests.length; i++) {
-        if(/^test/.test(this.options.tests[i])) {
-          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
-        }
-      }
-    } else {
-      if (this.options.test) {
-        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
-      } else {
-        this.tests = [];
-        for(var testcase in testcases) {
-          if(/^test/.test(testcase)) {
-            this.tests.push(new Test.Unit.Testcase(testcase, testcases[testcase], testcases["setup"], testcases["teardown"]));
-          }
-        }
-      }
-    }
-    this.currentTest = 0;
-    this.logger = new Test.Unit.Logger(this.options.testLog);
-    setTimeout(this.runTests.bind(this), 1000);
-  },
-  parseResultsURLQueryParameter: function() {
-    return window.location.search.parseQuery()["resultsURL"];
-  },
-  // Returns:
-  //  "ERROR" if there was an error,
-  //  "FAILURE" if there was a failure, or
-  //  "SUCCESS" if there was neither
-  getResult: function() {
-    var hasFailure = false;
-    for(var i=0;i<this.tests.length;i++) {
-      if (this.tests[i].errors > 0) {
-        return "ERROR";
-      }
-      if (this.tests[i].failures > 0) {
-        hasFailure = true;
-      }
-    }
-    if (hasFailure) {
-      return "FAILURE";
-    } else {
-      return "SUCCESS";
-    }
-  },
-  postResults: function() {
-    if (this.options.resultsURL) {
-      new Ajax.Request(this.options.resultsURL, 
-        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
-    }
-  },
-  runTests: function() {
-    var test = this.tests[this.currentTest];
-    if (!test) {
-      // finished!
-      this.postResults();
-      this.logger.summary(this.summary());
-      return;
-    }
-    if(!test.isWaiting) {
-      this.logger.start(test.name);
-    }
-    test.run();
-    if(test.isWaiting) {
-      this.logger.message("Waiting for " + test.timeToWait + "ms");
-      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
-    } else {
-      this.logger.finish(test.status(), test.summary());
-      this.currentTest++;
-      // tail recursive, hopefully the browser will skip the stackframe
-      this.runTests();
-    }
-  },
-  summary: function() {
-    var assertions = 0;
-    var failures = 0;
-    var errors = 0;
-    var messages = [];
-    for(var i=0;i<this.tests.length;i++) {
-      assertions +=   this.tests[i].assertions;
-      failures   +=   this.tests[i].failures;
-      errors     +=   this.tests[i].errors;
-    }
-    return (
-      this.tests.length + " tests, " + 
-      assertions + " assertions, " + 
-      failures   + " failures, " +
-      errors     + " errors");
-  }
-}
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
-  initialize: function() {
-    this.assertions = 0;
-    this.failures   = 0;
-    this.errors     = 0;
-    this.messages   = [];
-  },
-  summary: function() {
-    return (
-      this.assertions + " assertions, " + 
-      this.failures   + " failures, " +
-      this.errors     + " errors" + "\n" +
-      this.messages.join("\n"));
-  },
-  pass: function() {
-    this.assertions++;
-  },
-  fail: function(message) {
-    this.failures++;
-    this.messages.push("Failure: " + message);
-  },
-  error: function(error) {
-    this.errors++;
-    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
-  },
-  status: function() {
-    if (this.failures > 0) return 'failed';
-    if (this.errors > 0) return 'error';
-    return 'passed';
-  },
-  assert: function(expression) {
-    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
-    try { expression ? this.pass() : 
-      this.fail(message); }
-    catch(e) { this.error(e); }
-  },
-  assertEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEqual";
-    try { (expected == actual) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertNotEqual: function(expected, actual) {
-    var message = arguments[2] || "assertNotEqual";
-    try { (expected != actual) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertNull: function(obj) {
-    var message = arguments[1] || 'assertNull'
-    try { (obj==null) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertHidden: function(element) {
-    var message = arguments[1] || 'assertHidden';
-    this.assertEqual("none", element.style.display, message);
-  },
-  assertNotNull: function(object) {
-    var message = arguments[1] || 'assertNotNull';
-    this.assert(object != null, message);
-  },
-  assertInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertInstanceOf';
-    try { 
-      (actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was not an instance of the expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertNotInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertNotInstanceOf';
-    try { 
-      !(actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was an instance of the not expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  _isVisible: function(element) {
-    element = $(element);
-    if(!element.parentNode) return true;
-    this.assertNotNull(element);
-    if(element.style && Element.getStyle(element, 'display') == 'none')
-      return false;
-    
-    return this._isVisible(element.parentNode);
-  },
-  assertNotVisible: function(element) {
-    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
-  },
-  assertVisible: function(element) {
-    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
-  }
-}
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
-  initialize: function(name, test, setup, teardown) {
-    Test.Unit.Assertions.prototype.initialize.bind(this)();
-    this.name           = name;
-    this.test           = test || function() {};
-    this.setup          = setup || function() {};
-    this.teardown       = teardown || function() {};
-    this.isWaiting      = false;
-    this.timeToWait     = 1000;
-  },
-  wait: function(time, nextPart) {
-    this.isWaiting = true;
-    this.test = nextPart;
-    this.timeToWait = time;
-  },
-  run: function() {
-    try {
-      try {
-        if (!this.isWaiting) this.setup.bind(this)();
-        this.isWaiting = false;
-        this.test.bind(this)();
-      } finally {
-        if(!this.isWaiting) {
-          this.teardown.bind(this)();
-        }
-      }
-    }
-    catch(e) { this.error(e); }
-  }
-});
\ No newline at end of file
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/CurrencyEditor.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/CurrencyEditor.java
deleted file mode 100644
index cd17f9d..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/CurrencyEditor.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.binding;
-
-import org.apache.commons.lang.StringUtils;
-
-import java.beans.PropertyEditorSupport;
-import java.util.Currency;
-
-/**
- * A Property editor for converting instances of java.util.Currency
- * 
- * @author Graeme Rocher
- * @since 14-Feb-2006
- */
-public class CurrencyEditor extends PropertyEditorSupport {
-    public void setAsText(String text) throws IllegalArgumentException {
-        if(StringUtils.isBlank(text)) {
-            setValue(null);
-        }
-        try {
-            setValue(Currency.getInstance(text));
-        } catch (IllegalArgumentException e) {
-            // ignore and just set to null
-            setValue(null);
-        }
-    }
-
-    public String getAsText() {
-        Currency c = (Currency)getValue();
-        if(c == null) {
-            return "";
-        }
-        else {
-            return c.getCurrencyCode();
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinder.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinder.java
deleted file mode 100644
index 6f61683..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinder.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.binding;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.InvalidPropertyException;
-import org.springframework.beans.MutablePropertyValues;
-import org.springframework.beans.PropertyValue;
-import org.springframework.beans.propertyeditors.CustomDateEditor;
-import org.springframework.beans.propertyeditors.LocaleEditor;
-import org.springframework.web.bind.ServletRequestDataBinder;
-import org.springframework.web.bind.ServletRequestParameterPropertyValues;
-import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
-import org.springframework.web.multipart.support.StringMultipartFileEditor;
-import org.springframework.web.servlet.support.RequestContextUtils;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import java.text.DateFormat;
-import java.util.*;
-
-/**
- * A data binder that handles binding dates that are specified with a "struct"-like syntax in request parameters.
- * For example for a set of fields defined as:
- *
- * <code>
-     * <input type="hidden" name="myDate_year" value="2005" />
-     * <input type="hidden" name="myDate_month" value="6" />
-     * <input type="hidden" name="myDate_day" value="12" />
-     * <input type="hidden" name="myDate_hour" value="13" />
-     * <input type="hidden" name="myDate_minute" value="45" />
- * </code>
- *
- * This would set the property "myDate" of type java.util.Date with the specified values.
- *
- * @author Graeme Rocher
- * @since 05-Jan-2006
- */
-public class GrailsDataBinder extends ServletRequestDataBinder {
-    private static final Log LOG = LogFactory.getLog(GrailsDataBinder.class);
-    /**
-     * Create a new GrailsDataBinder instance.
-     *
-     * @param target     target object to bind onto
-     * @param objectName objectName of the target object
-     */
-    public GrailsDataBinder(Object target, String objectName) {
-        super(target, objectName);
-    }
-
-    /**
-     * Utility method for creating a GrailsDataBinder instance
-     *
-     * @param target
-     * @param objectName
-     * @param request
-     * @return A GrailsDataBinder instance
-     */
-    public static GrailsDataBinder createBinder(Object target, String objectName, HttpServletRequest request) {
-        GrailsDataBinder binder = createBinder(target,objectName);
-        binder.registerCustomEditor( Date.class, new CustomDateEditor(DateFormat.getDateInstance( DateFormat.SHORT, RequestContextUtils.getLocale(request) ),true) );
-        return binder;
-    }
-
-    /**
-     * Utility method for creating a GrailsDataBinder instance
-     *
-     * @param target
-     * @param objectName
-     * @return A GrailsDataBinder instance
-     */
-    public static GrailsDataBinder createBinder(Object target, String objectName) {
-        GrailsDataBinder binder = new GrailsDataBinder(target,objectName);
-        binder.registerCustomEditor( byte[].class, new ByteArrayMultipartFileEditor());
-        binder.registerCustomEditor( String.class, new StringMultipartFileEditor());
-        binder.registerCustomEditor( Currency.class, new CurrencyEditor());
-        binder.registerCustomEditor( Locale.class, new LocaleEditor());
-        binder.registerCustomEditor( TimeZone.class, new TimeZoneEditor());
-        return binder;
-    }
-
-    public void bind(ServletRequest request) {
-        MutablePropertyValues mpvs = new ServletRequestParameterPropertyValues(request);
-        checkMultipartFiles(request, mpvs);
-
-        checkStructuredDateDefinitions(request,mpvs);
-        super.doBind(mpvs);
-    }
-
-    private void checkStructuredDateDefinitions(ServletRequest request, MutablePropertyValues mpvs) {
-
-        PropertyValue[] pvs = mpvs.getPropertyValues();
-        for (int i = 0; i < pvs.length; i++) {
-            PropertyValue pv = pvs[i];
-
-            try {
-                String propertyName = pv.getName();
-                Class type = super.getBeanWrapper().getPropertyType(propertyName);
-                // if its a date check that it hasn't got structured parameters in the request
-                // this is used as an alternative to specifying the date format
-                if(type == Date.class) {
-                    try {
-                        int year = Integer.parseInt(request.getParameter(propertyName + "_year"));
-                        int month = Integer.parseInt(request.getParameter(propertyName + "_month"));
-                        int day = Integer.parseInt(request.getParameter(propertyName + "_day"));
-                        int hour = Integer.parseInt(request.getParameter(propertyName + "_hour"));
-                        int minute = Integer.parseInt(request.getParameter(propertyName + "_minute"));
-
-                        Calendar c = new GregorianCalendar(year,month - 1,day,hour,minute);
-                        mpvs.setPropertyValueAt(new PropertyValue(propertyName,c.getTime()),i);
-                    }
-                    catch(NumberFormatException nfe) {
-                         LOG.warn("Unable to parse structured date from request for date ["+propertyName+"]",nfe);
-                    }
-                }
-            }
-            catch(InvalidPropertyException ipe) {
-                // ignore
-            }
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/TimeZoneEditor.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/TimeZoneEditor.java
deleted file mode 100644
index cd675b2..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/binding/TimeZoneEditor.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.binding;
-
-import org.apache.commons.lang.StringUtils;
-
-import java.util.Currency;
-import java.util.TimeZone;
-import java.beans.PropertyEditorSupport;
-
-/**
- * A Property editor for converting instances of java.util.TimeZone
- *
- * @author Graeme Rocher
- * @since 20-Feb-2006
- */
-public class TimeZoneEditor  extends PropertyEditorSupport  {
-    public void setAsText(String text) throws IllegalArgumentException {
-        if(StringUtils.isBlank(text)) {
-            setValue(null);
-        }
-        try {
-            setValue(TimeZone.getTimeZone(text));
-        } catch (IllegalArgumentException e) {
-            // ignore and just set to null
-            setValue(null);
-        }
-    }
-
-    public String getAsText() {
-        TimeZone tz = (TimeZone)getValue();
-        if(tz == null) {
-            return "";
-        }
-        else {
-            return tz.getID();
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsExceptionResolver.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsExceptionResolver.java
deleted file mode 100644
index 4e32544..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsExceptionResolver.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.errors;
-
-import org.springframework.web.context.ServletContextAware;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- *  Exception resolver that wraps any runtime exceptions with a GrailsWrappedException instance
- * 
- * @author Graeme Rocher
- * @since 22 Dec, 2005
- */
-public class GrailsExceptionResolver  extends SimpleMappingExceptionResolver implements ServletContextAware {
-    private ServletContext servletContext;
-
-    /* (non-Javadoc)
-      * @see org.springframework.web.servlet.handler.SimpleMappingExceptionResolver#resolveException(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)
-      */
-    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-        ModelAndView mv = super.resolveException(request, response, handler, ex);
-        GrailsWrappedRuntimeException gwrex = new GrailsWrappedRuntimeException(servletContext,ex);
-        mv.addObject("exception",gwrex);
-        return mv;
-    }
-
-
-    public void setServletContext(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsWrappedRuntimeException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsWrappedRuntimeException.java
deleted file mode 100644
index 8146679..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/errors/GrailsWrappedRuntimeException.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.errors;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-
-import javax.servlet.ServletContext;
-import java.io.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- *  An exception that wraps a Grails RuntimeException and attempts to extract more relevent diagnostic messages from the stack trace
- * 
- * @author Graeme Rocher
- * @since 22 Dec, 2005
- */
-public class GrailsWrappedRuntimeException extends GrailsException {
-
-    private static final Pattern PARSE_DETAILS_STEP1 = Pattern.compile("\\((\\w+)\\.groovy:(\\d+)\\)");
-    private static final Pattern PARSE_DETAILS_STEP2 = Pattern.compile("at\\s{1}(\\w+)\\$_closure\\d+\\.doCall\\(\\1:(\\d+)\\)");
-    public static final String URL_PREFIX = "/WEB-INF/grails-app/";
-    private static final Log LOG  = LogFactory.getLog(GrailsWrappedRuntimeException.class);
-    private Throwable t;
-    private String className = "Unknown";
-    private int lineNumber = - 1;
-    private String stackTrace;
-    private String[] codeSnippet = new String[0];
-
-
-    /**
-     * @param servletContext
-     * @param t
-     */
-    public GrailsWrappedRuntimeException(ServletContext servletContext, Throwable t) {
-        super(t.getMessage(), t);
-        this.t = t;
-
-        StringWriter sw  = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
-        this.t.printStackTrace(pw);
-        this.stackTrace = sw.toString();
-
-        Matcher m1 = PARSE_DETAILS_STEP1.matcher(stackTrace);
-        Matcher m2 = PARSE_DETAILS_STEP2.matcher(stackTrace);
-        try {
-            if(m1.find()) {
-                this.className = m1.group(1);
-                this.lineNumber = Integer.parseInt(m1.group(2));
-            }
-            else if(m2.find()) {
-                this.className = m2.group(1);
-                this.lineNumber = Integer.parseInt(m2.group(2));
-            }
-        }
-        catch(NumberFormatException nfex) {
-            // ignore
-        }
-
-        LineNumberReader reader = null;
-        try {
-            if(getLineNumber() > -1) {
-                String fileName = this.className.replace('.', '/') + ".groovy";
-                String urlPrefix = URL_PREFIX;
-                if(GrailsClassUtils.isControllerClass(className) || GrailsClassUtils.isPageFlowClass(className)) {
-                    urlPrefix += "/controllers/";
-                }
-                else if(GrailsClassUtils.isTagLibClass(className)) {
-                    urlPrefix += "/taglib/";
-                }
-                else if(GrailsClassUtils.isService(className)) {
-                   urlPrefix += "/services/";
-                }
-                InputStream in = servletContext.getResourceAsStream(urlPrefix + fileName);
-                if(in != null) {
-                    reader = new LineNumberReader(new InputStreamReader( in ));
-                    String currentLine = reader.readLine();
-                    StringBuffer buf = new StringBuffer();
-                    while(currentLine != null) {
-
-                        int currentLineNumber = reader.getLineNumber();
-                        if(currentLineNumber == this.lineNumber) {
-                            buf.append(currentLineNumber)
-                               .append(": ")
-                               .append(currentLine)
-                               .append("\n");
-                        }
-                        else if(currentLineNumber == this.lineNumber + 1) {
-                            buf.append(currentLineNumber)
-                               .append(": ")
-                               .append(currentLine);
-                            break;
-                        }
-                        currentLine = reader.readLine();
-                    }
-                    this.codeSnippet = buf.toString().split("\n");
-                }
-            }
-        }
-        catch (IOException e) {
-            LOG.warn("[GrailsWrappedRuntimeException] I/O error reading line diagnostics: " + e.getMessage(), e);
-        }
-        finally {
-            if(reader != null)
-                try {
-                    reader.close();
-                } catch (IOException e) {
-                    // ignore
-                }
-        }
-    }
-
-    /**
-     * @return Returns the line.
-     */
-    public String[] getCodeSnippet() {
-        return this.codeSnippet;
-    }
-
-    /**
-     * @return Returns the className.
-     */
-    public String getClassName() {
-        return className;
-    }
-
-    /**
-     * @return Returns the lineNumber.
-     */
-    public int getLineNumber() {
-        return lineNumber;
-    }
-
-    /**
-     * @return Returns the stackTrace.
-     */
-    public String getStackTraceText() {
-        return stackTrace;
-    }
-
-    /* (non-Javadoc)
-      * @see groovy.lang.GroovyRuntimeException#getMessage()
-      */
-    public String getMessage() {
-        return t.getMessage();
-    }
-
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerMethod.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerMethod.java
deleted file mode 100644
index afb5b74..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerMethod.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * An abstract class for dynamic controller methods to implement
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public abstract class AbstractDynamicControllerMethod extends
-        AbstractDynamicMethodInvocation {
-
-    protected HttpServletRequest request;
-    protected HttpServletResponse response;
-
-    public AbstractDynamicControllerMethod(String methodName,HttpServletRequest request, HttpServletResponse response) {
-        super(methodName);
-        this.request = request;
-        this.response = response;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerProperty.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerProperty.java
deleted file mode 100644
index b98aa24..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/AbstractDynamicControllerProperty.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicProperty;
-/**
- * An abstract class for dynamic controller properties to implement
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public abstract class AbstractDynamicControllerProperty
-	extends AbstractDynamicProperty
-	{
-
-	protected HttpServletRequest request;
-	protected HttpServletResponse response;
-
-	public AbstractDynamicControllerProperty(String propertyName,HttpServletRequest request, HttpServletResponse response) {
-		super(propertyName);
-		this.request = request;
-		this.response = response;
-	}
-
-	public abstract Object get(Object object);
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/BindDynamicMethod.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/BindDynamicMethod.java
deleted file mode 100644
index 4b31a28..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/BindDynamicMethod.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.MissingMethodException;
-import org.codehaus.groovy.grails.web.binding.GrailsDataBinder;
-import org.springframework.beans.MutablePropertyValues;
-import org.springframework.beans.PropertyValues;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
-
-/**
- * A dynamic method present in controllers allowing data binding from a map to a target instance. Example:
- *
- * <code>
- *         def a = new Account()
- *         bindData( a, this.params )
- * </code>
- *
- * @author Graeme Rocher
- * @since 10-Jan-2006
- */
-public class BindDynamicMethod extends AbstractDynamicControllerMethod {
-    public static final String METHOD_SIGNATURE = "bindData";
-
-    public BindDynamicMethod(HttpServletRequest request, HttpServletResponse response) {
-        super(METHOD_SIGNATURE, request, response);
-    }
-
-
-    public Object invoke(Object target, Object[] arguments) {
-        if(arguments.length < 2)
-            throw new MissingMethodException(METHOD_SIGNATURE, target.getClass(), arguments);
-        if(arguments[0] == null)
-            throw new IllegalArgumentException("Argument [target] is required by method [bind] on class ["+target.getClass()+"]");
-
-        Object targetObject = arguments[0];
-        Object bindParams = arguments[1];
-
-        GrailsDataBinder dataBinder;
-        if(bindParams instanceof GrailsParameterMap) {
-            GrailsParameterMap parameterMap = (GrailsParameterMap)bindParams;
-            HttpServletRequest request = parameterMap.getRequest();
-            dataBinder = GrailsDataBinder.createBinder(targetObject, targetObject.getClass().getName(),request); 
-            dataBinder.bind(request);
-        }
-        else if(bindParams instanceof HttpServletRequest) {
-            dataBinder = GrailsDataBinder.createBinder(targetObject, targetObject.getClass().getName(),request);
-            dataBinder.bind((HttpServletRequest)arguments[1]);
-        }
-        else if(bindParams instanceof Map) {
-            dataBinder = new GrailsDataBinder(targetObject, targetObject.getClass().getName());
-            PropertyValues pv = new MutablePropertyValues((Map)bindParams);
-            dataBinder.bind(pv);
-        }
-        else {
-            dataBinder = GrailsDataBinder.createBinder(targetObject, targetObject.getClass().getName(),request);
-            dataBinder.bind(request);
-        }
-        return targetObject;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ChainDynamicMethod.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ChainDynamicMethod.java
deleted file mode 100644
index a68b116..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ChainDynamicMethod.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.FlashScope;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException;
-import org.springframework.validation.Errors;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Implements the "chain" Controller method for action chaining
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public class ChainDynamicMethod extends AbstractDynamicControllerMethod {
-
-    private static final Log LOG = LogFactory.getLog(ChainDynamicMethod.class);
-
-    public static final String METHOD_SIGNATURE = "chain";
-    public static final String ARGUMENT_CONTROLLER = "controller";
-    public static final String ARGUMENT_ACTION = "action";
-    public static final String ARGUMENT_ID = "id";
-    public static final String ARGUMENT_PARAMS = "params";
-    public static final String ARGUMENT_ERRORS = "errors";
-    public static final Object ARGUMENT_MODEL = "model";
-
-    static public final String PROPERTY_CHAIN_MODEL = "chainModel";
-
-    private GrailsControllerHelper helper;
-
-    public ChainDynamicMethod(GrailsControllerHelper helper, HttpServletRequest request, HttpServletResponse response) {
-        super(METHOD_SIGNATURE, request, response);
-        if(helper == null)
-            throw new IllegalStateException("Constructor argument 'helper' cannot be null");
-
-        this.helper = helper;
-    }
-
-    public Object invoke(Object target, Object[] arguments) {
-        if(arguments.length == 0)
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-
-        Object actionRef;
-        String controllerName;
-        Object id;
-        Map params;
-        Map model;
-        Errors errors;
-        GroovyObject controller = (GroovyObject)target;
-
-        if(arguments[0] instanceof Map) {
-            Map argMap = (Map)arguments[0];
-            actionRef = argMap.get(ARGUMENT_ACTION);
-            controllerName = (String)argMap.get(ARGUMENT_CONTROLLER);
-            id =  argMap.get(ARGUMENT_ID);
-            params = (Map)argMap.get(ARGUMENT_PARAMS);
-            model = (Map)argMap.get(ARGUMENT_MODEL);
-            errors = (Errors)argMap.get(ARGUMENT_ERRORS);
-        }
-        else {
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-        }
-        // place the chain model in flash scope
-        GrailsApplicationAttributes attrs = helper.getGrailsAttributes();
-        FlashScope fs = attrs.getFlashScope(request);
-        if(fs.containsKey(PROPERTY_CHAIN_MODEL)) {
-            Map chainModel = (Map)fs.get(PROPERTY_CHAIN_MODEL);
-            if(chainModel != null) {
-                chainModel.putAll(model);
-                model = chainModel;
-            }
-        }
-
-        fs.put(PROPERTY_CHAIN_MODEL, model);
-
-        // if there are errors add it to the list of errors
-        Errors controllerErrors = (Errors)controller.getProperty( ControllerDynamicMethods.ERRORS_PROPERTY );
-        if(controllerErrors != null) {
-            controllerErrors.addAllErrors(errors);
-        }
-        else {
-            controller.setProperty( ControllerDynamicMethods.ERRORS_PROPERTY, errors);
-        }
-
-        String actionName = null;
-        if(actionRef instanceof String) {
-           actionName = (String)actionRef;
-        }
-        else if(actionRef instanceof Closure) {
-            Closure c = (Closure)actionRef;
-            PropertyDescriptor prop = GrailsClassUtils.getPropertyDescriptorForValue(target,c);
-            if(prop != null) {
-                actionName = prop.getName();
-            }
-            else {
-                GrailsScaffolder scaffolder = helper.getScaffolderForController(target.getClass().getName());
-                if(scaffolder != null) {
-                        actionName = scaffolder.getActionName(c);
-                }
-            }
-        }
-
-        if(actionName != null) {
-            StringBuffer actualUri = new StringBuffer(attrs.getApplicationUri(request));
-            if(controllerName != null) {
-                actualUri.append('/')
-                         .append(controllerName);
-            }
-            else {
-                actualUri.append(attrs.getControllerUri(request));
-            }
-            actualUri.append('/')
-                     .append(actionName);
-            if(id != null) {
-                actualUri.append('/')
-                         .append(id);
-            }
-            if(params != null) {
-                actualUri.append('?');
-                for (Iterator i = params.keySet().iterator(); i.hasNext();) {
-                    Object name = i.next();
-                    actualUri.append(name)
-                             .append('=')
-                             .append(params.get(name));
-                    if(i.hasNext())
-                        actualUri.append('&');
-                }
-            }
-            if(LOG.isDebugEnabled()) {
-                LOG.debug("Dynamic method [chain] redirecting request to ["+actualUri+"]");
-            }
-
-            try {
-                response.sendRedirect(response.encodeRedirectURL(actualUri.toString()));
-            } catch (IOException e) {
-                throw new ControllerExecutionException("Error redirecting request for url ["+actualUri+"]: " + e.getMessage(),e);
-            }
-
-        }
-        else {
-            throw new ControllerExecutionException("Action not found in redirect for name ["+actionName+"]");
-        }
-
-        return null;
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ControllerDynamicMethods.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ControllerDynamicMethods.java
deleted file mode 100644
index 6f51460..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/ControllerDynamicMethods.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingPropertyException;
-import org.codehaus.groovy.grails.commons.GrailsControllerClass;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
-import org.codehaus.groovy.grails.commons.metaclass.GenericDynamicProperty;
-import org.codehaus.groovy.grails.commons.metaclass.GroovyDynamicMethodsInterceptor;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.web.servlet.GrailsHttpServletRequest;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.FlashScope;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.springframework.validation.Errors;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.IntrospectionException;
-/**
- * Adds dynamic methods and properties for Grails Controllers
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class ControllerDynamicMethods extends
-	GroovyDynamicMethodsInterceptor {
-
-	public static final String REQUEST_PROPERTY = "request";
-    public static final String SERVLET_CONTEXT = "servletContext";
-    public static final String FLASH_SCOPE_PROPERTY = "flash";
-    public static final String GRAILS_ATTRIBUTES = "grailsAttributes";
-    public static final String GRAILS_APPLICATION = "grailsApplication";
-    public static final String RESPONSE_PROPERTY = "response";
-    public static final String RENDER_VIEW_PROPERTY = "renderView";
-    public static final String ERRORS_PROPERTY = "errors";
-	public static final String HAS_ERRORS_METHOD = "hasErrors";
-	public static final String MODEL_AND_VIEW_PROPERTY = "modelAndView";
-    public static final String ACTION_URI_PROPERTY = "actionUri";
-    public static final String CONTROLLER_URI_PROPERTY = "controllerUri";
-
-
-    protected GrailsControllerClass controllerClass;
-	protected GrailsScaffolder scaffolder;
-	private boolean scaffolding;
-
-
-
-    public ControllerDynamicMethods( GroovyObject controller,GrailsControllerHelper helper,HttpServletRequest request, HttpServletResponse response) throws IntrospectionException {
-        super(controller);
-
-        this.controllerClass = helper.getControllerClassByName(controller.getClass().getName());
-
-        // add dynamic properties
-        addDynamicProperty(new GetParamsDynamicProperty(request,response));
-        addDynamicProperty(new GetSessionDynamicProperty(request,response));
-        addDynamicProperty(new GenericDynamicProperty(REQUEST_PROPERTY, HttpServletRequest.class,new GrailsHttpServletRequest( request,controller),true) );
-        addDynamicProperty(new GenericDynamicProperty(RESPONSE_PROPERTY, HttpServletResponse.class,response,true) );
-        addDynamicProperty(new GenericDynamicProperty(SERVLET_CONTEXT, ServletContext.class,helper.getServletContext(),true) );
-        addDynamicProperty(new GenericDynamicProperty(FLASH_SCOPE_PROPERTY, FlashScope.class,helper.getGrailsAttributes().getFlashScope(request),false) );
-        addDynamicProperty(new GenericDynamicProperty(ERRORS_PROPERTY, Errors.class, null, false));
-        addDynamicProperty(new GenericDynamicProperty(MODEL_AND_VIEW_PROPERTY, ModelAndView.class,null,false));
-        addDynamicProperty(new GenericDynamicProperty(GRAILS_ATTRIBUTES, GrailsApplicationAttributes.class,helper.getGrailsAttributes(),true));
-        addDynamicProperty(new GenericDynamicProperty(GRAILS_APPLICATION, GrailsApplication.class,helper.getGrailsAttributes().getGrailsApplication(),true));        
-        addDynamicProperty(new GenericDynamicProperty(ACTION_URI_PROPERTY,String.class,null,false));
-        addDynamicProperty(new GenericDynamicProperty(CONTROLLER_URI_PROPERTY,String.class,null,false));
-        addDynamicProperty(new GenericDynamicProperty(RENDER_VIEW_PROPERTY,Boolean.class, Boolean.TRUE,false));
-
-        // add dynamic methods
-        addDynamicMethodInvocation( new RedirectDynamicMethod(helper,request,response) );
-        addDynamicMethodInvocation( new ChainDynamicMethod(helper, request, response ) );
-        addDynamicMethodInvocation( new RenderDynamicMethod(helper,request,response));
-        addDynamicMethodInvocation( new BindDynamicMethod(request,response));
-
-        // the hasErrors() dynamic method that checks of there are any errors in the controller
-        addDynamicMethodInvocation( new AbstractDynamicMethodInvocation(HAS_ERRORS_METHOD) {
-            public Object invoke(Object target, Object[] arguments) {
-                GroovyObject controller = (GroovyObject)target;
-                Errors errors = (Errors)controller.getProperty(ERRORS_PROPERTY);
-                return Boolean.valueOf(errors.hasErrors());
-            }
-        });
-
-        this.scaffolding = this.controllerClass.isScaffolding();
-
-        // if the controller is scaffolding get the scaffolder, then loop through all the
-        // support actions by the scaffolder and register dynamic properties for those that don't exist
-        if(this.scaffolding) {
-            this.scaffolder = helper.getScaffolderForController(controllerClass.getFullName());
-            if(this.scaffolder == null) {
-                throw new IllegalStateException("Scaffolder is null when controller scaffold property is set to 'true'");
-            }
-            String[] scaffoldActions = this.scaffolder.getSupportedActionNames();
-            for (int i = 0; i < scaffoldActions.length; i++) {
-                try {
-                    controller.getProperty(scaffoldActions[i]);
-                }
-                catch(MissingPropertyException mpe) {
-                    addDynamicProperty(new GenericDynamicProperty(	scaffoldActions[i],
-                                                                    Closure.class,
-                                                                    scaffolder.getAction(controller,scaffoldActions[i]),
-                                                                    true));
-                }
-            }
-        }
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetParamsDynamicProperty.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetParamsDynamicProperty.java
deleted file mode 100644
index 235e736..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetParamsDynamicProperty.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-/**
- * A dynamic property that adds a "params" map to a controller for accessing request and controller parameters
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class GetParamsDynamicProperty extends AbstractDynamicControllerProperty {
-	public static final String PROPERTY_NAME = "params";
-	private GrailsParameterMap paramsMap;
-	
-	public GetParamsDynamicProperty(HttpServletRequest request, HttpServletResponse response) {
-		super(PROPERTY_NAME,request, response);
-		this.paramsMap = new GrailsParameterMap(request);
-	}
-
-	public Object get(Object object) {
-		return paramsMap;
-	}
-
-	public void set(Object object, Object newValue) {
-		throw new UnsupportedOperationException("Property '" + PROPERTY_NAME + "' of class '"+object.getClass()+"' is read-only!" ); 
-	}	
-
-	public void addParam(String paramName, Object paramValue) {
-		this.paramsMap.put( paramName,paramValue );
-	}	
-	public void addParams(Map params) {
-		this.paramsMap.putAll(params);
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetSessionDynamicProperty.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetSessionDynamicProperty.java
deleted file mode 100644
index 9cead23..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GetSessionDynamicProperty.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import java.util.*;
-/**
- * A dynamic property that adds a "session" map to a controller for accessing the Http Session
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class GetSessionDynamicProperty extends AbstractDynamicControllerProperty {
-
-	public static final String PROPERTY_NAME = "session";
-	private HttpSessionMap sessionMap;
-
-	public GetSessionDynamicProperty(HttpServletRequest request, HttpServletResponse response) {
-		super(PROPERTY_NAME, request, response);
-		this.sessionMap = new HttpSessionMap();
-	}
-
-	public Object get(Object object) {
-		return this.sessionMap;
-	}
-
-	public void set(Object object, Object newValue) {
-		throw new UnsupportedOperationException("Property '" + PROPERTY_NAME + "' of class '"+object.getClass()+"' is read-only!" );
-	}
-	
-	/**
-	 * Wraps the HttpSessoin in a map
-	 * 
-	 * @author Graeme Rocher
-	 * @since Oct 24, 2005
-	 */
-	private class HttpSessionMap implements Map {
-				
-		HttpSession session = null;
-		
-		public int size() {
-			if(session == null)
-				return 0;			
-			// count as there is no way to access size from the session directly
-			int count = 0;
-			for(Enumeration e = session.getAttributeNames();e.hasMoreElements();count++) {}
-			return count;
-		}
-
-		public boolean isEmpty() {
-            if(session == null)
-               return true;
-
-           Enumeration e = session.getAttributeNames();
-           return !e.hasMoreElements();
-       }
-
-		public boolean containsKey(Object key) {
-			if(!(key instanceof String))
-				throw new IllegalArgumentException("The 'session' property key '"+key+"' must be a string value");
-			
-			if(session == null || session.isNew())
-				return false;
-			
-			Object attr = session.getAttribute((String)key);
-			if(attr == null)
-				return false;
-			else
-				return true;
-		}
-
-		public boolean containsValue(Object value) {
-			if(session == null)
-				return false;
-			
-			for(Enumeration e = session.getAttributeNames();e.hasMoreElements();) {
-				String currentKey = (String)e.nextElement();
-				Object current = session.getAttribute(currentKey);
-				if(current.equals(value))
-					return true;
-			}			
-			return false;
-		}
-
-		public Object get(Object key) {
-			if(!(key instanceof String))
-				throw new IllegalArgumentException("The 'session' property key '"+key+"' must be a string value");
-			
-
-           if(session == null)
-               session = request.getSession(false);
-           if(session == null)
-               return null;
-
-			return session.getAttribute((String)key);
-		}
-
-		public Object put(Object key, Object value) {
-			if(!(key instanceof String))
-				throw new IllegalArgumentException("The 'session' property key '"+key+"' must be a string value");
-			
-			if(session == null)
-				session = request.getSession();
-			
-			session.setAttribute((String)key, value);
-			return value;
-		}
-
-		public Object remove(Object key) {
-			if(!(key instanceof String))
-				throw new IllegalArgumentException("The 'session' property key '"+key+"' must be a string value");
-
-			if(session == null)
-				return null;
-			
-			Object value = session.getAttribute((String)key);
-			if(value != null)
-				session.removeAttribute((String)key);
-			
-			return value;
-		}
-
-		public void putAll(Map sessionMap) {
-			for (Iterator i = sessionMap.keySet().iterator(); i.hasNext();) {
-				String currentKey = (String) i.next();
-				put(currentKey,sessionMap.get(currentKey));			
-			}
-		}
-
-		public void clear() {
-			if(session == null)
-				return;
-			
-			for(Enumeration e = session.getAttributeNames();e.hasMoreElements();) {
-				String current = (String)e.nextElement();
-				session.removeAttribute(current);
-			}
-		}
-
-		public Set keySet() {
-			if(session == null || session.isNew())
-				return Collections.EMPTY_SET;
-			
-			Set keySet = new HashSet();
-			for(Enumeration e = session.getAttributeNames();e.hasMoreElements();) {
-				String current = (String)e.nextElement();
-				keySet.add(current);
-			}			
-			return keySet;
-		}
-
-		public Collection values() {
-			throw new UnsupportedOperationException("Method 'values()' is not support by session Map." );
-		}
-
-		public Set entrySet() {
-			throw new UnsupportedOperationException("Method 'entrySet()' is not support by session Map." );
-		}		
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GrailsParameterMap.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GrailsParameterMap.java
deleted file mode 100644
index 87aeede..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/GrailsParameterMap.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-/**
- * A parameter map class that allows mixing of request parameters and controller parameters. If a controller
- * parameter is set with the same name as a request parameter the controller parameter value is retrieved.
- * 
- * @author Graeme Rocher
- * @since Oct 24, 2005
- */
-public class GrailsParameterMap implements Map {
-
-	private Map parameterMap;
-	private Map controllerParamsMap = new HashMap();
-	private HttpServletRequest request;
-		
-	public GrailsParameterMap(HttpServletRequest request) {
-		super();
-
-		this.request = request;
-		this.parameterMap = request.getParameterMap();
-	}
-
-	/**
-	 * @return Returns the request.
-	 */
-	public HttpServletRequest getRequest() {
-		return request;
-	}
-
-	public int size() {
-		return parameterMap.size() + controllerParamsMap.size();
-	}
-
-	public boolean isEmpty() {			
-		return (parameterMap.isEmpty() && controllerParamsMap.isEmpty());
-	}
-
-	public boolean containsKey(Object key) {
-		return (parameterMap.containsKey(key) || controllerParamsMap.containsKey(key));
-	}
-
-	public boolean containsValue(Object value) {
-		return (parameterMap.containsValue(value) || controllerParamsMap.containsValue(value));
-	}
-
-	public Object get(Object key) {
-		if(!(key instanceof String))
-				throw new IllegalArgumentException("Parameter key '"+key+"' must be a string value");
-		
-		if(controllerParamsMap.containsKey(key)) {
-			return controllerParamsMap.get(key);
-		}
-		else {
-			String[] valueArray = (String[])parameterMap.get(key);
-			if(valueArray == null)
-				return null;
-			
-			if(valueArray.length == 1) {
-				return valueArray[0];
-			}
-	
-			return parameterMap.get(key);
-		}
-	}
-
-	public Object put(Object key, Object value) {
-		if(!(key instanceof String))
-			throw new IllegalArgumentException("Parameter key '"+key+"' must be a string value");
-		
-		controllerParamsMap.put(key,value);
-		return value;
-	}
-
-	public Object remove(Object key) {
-		if(!(key instanceof String))
-			throw new IllegalArgumentException("Parameter key '"+key+"' must be a string value");
-
-		return controllerParamsMap.remove(key);
-	}
-
-	public void putAll(Map map) {
-		controllerParamsMap.putAll(map);
-	}
-
-	public void clear() {
-		controllerParamsMap.clear();
-	}
-
-	public Set keySet() {
-		Set keys = new HashSet(controllerParamsMap.keySet());
-		keys.addAll( parameterMap.keySet() );
-		return keys;
-	}
-
-	public Collection values() {
-		Set values = new HashSet(parameterMap.values());
-		values.addAll( controllerParamsMap.values() );
-		return values;
-	}
-
-	public Set entrySet() {
-		Set entries = new HashSet(parameterMap.entrySet());
-		entries.addAll( controllerParamsMap.entrySet() );
-		return entries;
-	}		
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RedirectDynamicMethod.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RedirectDynamicMethod.java
deleted file mode 100644
index c9aa193..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RedirectDynamicMethod.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException;
-import org.springframework.validation.Errors;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Implements the "redirect" Controller method for action redirection
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public class RedirectDynamicMethod extends AbstractDynamicControllerMethod {
-
-    public static final String METHOD_SIGNATURE = "redirect";
-    public static final String ARGUMENT_URI = "uri";
-    public static final String ARGUMENT_CONTROLLER = "controller";
-    public static final String ARGUMENT_ACTION = "action";
-    public static final String ARGUMENT_ID = "id";
-    public static final String ARGUMENT_PARAMS = "params";
-    public static final String ARGUMENT_ERRORS = "errors";
-
-    private GrailsControllerHelper helper;
-    private static final Log LOG = LogFactory.getLog(RedirectDynamicMethod.class);
-
-    public RedirectDynamicMethod(GrailsControllerHelper helper, HttpServletRequest request, HttpServletResponse response) {
-        super(METHOD_SIGNATURE, request, response);
-        if(helper == null)
-            throw new IllegalStateException("Constructor argument 'helper' cannot be null");
-
-        this.helper = helper;
-    }
-
-    public Object invoke(Object target, Object[] arguments) {
-        if(arguments.length == 0)
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-
-        Object actionRef = null;
-        String controllerName = null;
-        Object id = null;
-        Object uri = null;
-        Map params;
-        Errors errors;
-        GroovyObject controller = (GroovyObject)target;
-
-        if(arguments[0] instanceof Map) {
-            Map argMap = (Map)arguments[0];
-            if(argMap.containsKey(ARGUMENT_URI)) {
-                 uri = argMap.get(ARGUMENT_URI);
-            }
-            else {
-                actionRef = argMap.get(ARGUMENT_ACTION);
-                controllerName = (String)argMap.get(ARGUMENT_CONTROLLER);
-                id =  argMap.get(ARGUMENT_ID);
-            }
-            params = (Map)argMap.get(ARGUMENT_PARAMS);
-            errors = (Errors)argMap.get(ARGUMENT_ERRORS);
-        }
-        else {
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-        }
-        // if there are errors add it to the list of errors
-        Errors controllerErrors = (Errors)controller.getProperty( ControllerDynamicMethods.ERRORS_PROPERTY );
-        if(controllerErrors != null) {
-            controllerErrors.addAllErrors(errors);
-        }
-        else {
-            controller.setProperty( ControllerDynamicMethods.ERRORS_PROPERTY, errors);
-        }
-
-        String actionName = null;
-        if(actionRef instanceof String) {
-           actionName = (String)actionRef;
-        }
-        else if(actionRef instanceof Closure) {
-            Closure c = (Closure)actionRef;
-            PropertyDescriptor prop = GrailsClassUtils.getPropertyDescriptorForValue(target,c);
-            if(prop != null) {
-                actionName = prop.getName();
-            }
-            else {
-                GrailsScaffolder scaffolder = helper.getScaffolderForController(target.getClass().getName());
-                if(scaffolder != null) {
-                        actionName = scaffolder.getActionName(c);
-                }
-            }
-        }
-        String actualUri = null;
-
-        GrailsApplicationAttributes attrs = helper.getGrailsAttributes();
-
-        if(uri != null) {
-            actualUri = uri.toString();
-        }
-        else {
-            if(actionName != null) {
-                StringBuffer actualUriBuf = new StringBuffer(attrs.getApplicationUri(request));
-                if(controllerName != null) {
-                    actualUriBuf.append('/')
-                             .append(controllerName);
-                }
-                else {
-                    actualUriBuf.append(attrs.getControllerUri(request));
-                }
-                actualUriBuf.append('/')
-                         .append(actionName);
-                if(id != null) {
-                    actualUriBuf.append('/')
-                             .append(id);
-                }
-                if(params != null) {
-                    actualUriBuf.append('?');
-                    for (Iterator i = params.keySet().iterator(); i.hasNext();) {
-                        Object name = i.next();
-                        actualUriBuf.append(name)
-                                 .append('=')
-                                 .append(params.get(name));
-                        if(i.hasNext())
-                            actualUriBuf.append('&');
-                    }
-                }
-                actualUri = actualUriBuf.toString();
-            }
-            else {
-                throw new ControllerExecutionException("Action not found in redirect for name ["+actionName+"]");
-            }
-        }
-
-
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("Dynamic method [redirect] forwarding request to ["+actualUri +"]");
-        }
-
-        try {
-            response.sendRedirect(response.encodeRedirectURL(actualUri));
-        } catch (IOException e) {
-            throw new ControllerExecutionException("Error redirecting request for url ["+actualUri +"]: " + e.getMessage(),e);
-        }
-        return null;
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RenderDynamicMethod.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RenderDynamicMethod.java
deleted file mode 100644
index b727fad..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/RenderDynamicMethod.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import grails.util.OpenRicoBuilder;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import groovy.lang.Writable;
-import groovy.text.Template;
-import groovy.xml.StreamingMarkupBuilder;
-import org.apache.commons.collections.BeanMap;
-import org.codehaus.groovy.grails.commons.GrailsControllerClass;
-import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.GrailsHttpServletResponse;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Allows rendering of text, views, and templates to the response
- *
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public class RenderDynamicMethod extends AbstractDynamicControllerMethod {
-    public static final String METHOD_SIGNATURE = "render";
-    public static final String ARGUMENT_TEXT = "text";
-    public static final String ARGUMENT_CONTENT_TYPE = "contentType";
-    public static final String ARGUMENT_ENCODING = "encoding";
-    public static final String ARGUMENT_VIEW = "view";
-    public static final String ARGUMENT_MODEL = "model";
-    public static final String ARGUMENT_TEMPLATE = "template";
-    public static final String ARGUMENT_BEAN = "bean";
-    public static final String ARGUMENT_COLLECTION = "collection";
-    public static final String ARGUMENT_BUILDER = "builder";
-    private static final String DEFAULT_ARGUMENT = "it";
-    private static final String BUILDER_TYPE_RICO = "rico";
-
-    private GrailsControllerHelper helper;
-    protected GrailsHttpServletResponse response;
-
-
-    public RenderDynamicMethod(GrailsControllerHelper helper, HttpServletRequest request, HttpServletResponse response) {
-        super(METHOD_SIGNATURE, request, response);
-        this.helper = helper;
-        this.response = new GrailsHttpServletResponse(response);
-    }
-
-    public Object invoke(Object target, Object[] arguments) {
-        if(arguments.length == 0)
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-
-        boolean renderView = true;
-        GroovyObject controller = (GroovyObject)target;
-        if(arguments[0] instanceof String) {
-            try {
-                response.getWriter().write((String)arguments[0]);
-                renderView = false;
-            } catch (IOException e) {
-                throw new ControllerExecutionException(e.getMessage(),e);
-            }
-        }
-        else if(arguments[0] instanceof Closure) {
-            StreamingMarkupBuilder b = new StreamingMarkupBuilder();
-            Writable markup = (Writable)b.bind(arguments[arguments.length - 1]);
-            try {
-                markup.writeTo(response.getWriter());
-            } catch (IOException e) {
-                throw new ControllerExecutionException("I/O error executing render method for arguments ["+arguments[0]+"]: " + e.getMessage(),e);
-            }
-            renderView = false;
-        }
-        else if(arguments[0] instanceof Map) {
-            Map argMap = (Map)arguments[0];
-           PrintWriter out;
-           try {
-               if(argMap.containsKey(ARGUMENT_CONTENT_TYPE) && argMap.containsKey(ARGUMENT_ENCODING)) {
-                   out = response.getWriter((String)argMap.get(ARGUMENT_CONTENT_TYPE),
-                                            (String)argMap.get(ARGUMENT_ENCODING));
-               }
-               else if(argMap.containsKey(ARGUMENT_CONTENT_TYPE)) {
-                   out = response.getWriter((String)argMap.get(ARGUMENT_CONTENT_TYPE));
-               }
-               else {
-                   out = response.getWriter();
-               }
-           }
-           catch(IOException ioe) {
-                throw new ControllerExecutionException("I/O creating write in method [render] on class ["+target.getClass()+"]: " + ioe.getMessage(),ioe);
-           }
-
-            if(arguments[arguments.length - 1] instanceof Closure) {
-                if(BUILDER_TYPE_RICO.equals(argMap.get(ARGUMENT_BUILDER))) {
-                    OpenRicoBuilder orb;
-                    try {
-                        orb = new OpenRicoBuilder(response);
-                        renderView = false;
-                    } catch (IOException e) {
-                        throw new ControllerExecutionException("I/O error executing render method for arguments ["+argMap+"]: " + e.getMessage(),e);
-                    }
-                    orb.invokeMethod("ajax", new Object[]{ arguments[arguments.length - 1] });
-                }
-                else {
-                    StreamingMarkupBuilder b = new StreamingMarkupBuilder();
-                    Writable markup = (Writable)b.bind(arguments[arguments.length - 1]);
-                    try {
-                        markup.writeTo(out);
-                    } catch (IOException e) {
-                        throw new ControllerExecutionException("I/O error executing render method for arguments ["+argMap+"]: " + e.getMessage(),e);
-                    }
-                    renderView = false;
-                }
-            }
-            else if(arguments[arguments.length - 1] instanceof String) {
-               out.write((String)arguments[arguments.length - 1]);
-               renderView = false;
-            }
-            else if(argMap.containsKey(ARGUMENT_TEXT)) {
-               String text = (String)argMap.get(ARGUMENT_TEXT);
-               out.write(text);
-               renderView = false;
-            }
-            else if(argMap.containsKey(ARGUMENT_VIEW)) {
-               String viewName = (String)argMap.get(ARGUMENT_VIEW);
-               GrailsControllerClass controllerClass = helper.getControllerClassByName(target.getClass().getName());
-               String viewUri = controllerClass.getViewByName(viewName);
-
-               Map model;
-               Object modelObject = argMap.get(ARGUMENT_MODEL);
-                if(modelObject instanceof Map) {
-                    model = (Map)modelObject;
-                }
-                else {
-                    model = new BeanMap(target);
-                }
-                controller.setProperty( ControllerDynamicMethods.MODEL_AND_VIEW_PROPERTY, new ModelAndView(viewUri,model) );
-            }
-            else if(argMap.containsKey(ARGUMENT_TEMPLATE)) {
-                String templateName = (String)argMap.get(ARGUMENT_TEMPLATE);
-
-                // get the template uri
-                GrailsApplicationAttributes attrs = (GrailsApplicationAttributes)controller.getProperty(ControllerDynamicMethods.GRAILS_ATTRIBUTES);
-                String templateUri = attrs.getTemplateUri(templateName,request);
-                // retrieve gsp engine
-                GroovyPagesTemplateEngine engine = attrs.getPagesTemplateEngine();
-                try {
-                    Template t = engine.createTemplate(templateUri,attrs.getServletContext(),request,response);
-                    Map binding = new HashMap();
-
-                    if(argMap.containsKey(ARGUMENT_BEAN)) {
-                        binding.put(DEFAULT_ARGUMENT, argMap.get(ARGUMENT_BEAN));
-                        Writable w = t.make(binding);
-                        w.writeTo(out);
-                    }
-                    else if(argMap.containsKey(ARGUMENT_COLLECTION)) {
-                        Object colObject = argMap.get(ARGUMENT_COLLECTION);
-                        if(colObject instanceof Collection) {
-                             Collection c = (Collection) colObject;
-                            for (Iterator i = c.iterator(); i.hasNext();) {
-                                Object o = i.next();
-                                binding.put(DEFAULT_ARGUMENT, o);
-                                Writable w = t.make(binding);
-                                w.writeTo(out);
-                            }
-                        }
-                        else {
-                            binding.put(DEFAULT_ARGUMENT, colObject);
-                            Writable w = t.make(binding);
-                            w.writeTo(out);
-                        }
-                    }
-                    else if(argMap.containsKey(ARGUMENT_MODEL)) {
-                        Object modelObject = argMap.get(ARGUMENT_MODEL);
-                        if(modelObject instanceof Map) {
-                            Writable w = t.make((Map)argMap.get(ARGUMENT_MODEL));
-                            w.writeTo(out);
-                        }
-                        else {
-                            Writable w = t.make(new BeanMap(target));
-                            w.writeTo(out);
-                        }
-                    }
-                    else {
-                            Writable w = t.make(new BeanMap(target));
-                            w.writeTo(out);
-                    }
-                    renderView = false;
-                }
-                catch(IOException ioex) {
-                    throw new ControllerExecutionException("I/O error executing render method for arguments ["+argMap+"]: " + ioex.getMessage(),ioex);
-                } catch (ServletException e) {
-                    throw new ControllerExecutionException("Servlet exception executing render method for arguments ["+argMap+"]: " + e.getMessage(),e);
-                }
-            }
-            else {
-                throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-            }
-        }
-        else {
-            throw new MissingMethodException(METHOD_SIGNATURE,target.getClass(),arguments);
-        }
-        controller.setProperty(ControllerDynamicMethods.RENDER_VIEW_PROPERTY,Boolean.valueOf(renderView));
-        return null;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/TagLibDynamicMethods.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/TagLibDynamicMethods.java
deleted file mode 100644
index 76c1a3d..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/metaclass/TagLibDynamicMethods.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import groovy.lang.ProxyMetaClass;
-import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
-import org.codehaus.groovy.grails.commons.metaclass.GenericDynamicProperty;
-import org.codehaus.groovy.grails.commons.metaclass.GroovyDynamicMethodsInterceptor;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-import java.beans.IntrospectionException;
-import java.io.Writer;
-
-/**
- * <p>Represents a controller class in Grails.
- *
- * @author Graeme Rocher
- * @since Jan 14, 20056
- */
-public class TagLibDynamicMethods extends GroovyDynamicMethodsInterceptor {
-    public static final String OUT_PROPERTY = "out";
-    private static final String THROW_TAG_ERROR_METHOD = "throwTagError";
-
-    public TagLibDynamicMethods(GroovyObject taglib, GroovyObject controller) throws IntrospectionException {
-        super(taglib);
-
-        ProxyMetaClass controllerMetaClass = (ProxyMetaClass)controller.getMetaClass();
-        ControllerDynamicMethods controllerDynamicMethods = (ControllerDynamicMethods)controllerMetaClass.getInterceptor();
-
-
-        addDynamicProperty(new GenericDynamicProperty(OUT_PROPERTY, Writer.class,false));
-
-        // add dynamic properties (shared with controller)
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(GetParamsDynamicProperty.PROPERTY_NAME));
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(GetSessionDynamicProperty.PROPERTY_NAME));
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.REQUEST_PROPERTY));
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.RESPONSE_PROPERTY) );
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.SERVLET_CONTEXT) );
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.GRAILS_ATTRIBUTES) );
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.FLASH_SCOPE_PROPERTY) );
-        addDynamicProperty(controllerDynamicMethods.getDynamicProperty(ControllerDynamicMethods.GRAILS_APPLICATION));        
-
-        addDynamicMethodInvocation(new AbstractDynamicMethodInvocation(THROW_TAG_ERROR_METHOD) {
-            public Object invoke(Object target, Object[] arguments) {
-                if(arguments.length == 0)
-                    throw new MissingMethodException(THROW_TAG_ERROR_METHOD,target.getClass(),arguments);
-                throw new GrailsTagException(arguments[0].toString());
-            }
-        });
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureAction.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureAction.java
deleted file mode 100644
index 7837452..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureAction.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import groovy.lang.Closure;
-
-import java.lang.Exception;
-
-import org.codehaus.groovy.grails.web.pageflow.exceptions.InvalidClosureReturnValueException;
-import org.springframework.util.Assert;
-import org.springframework.webflow.Action;
-import org.springframework.webflow.Event;
-import org.springframework.webflow.RequestContext;
-
-/**
- * <p>Wrapper class to execute a Groovy closure as a SWF actions.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public class ClosureAction implements Action {
-
-	private Closure closure = null;
-	private String stateId = null;
-	private String flowId = null;
-	
-	public ClosureAction(String flowId, String stateId, Closure closure) {
-		super();
-		Assert.notNull(flowId);
-		Assert.notNull(stateId);
-		Assert.notNull(closure);
-		this.flowId = flowId;
-		this.stateId = stateId;
-		this.closure = closure;
-	}
-
-	public Event execute(RequestContext requestContext) throws Exception {
-		Object result = this.closure.call(requestContext);
-		
-		if (result == null) {
-			throw new InvalidClosureReturnValueException("Null value returned by action closure of state [" + stateId + "] in page flow [" + flowId + "]!");
-		} else if (result instanceof Event) {
-			return (Event)result;
-		} else if (result instanceof String) {
-			return new Event(closure, (String)result);
-		} else {
-			throw new InvalidClosureReturnValueException("Return value of type [" + result.getClass().getName() + "] returned by action closure of state [" + stateId + "] in page flow [" + flowId + "] is not supported!");
-		}
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureFlowAttributeMapper.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureFlowAttributeMapper.java
deleted file mode 100644
index bb649eb..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureFlowAttributeMapper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import groovy.lang.Closure;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.codehaus.groovy.grails.web.pageflow.exceptions.InvalidClosureReturnValueException;
-import org.springframework.webflow.FlowAttributeMapper;
-import org.springframework.webflow.RequestContext;
-
-/**
- * <p>Delegates subflow input and output operations to closures.
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class ClosureFlowAttributeMapper implements FlowAttributeMapper {
-
-	String flowId = null;
-	String stateId = null;
-	Closure subflowInputClosure = null;
-	Closure subflowOutputClosure = null;
-	
-	public ClosureFlowAttributeMapper(String flowId, String stateId, Closure subflowInputClosure, Closure subflowOutputClosure) {
-		super();
-		this.flowId = flowId;
-		this.stateId = stateId;
-		this.subflowInputClosure = subflowInputClosure;
-		this.subflowOutputClosure = subflowOutputClosure;
-	}
-	
-	public Map createSubflowInput(RequestContext context) {
-		if (this.subflowInputClosure != null) {
-			Object returnValue = this.subflowInputClosure.call(context);
-			if (returnValue == null) {
-				return new HashMap();
-			} else if (returnValue instanceof Map) {
-				return (Map)returnValue;
-			} else {
-				throw new InvalidClosureReturnValueException("Return value of type [" + returnValue.getClass().getName() + "] of subflow input closure for flow attribute mapper of state [" + this.stateId + "] of page flow [" + this.flowId + "] is not supported!");
-			}
-		} else {
-			return new HashMap();
-		}
-	}
-	
-	public void mapSubflowOutput(RequestContext context) {
-		if (this.subflowOutputClosure != null) {
-			Object returnValue = this.subflowOutputClosure.call(context);
-			if (returnValue == null) {
-				return;
-			} else if (returnValue instanceof Map) {
-				context.getFlowExecutionContext().getActiveSession().getParent().getScope().setAttributes((Map)returnValue);
-			} else {
-				throw new InvalidClosureReturnValueException("Return value of type [" + returnValue.getClass().getName() + "] of subflow output closure for flow attribute mapper of state [" + this.stateId + "] of page flow [" + this.flowId + "] is not supported!");
-			}
-		}
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureValidator.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureValidator.java
deleted file mode 100644
index 45f2504..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ClosureValidator.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import groovy.lang.Closure;
-import org.springframework.validation.Errors;
-import org.springframework.validation.Validator;
-
-/**
- * <p>Delegate that turns a closure into a Spring validator.
- * 
- * <p>The closure needs to accept two parameters: target and and {@link org.springframework.validation.Errors} instance.
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class ClosureValidator implements Validator {
-
-	private Closure closure = null;
-	
-	public ClosureValidator(Closure closure) {
-		super();
-		this.closure = closure;
-	}
-
-	public boolean supports(Class arg0) {
-		return true;
-	}
-
-	public void validate(Object target, Errors errors) {
-		this.closure.call(new Object[] { target, errors });
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/GrailsFlowBuilder.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/GrailsFlowBuilder.java
deleted file mode 100644
index f481a24..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/GrailsFlowBuilder.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import grails.pageflow.Flow;
-import grails.pageflow.State;
-import grails.pageflow.Transition;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.grails.commons.GrailsPageFlowClass;
-import org.codehaus.groovy.grails.web.pageflow.action.GrailsFormAction;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.util.Assert;
-import org.springframework.webflow.Action;
-import org.springframework.webflow.AnnotatedAction;
-import org.springframework.webflow.FlowAttributeMapper;
-import org.springframework.webflow.config.AbstractFlowBuilder;
-import org.springframework.webflow.config.FlowBuilderException;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class GrailsFlowBuilder extends AbstractFlowBuilder implements ApplicationContextAware {
-
-	private static final String FLOW = "flow";
-	private static final String METHOD = "method";
-	private static final String BIND_AND_VALIDATE = "bindAndValidate";
-	private static final String VALIDATOR = "validator";
-	
-	private ApplicationContext applicationContext = null;
-	private GrailsPageFlowClass pageFlowClass = null;
-	
-	public GrailsFlowBuilder() {
-		super();
-	}
-
-	public void setPageFlowClass(GrailsPageFlowClass pageFlowClass) {
-		this.pageFlowClass = pageFlowClass;
-	}
-	
-	public void setApplicationContext(ApplicationContext applicationContext)
-			throws BeansException {
-		this.applicationContext = applicationContext;
-	}
-	
-	protected String flowId() {
-		return this.pageFlowClass.getFlowId();
-	}
-
-	public void buildStates() throws FlowBuilderException {
-		GroovyObject pageFlow = (GroovyObject)this.applicationContext.getBean(pageFlowClass.getFullName());
-		Assert.notNull(pageFlow);
-		Flow flow = (Flow)pageFlow.getProperty(FLOW);
-		Assert.notNull(flow);
-		String firstState = null;
-		
-		for (Iterator iter = flow.getStates().iterator(); iter.hasNext();) {
-			State state = (State)iter.next();
-			
-			if (firstState == null) {
-				firstState = state.getId();
-			}
-			
-			if (state.isActionState()) {
-				AnnotatedAction action = null;
-				
-				if (state.getAction() != null) {
-					action = new AnnotatedAction(state.getAction());
-				} else if (state.getActionClass() != null) {
-					Action tmpAction = null;
-					if (Action.class.isAssignableFrom(state.getActionClass())) {
-						tmpAction = (Action)BeanUtils.instantiateClass(state.getActionClass());
-					} else {
-						throw new UnsupportedOperationException("None " + Action.class.getName() + " action classes are not yet supported!");
-					}
-					if (state.getActionProperties() != null) {
-						new BeanWrapperImpl(tmpAction).setPropertyValues(state.getActionProperties());
-					}
-					action = new AnnotatedAction(tmpAction);
-				} else if (state.getActionClosure() != null) {
-					action = new AnnotatedAction(new ClosureAction(this.pageFlowClass.getFlowId(), state.getId(), state.getActionClosure()));
-				} else if (state.getActionFormDetails() != null) {
-					GrailsFormAction formAction = new GrailsFormAction();
-					BeanWrapper beanWrapper = new BeanWrapperImpl(formAction);
-					for (Iterator iter2 = state.getActionFormDetails().entrySet().iterator(); iter2.hasNext();) {
-						Map.Entry entry = (Map.Entry)iter2.next();
-						if (VALIDATOR.equals(entry.getKey()) && entry.getValue() instanceof Closure) {
-							beanWrapper.setPropertyValue((String)entry.getKey(), new ClosureValidator(((Closure)entry.getValue())));
-						} else {
-							beanWrapper.setPropertyValue((String)entry.getKey(), entry.getValue());
-						}
-					}
-					formAction.afterPropertiesSet();
-					action = new AnnotatedAction(formAction);
-					if (state.getActionMethod() != null) {
-						action.setProperty(METHOD, state.getActionMethod());
-					} else {
-						action.setProperty(METHOD, BIND_AND_VALIDATE);
-					}
-				} else {
-					throw new UnsupportedOperationException();
-				}
-						
-				addActionState(state.getId(), action, getTransitions(state.getTransitions()));
-			} else if (state.isViewState()) {
-				if (state.getViewName() != null) {
-					addViewState(state.getId(), new ModelViewDescriptorCreator(state.getViewName(), state.getViewModel()), getTransitions(state.getTransitions()), new HashMap());
-				} else if (state.getViewClosure() != null) {
-					throw new UnsupportedOperationException("View closures are not yet supported!");
-				}
-			} else if (state.isDecisionState()) {
-				throw new UnsupportedOperationException("Decision states are not yet supported!");
-			} else if (state.isSubflowState()) {
-				if (state.getSubFlowInput() != null || state.getSubFlowOutput() != null) {
-					addSubflowState(
-							state.getId(), 
-							getFlowServiceLocator().getFlow(state.getSubFlowId()), 
-							new ClosureFlowAttributeMapper(this.pageFlowClass.getFlowId(), state.getId(), state.getSubFlowInput(), state.getSubFlowOutput()),
-							getTransitions(state.getTransitions()));
-				} else if (state.getAttributeMapper() != null) {
-					addSubflowState(
-							state.getId(),
-							getFlowServiceLocator().getFlow(state.getSubFlowId()),
-							state.getAttributeMapper(),
-							getTransitions(state.getTransitions()));
-				} else if (state.getAttributeMapperClass() != null) {
-					FlowAttributeMapper flowAttributeMapper = (FlowAttributeMapper)BeanUtils.instantiateClass(state.getAttributeMapperClass());
-					if (state.getAttributeMapperProperties() != null) {
-						new BeanWrapperImpl(flowAttributeMapper).setPropertyValues(state.getAttributeMapperProperties());
-					}
-					addSubflowState(
-							state.getId(),
-							getFlowServiceLocator().getFlow(state.getSubFlowId()),
-							flowAttributeMapper,
-							getTransitions(state.getTransitions()));
-				} else {
-					addSubflowState(state.getId(), getFlowServiceLocator().getFlow(state.getSubFlowId()), getTransitions(state.getTransitions()));
-				}
-			} else if (state.isEndState()) {
-				if (state.getViewName() != null) {
-					addEndState(state.getId(), new ModelViewDescriptorCreator(state.getViewName(), state.getViewModel()), new HashMap());
-				} else {
-					addEndState(state.getId());
-				}
-			} else {
-				throw new UnsupportedOperationException();
-			}
-		}
-		if (firstState != null) {
-			getFlow().setStartState(firstState);
-		}
-	}
-
-	private org.springframework.webflow.Transition[] getTransitions(List transitions) {
-		org.springframework.webflow.Transition[] transitionArray = new org.springframework.webflow.Transition[transitions.size()];
-		int i = 0;
-		for (Iterator iter2 = transitions.iterator(); iter2.hasNext(); i++) {
-			Transition transition = (Transition)iter2.next();
-			transitionArray[i] = on(transition.getName(), transition.getTargetStateId());
-		}
-		return transitionArray;
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ModelViewDescriptorCreator.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ModelViewDescriptorCreator.java
deleted file mode 100644
index 566ebf3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/ModelViewDescriptorCreator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import groovy.lang.Closure;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.springframework.util.Assert;
-import org.springframework.webflow.RequestContext;
-import org.springframework.webflow.ViewDescriptor;
-import org.springframework.webflow.ViewDescriptorCreator;
-
-/**
- * <p>All closures in the model associated with a view
- * state will be executed everytime a (@link org.springframework.webflow.ViewDescriptor}
- * is created.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public class ModelViewDescriptorCreator implements ViewDescriptorCreator {
-
-	private Map model = null;
-	private String viewName = null;
-	
-	public ModelViewDescriptorCreator(Map model) {
-		super();
-		this.model = model;
-	}
-
-	public ModelViewDescriptorCreator(String viewName, Map model) {
-		this(model);
-		Assert.notNull(viewName);
-		this.viewName = viewName;
-	}
-	
-	public ViewDescriptor createViewDescriptor(RequestContext requestContext) {
-		Map tmpModel = new HashMap(requestContext.getModel());
-		if (this.model != null) {
-			for (Iterator iter = this.model.entrySet().iterator(); iter.hasNext();) {
-				Map.Entry entry = (Map.Entry)iter.next();
-				if (entry.getValue() != null && entry.getValue() instanceof Closure) {
-					tmpModel.put(entry.getKey(), ((Closure)entry.getValue()).call(new Object[] { requestContext }));
-				} else {
-					tmpModel.put(entry.getKey(), entry.getValue());
-				}
-			}
-		}
-		return new ViewDescriptor(viewName, tmpModel);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/action/GrailsFormAction.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/action/GrailsFormAction.java
deleted file mode 100644
index ad8bd1d..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/action/GrailsFormAction.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow.action;
-
-import org.springframework.webflow.action.FormAction;
-
-/**
- * <p>Adds some convenience property setters to {@link org.springframework.webflow.action.FormAction}.
- * 
- * @author Steven Devijver
- * @since Jul 11, 2005
- * @see org.springframework.webflow.action.FormAction
- */
-public class GrailsFormAction extends FormAction {
-
-	public GrailsFormAction() {
-		super();
-	}
-
-	/**
-	 * <p>Convencience property for {@link FormAction#setFormObjectClass(java.lang.Class)}.
-	 * 
-	 * @param clazz the form object class
-	 */
-	public void setClass(Class clazz) {
-		setFormObjectClass(clazz);
-	}
-	
-	/**
-	 * <p>Convenience property for {@link FormAction#setFormObjectName(java.lang.String)}.
-	 * 
-	 * @param name the form object name in the scope
-	 */
-	public void setName(String name) {
-		setFormObjectName(name);
-	}
-	
-	/**
-	 * <p>Convenience property for {@link FormAction#setFormObjectScopeAsString(java.lang.String)}.
-	 * 
-	 * @param scope the form object scope (<code>request</code> or <code>scope</code>)
-	 */
-	public void setScope(String scope) {
-		setFormObjectScopeAsString(scope);
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/GrailsPageFlowException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/GrailsPageFlowException.java
deleted file mode 100644
index e530056..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/GrailsPageFlowException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow.exceptions;
-
-import java.lang.String;
-import java.lang.Throwable;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-
-/**
- * <p>Abstract base class for exceptions related to page flows.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public abstract class GrailsPageFlowException extends GrailsException {
-
-	public GrailsPageFlowException() {
-		super();
-	}
-
-	public GrailsPageFlowException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsPageFlowException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsPageFlowException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/InvalidClosureReturnValueException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/InvalidClosureReturnValueException.java
deleted file mode 100644
index 780adf7..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/InvalidClosureReturnValueException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow.exceptions;
-
-import java.lang.String;
-import java.lang.Throwable;
-
-/**
- * <p>Thrown the a closure returns a null value or not an instance of {@link org.springframework.webflow.Event}
- * or {@link String}.
- * 
- * @author Steven Devijver
- * @since Jul 10, 2005
- */
-public class InvalidClosureReturnValueException extends GrailsPageFlowException {
-
-	public InvalidClosureReturnValueException() {
-		super();
-	}
-
-	public InvalidClosureReturnValueException(String arg0) {
-		super(arg0);
-	}
-
-	public InvalidClosureReturnValueException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public InvalidClosureReturnValueException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/NoViewDefinedException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/NoViewDefinedException.java
deleted file mode 100644
index 6f6bec2..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/exceptions/NoViewDefinedException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow.exceptions;
-
-/**
- * <p>Thrown when no view is configured for a state when one is expected.
- * 
- * @author Steven Devijver
- * @since Aug 6, 2005
- */
-public class NoViewDefinedException extends GrailsPageFlowException {
-
-	public NoViewDefinedException() {
-		super();
-	}
-
-	public NoViewDefinedException(String arg0) {
-		super(arg0);
-	}
-
-	public NoViewDefinedException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public NoViewDefinedException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/execution/servlet/GrailsServletFlowExecutionManager.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/execution/servlet/GrailsServletFlowExecutionManager.java
deleted file mode 100644
index 08b594e..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pageflow/execution/servlet/GrailsServletFlowExecutionManager.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow.execution.servlet;
-
-import java.io.Serializable;
-import java.util.Map;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.pageflow.exceptions.NoViewDefinedException;
-import org.springframework.webflow.Event;
-import org.springframework.webflow.Flow;
-import org.springframework.webflow.FlowExecutionContext;
-import org.springframework.webflow.FlowSession;
-import org.springframework.webflow.RequestContext;
-import org.springframework.webflow.State;
-import org.springframework.webflow.ViewDescriptor;
-import org.springframework.webflow.access.FlowLocator;
-import org.springframework.webflow.execution.EnterStateVetoException;
-import org.springframework.webflow.execution.FlowExecutionListener;
-import org.springframework.webflow.execution.servlet.ServletEvent;
-import org.springframework.webflow.execution.servlet.ServletFlowExecutionManager;
-
-/**
- * <p>This specialisation of {@link org.springframework.webflow.execution.servlet.ServletFlowExecutionManager}
- * stores and retrieves the flow execution id from a cookie if no flow execution id parameter is available.
- * 
- * <p>Users must use the regular Spring Web Flow mechanism of passing the flow execution id as a parameter if
- * more than one page flow is configured for a given URI.
- * 
- * <p>The <code>_reset</code> parameter may be set to <code>true</code> to reset the flow execution id cookie value.
- * This may be useful during development when the application server may be restarted often. The flow execution associated
- * with the id stored in the cookie may be lost after a restart. Normally the browser needs to be closed to remove the cookie
- * value. The <code>_reset</code> parameter does this for you. Remove the parameter from the URL to continue working
- * with flow (not removing it will reset the cookie value on each request).
- * 
- * @author Steven Devijver
- * @since Jul 19, 2005
- */
-public class GrailsServletFlowExecutionManager extends
-		ServletFlowExecutionManager {
-
-	public static final String FLOW_EXECUTION_ID_COOKIE_NAME = GrailsServletFlowExecutionManager.class.getName() + "$FlowExecutionIdCookie";
-	private static final String TRUE = "true";
-	private static final String RESET_PARAMETER = "_reset";
-	
-	public GrailsServletFlowExecutionManager() {
-		super();
-	}
-
-	public GrailsServletFlowExecutionManager(Flow flow) {
-		super(flow);
-	}
-
-	public GrailsServletFlowExecutionManager(FlowLocator flowLocator) {
-		super(flowLocator);
-	}
-
-	protected Event createEvent(HttpServletRequest request,
-			HttpServletResponse response) {
-		return super.createEvent(request, response);
-	}
-	
-	protected String getFlowExecutionId(Event event) {
-		if (event instanceof ServletEvent) {			
-			String flowExecutionId = super.getFlowExecutionId(event);
-			if (StringUtils.isBlank(flowExecutionId)) {
-				String resetValue = (String)event.getParameter(RESET_PARAMETER);
-				if (StringUtils.isNotBlank(resetValue) && TRUE.equals(resetValue)) {
-					((ServletEvent)event).getRequest().setAttribute(RESET_PARAMETER, TRUE);
-					return null;
-				}
-				Cookie[] cookies = ((ServletEvent)event).getRequest().getCookies();
-				for (int i = 0; cookies != null && i < cookies.length; i++) {
-					if (FLOW_EXECUTION_ID_COOKIE_NAME.equals(cookies[i].getName())) {
-						if (StringUtils.isNotBlank(cookies[i].getValue())) {
-							return cookies[i].getValue();
-						} else {
-							return null;
-						}
-					}
-				}
-				return null;
-			} else {
-				return flowExecutionId;
-			}
-		} else {
-			return super.getFlowExecutionId(event);
-		}
-	}
-	
-	public ViewDescriptor handle(HttpServletRequest request,
-			HttpServletResponse response) throws Exception {
-		final boolean[] created = new boolean[1];
-		final boolean[] sessionEnded = new boolean[1];
-		final State[] stateEntered = new State[1];
-		created[0] = false;
-		sessionEnded[0] = false;
-		ViewDescriptor viewDescriptor = super.handle(request, response, new FlowExecutionListener() {
-			public void created(FlowExecutionContext context) {
-				created[0] = true;
-			}
-			public void sessionStarted(RequestContext context) {
-			}
-			public void resumed(RequestContext context) {
-			}
-			public void sessionEnded(RequestContext context, FlowSession endedSession) {
-				sessionEnded[0] = endedSession.getParent() == null;
-			}
-			public void stateEntered(RequestContext context, State previousState, State state) {
-				stateEntered[0] = state;
-			}
-			public void eventSignaled(RequestContext context) {
-			}
-			public void requestProcessed(RequestContext context) {
-			}
-			public void loaded(FlowExecutionContext context, Serializable id) {
-			}
-			public void paused(RequestContext context) {
-			}
-			public void removed(FlowExecutionContext context, Serializable id) {
-			}
-			public void requestSubmitted(RequestContext context) {
-			}
-			public void saved(FlowExecutionContext context, Serializable id) {
-			}
-			public void sessionStarting(RequestContext context, State startState, Map input) throws EnterStateVetoException {
-			}
-			public void stateEntering(RequestContext context, State nextState) throws EnterStateVetoException {
-			}
-		});
-		
-		if (viewDescriptor == null) {
-			throw new NoViewDefinedException("No view defined for state [" + stateEntered[0].getId() + "]!");
-		}
-		
-		Cookie flowExecutionIdCookie = null;
-		if (sessionEnded[0] || (request.getAttribute(RESET_PARAMETER) != null && request.getAttribute(RESET_PARAMETER).equals(TRUE))) {
-			flowExecutionIdCookie = new Cookie(FLOW_EXECUTION_ID_COOKIE_NAME, "");
-		} else if (created[0]) {
-			flowExecutionIdCookie = new Cookie(FLOW_EXECUTION_ID_COOKIE_NAME, (String)viewDescriptor.getAttribute(FLOW_EXECUTION_ID_ATTRIBUTE));
-		}
-		if (flowExecutionIdCookie != null) {
-			response.addCookie(flowExecutionIdCookie);
-		}
-
-		return viewDescriptor;
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPResonseWriter.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPResonseWriter.java
deleted file mode 100644
index db35712..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPResonseWriter.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import javax.servlet.ServletResponse;
-import java.io.*;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * A buffered writer that won't commit the response until the buffer has reached the high
- * water mark, or until flush() or close() is called.
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- *
- * Date: Jan 10, 2004
- *
- */
-public class GSPResonseWriter extends PrintWriter {
-	private ServletResponse response;
-	private CharArrayWriter out0 = new CharArrayWriter();
-	private Writer out1;
-	private int max;
-	private boolean trouble = false;
-
-	/**
-	 * Private constructor.  Use getInstance() instead.
-	 * @param response
-	 * @param out
-	 * @param max
-	 */
-	private GSPResonseWriter(ServletResponse response, CharArrayWriter out, int max) {
-		super(out);
-		this.response = response;
-		this.out0 = out;
-		this.max = max;
-	} // GSPResonseWriter
-
-	/**
-	 * Private constructor.  Use getInstance() instead.
-	 * @param writer The target writer to write to
-	 * @param out
-	 * @param max
-	 */
-	private GSPResonseWriter(Writer writer, CharArrayWriter out, int max) {
-		super(out);
-		this.out0 = out;
-        this.out1 = writer;
-        this.max = max;
-	}
-
-    /**
-	 * Make sure streams get closed eventually.
-	 * @throws Throwable
-	 */
-	protected void finalize() throws Throwable {
-		close();
-		super.finalize();
-	} // finalize()
-
-	/**
-	 * Flush the stream if it's not closed and check its error state.
-	 * Errors are cumulative; once the stream encounters an error, this
-	 * routine will return true on all successive calls.
-	 *
-	 * @return True if the print stream has encountered an error, either on the
-	 * underlying output stream or during a format conversion.
-	 */
-	public boolean checkError() {
-		if (super.checkError()) return true;
-		return trouble;
-	} // checkError()
-
-	/**
-	 * Close the stream.
-	 * @see #checkError()
-	 */
-	public void close() {
-		if (!response.isCommitted()) {
-			response.setContentLength(out0.size());
-		}
-		flush();
-		super.close();
-	} // close()
-
-	/**
-	 * Flush the stream.
-	 * @see #checkError()
-	 */
-	public synchronized void flush() {
-		if (trouble) return;
-		super.flush();
-		if (out1 == null) {
-			try {
-				out1 = response.getWriter();
-			} catch (IOException e) {
-				trouble = true;
-				return;
-			}
-		}
-		try {
-			out1.write(out0.toCharArray());
-			out0.reset();
-		} catch (IOException e) {
-			trouble = true;
-		}
-	} // flush()
-
-	/**
-	 * Static factory method to create the writer.
-	 * @param response
-	 * @param max
-	 * @return  A GSPResonseWriter instance
-	 */
-	static GSPResonseWriter getInstance(ServletResponse response, int max) {
-		return new GSPResonseWriter(response, new CharArrayWriter(max), max);
-	} // getInstance()
-
-	/**
-	 * Static factory method to create the writer.
-	 * @param target The target writer to write too
-	 * @param max
-	 * @return  A GSPResonseWriter instance
-	 */
-	static GSPResonseWriter getInstance(Writer target, int max) {
-		return new GSPResonseWriter(target, new CharArrayWriter(max), max);
-	} // getInstance()
-
-    /**
-	 * Print an object.  The string produced by the <code>{@link
-	 * java.lang.String#valueOf(Object)}</code> method is translated into bytes
-	 * according to the platform's default character encoding, and these bytes
-	 * are written in exactly the manner of the <code>{@link #write(int)}</code>
-	 * method.
-	 *
-	 * @param      obj   The <code>Object</code> to be printed
-	 * @see        java.lang.Object#toString()
-	 */
-	public void print(Object obj) {
-		if (obj == null) obj = "";
-		write(String.valueOf(obj));
-	}
-
-	/**
-	 * Print a string.  If the argument is <code>null</code> then the string
-	 * <code>""</code> is printed.  Otherwise, the string's characters are
-	 * converted into bytes according to the platform's default character
-	 * encoding, and these bytes are written in exactly the manner of the
-	 * <code>{@link #write(int)}</code> method.
-	 *
-	 * @param      s   The <code>String</code> to be printed
-	 */
-	public void print(String s) {
-		if (s == null) s = "";
-		write(s);
-	} // print()
-
-	/**
-	 * Write a single character.
-	 * @param c int specifying a character to be written.
-	 */
-	public void write(int c) {
-		if (trouble) return;
-		super.write(c);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-	/**
-	 * Write a portion of an array of characters.
-	 * @param buf Array of characters
-	 * @param off Offset from which to start writing characters
-	 * @param len Number of characters to write
-	 */
-	public void write(char buf[], int off, int len) {
-		if (trouble || buf == null || len == 0) return;
-		super.write(buf, off, len);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-	/**
-	 * Write a portion of a string.
-	 * @param s A String
-	 * @param off Offset from which to start writing characters
-	 * @param len Number of characters to write
-	 */
-	public void write(String s, int off, int len) {
-		if (trouble || s == null || s.length() == 0) return;
-		super.write(s, off, len);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-} // GSPResonseWriter
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPWriter.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPWriter.java
deleted file mode 100644
index dda5484..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GSPWriter.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * A PrintWriter used in the generation of GSP pages that allows printing to the target output stream and
- * maintains a record of the current line number during usage.
- *
- * @author Graeme Rocher
- * @since 13-Jan-2006
- */
-public class GSPWriter extends PrintWriter {
-    private int lineNumber = 1;
-    private static final Pattern LINE_BREAK = Pattern.compile("\\r\\n|\\n|\\r");
-
-    public GSPWriter(Writer out) {
-        super(out);
-    }
-
-    public void write(char buf[], int off, int len) {
-        super.write(buf, off, len);
-    }
-
-    public void write(String s, int off, int len) {
-         Matcher m = LINE_BREAK.matcher(s);
-        while(m.find()) {
-            lineNumber++;
-        }
-        super.write(s, off, len);
-    }
-
-    public void write(int c) {
-        if(c == '\n' || c=='\r')
-            lineNumber++;
-        super.write(c);
-    }
-
-    public void printlnToResponse(String s) {
-        if(s == null) s = "''";
-        super.print("out.print(");
-        super.print(s);
-        super.print(")");
-        this.println();
-    }
-
-    public void printlnToBuffer(String s, int index) {
-        if(s == null) s = "''";
-        super.print("buf"+index+" << ");
-        super.print(s);
-        this.println();
-    }
-
-    public void println() {
-        this.lineNumber++;
-        super.println();
-    }
-
-    public int getCurrentLineNumber() {
-        return this.lineNumber;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPage.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPage.java
deleted file mode 100644
index f314b83..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPage.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import groovy.lang.*;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsTagLibClass;
-import org.codehaus.groovy.grails.web.metaclass.TagLibDynamicMethods;
-import org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-import org.springframework.context.ApplicationContext;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.IntrospectionException;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Base class for a GroovyPage (at the moment there is nothing in here but could be useful for providing utility methods
- * etc.
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- *
- * Date: Jan 10, 2004
- *
- */
-public abstract class GroovyPage extends Script {
-    private static final Log LOG = LogFactory.getLog(GroovyPage.class);
-
-    public static final String REQUEST = "request";
-    public static final String SERVLET_CONTEXT = "application";
-    public static final String RESPONSE = "response";
-    public static final String OUT = "out";
-    public static final String ATTRIBUTES = "attributes";
-    public static final String APPLICATION_CONTEXT = "applicationContext";
-    public static final String SESSION = "session";
-    public static final String PARAMS = "params";
-    public static final String FLASH = "flash";
-    private GrailsApplication application;
-    private GrailsApplicationAttributes grailsAttributes;
-    private ApplicationContext appContext;
-    private Map tagLibs = new HashMap();
-
-    /**
-     * Convert from HTML to Unicode text.  This function converts many of the encoded HTML
-     * characters to normal Unicode text.  Example: &amp;lt&semi; to &lt;.
-     */
-    public static String fromHtml(String text)
-    {
-        int ixz;
-        if (text == null || (ixz = text.length()) == 0) return text;
-        StringBuffer buf = new StringBuffer(ixz);
-        String rep = null;
-        for (int ix = 0; ix < ixz; ix++)
-        {
-            char c = text.charAt(ix);
-            if (c == '&');
-            {
-                String sub = text.substring(ix + 1).toLowerCase();
-                if (sub.startsWith("lt;"))
-                {
-                    c = '<';
-                    ix += 3;
-                }
-                else
-                if (sub.startsWith("gt;"))
-                {
-                    c = '>';
-                    ix += 3;
-                }
-                else
-                if (sub.startsWith("amp;"))
-                {
-                    c = '&';
-                    ix += 4;
-                }
-                else
-                if (sub.startsWith("nbsp;"))
-                {
-                    c = ' ';
-                    ix += 5;
-                }
-                else
-                if (sub.startsWith("semi;"))
-                {
-                    c = ';';
-                    ix += 5;
-                }
-                else
-                if (sub.startsWith("#"))
-                {
-                    char c2 = 0;
-                    for (int iy = ix + 1; iy < ixz; iy++)
-                    {
-                        char c1 = text.charAt(iy);
-                        if (c1 >= '0' && c1 <= '9')
-                        {
-                            c2 = (char)(c2 * 10 + c1);
-                            continue;
-                        }
-                        if (c1 == ';')
-                        {
-                            c = c2;
-                            ix = iy;
-                        }
-                        break;
-                    }
-                }
-            }
-            if (rep != null)
-            {
-                buf.append(rep);
-                rep = null;
-            }
-            else buf.append(c);
-        }
-        return buf.toString();
-    } // fromHtml()
-
-    public Object getProperty(String property) {
-        // in GSP we assume if a property doesn't exist that
-        // it is null rather than throw an error this works nicely
-        // with the Groovy Truth
-        try {
-            return super.getProperty(property);
-        } catch (MissingPropertyException mpe) {
-              if(LOG.isDebugEnabled()) {
-                  LOG.debug("No property ["+property+"] found in GSP returning null");
-              }
-              return null;
-        }
-    }
-
-    /**
-     * Attempts to invokes a dynamic tag
-     *
-     * @param tagName The name of the tag
-     * @param attrs The tags attributes
-     * @param body  The body of the tag as a closure
-     */
-    public void invokeTag(String tagName, Map attrs, Closure body) {
-        Binding binding = getBinding();
-
-        Writer out = (Writer)binding.getVariable(GroovyPage.OUT);
-
-        if(this.application == null)
-            initPageState();
-
-        GroovyObject tagLib = getTagLib(tagName);
-
-        if(tagLib != null) {
-            tagLib.setProperty(  TagLibDynamicMethods.OUT_PROPERTY, out );
-            Object tagLibProp;
-            try {
-                tagLibProp = tagLib.getProperty(tagName);
-            } catch (MissingPropertyException mpe) {
-                throw new GrailsTagException("Tag ["+tagName+"] does not exist in tag library ["+tagLib.getClass().getName()+"]");
-            }
-            if(tagLibProp instanceof Closure) {
-                Closure tag = (Closure)tagLibProp;
-                if(tag.getParameterTypes().length == 1) {
-                    tag.call( new Object[]{ attrs });
-                    if(body != null) {
-                        body.call();
-                    }
-                }
-                if(tag.getParameterTypes().length == 2) {
-                    tag.call( new Object[] { attrs, body });
-                }
-            }else {
-               throw new GrailsTagException("Tag ["+tagName+"] does not exist in tag library ["+tagLib.getClass().getName()+"]");
-            }
-        }
-        else {
-            throw new GrailsTagException("Tag ["+tagName+"] does not exist. No tag library found.");
-        }
-    }
-
-    private void initPageState() {
-        if(this.application == null) {
-            ServletContext context = (ServletContext)getBinding().getVariable(SERVLET_CONTEXT);
-            this.grailsAttributes = new DefaultGrailsApplicationAttributes(context);
-            this.application = grailsAttributes.getGrailsApplication();
-            this.appContext = grailsAttributes.getApplicationContext();
-        }
-    }
-
-    private GroovyObject getTagLib(String tagName) {
-        if(this.application == null)
-            initPageState();
-        Binding binding = getBinding();
-        HttpServletRequest request = (HttpServletRequest)binding.getVariable(GroovyPage.REQUEST);
-        HttpServletResponse response = (HttpServletResponse)binding.getVariable(GroovyPage.RESPONSE);
-
-        GrailsTagLibClass tagLibClass = application.getTagLibClassForTag(tagName);
-        if(tagLibClass == null)
-            return null;
-        
-        GroovyObject tagLib;
-        if(tagLibs.containsKey(tagLibClass.getFullName())) {
-             tagLib = (GroovyObject)tagLibs.get(tagLibClass.getFullName());
-        }
-        else {
-            tagLib = (GroovyObject)appContext.getBean(tagLibClass.getFullName());
-            try {
-                new TagLibDynamicMethods(tagLib,grailsAttributes.getController(request));
-            } catch (IntrospectionException e) {
-                throw new GrailsTagException("Error instantiating taglib ["+tagLibClass.getFullName()+"]: " + e.getMessage(),e);
-            }
-            tagLibs.put(tagLibClass.getFullName(),tagLib);
-        }
-        return tagLib;
-    }
-
-    /**
-     * Allows invoking of taglibs as method calls with simple bodies. The bodies should only contain text
-     *
-     * @param methodName The methodName of the tag to call or the methodName of a method on GroovPage
-     * @param args The Arguments
-     *
-     * @return The result of the invocation
-     */
-    public Object invokeMethod(final String methodName, Object args) {
-
-        try {
-            return super.invokeMethod(methodName, args);
-        }
-        catch(MissingMethodException mme) {
-          if(LOG.isDebugEnabled()) {
-              LOG.debug("No method ["+methodName+"] found invoking as tag");
-          }
-            Map attrs = null;
-            Object body = null;
-            // retrieve tag lib and writer from binding
-            Binding binding = getBinding();
-            final Writer out = (Writer)binding.getVariable(GroovyPage.OUT);
-            GroovyObject tagLib = getTagLib(methodName);
-
-            // get attributes and body closure
-            if (args instanceof Object[]) {
-                Object[] argArray = (Object[])args;
-                if(argArray.length > 0 && argArray[0] instanceof Map)
-                    attrs = (Map)argArray[0];
-                if(argArray.length > 1) {
-                    body = argArray[1];
-
-                }
-            }
-            else if(args instanceof Map) {
-                attrs = (Map)args;
-            }
-
-            if(attrs == null) {
-                attrs = new HashMap();
-            }
-
-            // in a direct invocation the body is expected to return a string
-            // invoke the body closure and create a new closure that outputs
-            // to the response writer on each body invokation
-            final Object body1 = body;
-            Closure actualBody = new Closure(this) {
-                public Object doCall(Object obj) {
-                    return call(new Object[] {obj} );
-                }
-                public Object doCall() {
-                    return call(new Object[0]);
-                }
-                public Object doCall(Object[] args) {
-                    return call(args);
-                }
-                public Object call(Object[] args) {
-                    if(body1 != null) {
-                        Object bodyResponse;
-                        if(body1 instanceof Closure) {
-                            bodyResponse = ((Closure)body1).call();
-                        }
-                        else {
-                            bodyResponse = body1;
-                        }
-
-                        if(bodyResponse instanceof String) {
-                            try {
-                                out.write(bodyResponse.toString());
-                            } catch (IOException e) {
-                                throw new GrailsTagException("I/O error invoking tag library closure ["+methodName+"] as method");
-                            }
-                        }
-                    }
-                    return null;
-                }
-            };
-
-            if(tagLib != null) {
-                tagLib.setProperty(  TagLibDynamicMethods.OUT_PROPERTY, out );
-                Object tagLibProp;
-                try {
-                    tagLibProp = tagLib.getProperty(methodName);
-                    if(tagLibProp instanceof Closure) {
-                        Closure tag = (Closure)tagLibProp;
-                        if(tag.getParameterTypes().length == 1) {
-                            tag.call( new Object[]{ attrs });
-                            if(actualBody != null) {
-                                actualBody.call();
-                            }
-                            return null;
-                        }
-                        if(tag.getParameterTypes().length == 2) {
-                            tag.call( new Object[] { attrs, actualBody });
-                            return null;
-                        }
-                    }else {
-                       throw new GrailsTagException("Tag ["+methodName+"] does not exist in tag library ["+tagLib.getClass().getName()+"]");
-                    }
-                } catch (MissingPropertyException mpe) {
-                    if(args instanceof Object[])
-                        throw new MissingMethodException(methodName,GroovyPage.class, (Object[])args);
-                    else
-                        throw new MissingMethodException(methodName,GroovyPage.class, new Object[]{ args });
-                }
-
-            }
-            throw new MissingMethodException(methodName,GroovyPage.class, new Object[]{ args });
-        }
-    }
-} // GroovyPage
-
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesServlet.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesServlet.java
deleted file mode 100644
index dbcada3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesServlet.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import groovy.lang.Writable;
-import groovy.text.Template;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.Writer;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Main servlet class.  Example usage in web.xml:
- * 	<servlet>
- *       <servlet-name>GroovyPagesServlet</servlet-name>
- *       <servlet-class>org.codehaus.groovy.grails.web.pages.GroovyPagesServlet</servlet-class>
- *		<init-param>
- *			<param-name>showSource</param-name>
- *			<param-value>1</param-value>
- *			<description>
- *             Allows developers to view the intermediade source code, when they pass
- *				a showSource argument in the URL (eg /edit/list?showSource=true.
- *          </description>
- *		</init-param>
- *    </servlet>
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- * Date: Jan 10, 2004
- *
- */
-public class GroovyPagesServlet extends HttpServlet /*implements GroovyObject*/ {
-    Object x;
-    private ServletContext context;
-    private boolean showSource = false;
-
-    private static Map pageCache = Collections.synchronizedMap(new HashMap());
-    private static ClassLoader parent;
-    private GroovyPagesTemplateEngine engine;
-    private GrailsApplicationAttributes grailsAttributes;
-
-
-    /**
-     * @return the servlet context
-     */
-    public ServletContext getServletContext() { return context; }
-    /**
-     * Initialize the servlet, set it's parameters.
-     * @param config servlet settings
-     */
-    public void init(ServletConfig config) {
-        // Get the servlet context
-        context = config.getServletContext();
-        context.log("GSP servlet initialized");
-
-        // Ensure that we use the correct classloader so that we can find
-        // classes in an application server.
-        parent = Thread.currentThread().getContextClassLoader();
-        if (parent == null) parent = getClass().getClassLoader();
-
-        showSource = config.getInitParameter("showSource") != null;
-        this.grailsAttributes = new DefaultGrailsApplicationAttributes(context);
-    } // init()
-
-    /**
-     * Handle HTTP GET requests.
-     * @param request
-     * @param response
-     * @throws ServletException
-     * @throws IOException
-     */
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        doPage(request, response);
-    } // doGet()
-
-    /**
-     * Handle HTTP POST requests.
-     * @param request
-     * @param response
-     * @throws ServletException
-     * @throws IOException
-     */
-    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        doPage(request, response);
-    } // doPost()
-
-    /**
-     * Execute page and produce output.
-     * @param request
-     * @param response
-     * @throws ServletException
-     * @throws IOException
-     */
-    public void doPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-        this.engine = grailsAttributes.getPagesTemplateEngine();
-        this.engine.setShowSource(this.showSource);
-        
-        String pageId = engine.getPageId(request);
-        URL pageUrl = engine.getPageUrl(context,pageId);
-        if (pageUrl == null) {
-            context.log("GroovyPagesServlet:  \"" + pageUrl + "\" not found");
-            response.sendError(404, "\"" + pageUrl + "\" not found.");
-            return;
-        }
-
-        Template t = engine.createTemplate(context,request,response);
-        Writable w = t.make();
-        Writer out = GSPResonseWriter.getInstance(response, 8192);
-        try {
-            w.writeTo(out);
-        }
-        finally {
-            if (out != null) out.close();
-        }
-    } // doPage()
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesTemplateEngine.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesTemplateEngine.java
deleted file mode 100644
index f380a2e..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/GroovyPagesTemplateEngine.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pages;
-
-import groovy.lang.*;
-import groovy.text.Template;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods;
-import org.codehaus.groovy.grails.web.metaclass.GetParamsDynamicProperty;
-import org.codehaus.groovy.grails.web.metaclass.GetSessionDynamicProperty;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.springframework.context.ApplicationContext;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.*;
-
-/**
- * A GroovyPagesTemplateEngine based on (but not extending) the existing TemplateEngine implementations
- * within Groovy. It allows GSP pages to be re-used in different context using code like the below:
- *
- * <code>
- *      Template t = new GroovyPagesTemplateEngine()
- *                          .createTemplate(context,request,response);
- *      t.make()
- *       .writeTo(out);
- * </code>
- *
- * @author Graeme Rocher
- * @since 12-Jan-2006
- */
-public class GroovyPagesTemplateEngine {
-
-    private static final Log LOG = LogFactory.getLog(GroovyPagesTemplateEngine.class);
-    private static Map pageCache = Collections.synchronizedMap(new HashMap());
-    private ClassLoader parent;
-    private boolean showSource;
-    private GroovyClassLoader classLoader;
-
-    public void setClassLoader(GroovyClassLoader classLoader) {
-        this.classLoader = classLoader;
-    }
-
-    public void setShowSource(boolean showSource) {
-        this.showSource = showSource;
-    }
-
-
-
-    private static class PageMeta {
-        private Class servletScriptClass;
-        private long lastModified;
-        private Map dependencies = new HashMap();
-        private InputStream groovySource;
-    } // PageMeta
-
-
-    public GroovyPagesTemplateEngine() {
-    }
-
-    /**
-     * Create a template for the current request
-     *
-     * @param context
-     * @param request
-     * @param response
-     * @return  The created template or null if the page was not found
-     * @throws IOException
-     * @throws ServletException
-     */
-    public Template createTemplate(ServletContext context, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-        parent = Thread.currentThread().getContextClassLoader();
-        if (parent == null) parent = getClass().getClassLoader();
-
-        String uri = getPageId(request);
-        return createTemplate(uri,context,request,response);
-    }
-
-    /**
-     * Creates a template for the specified uri
-     *
-     * @param uri
-     * @param context
-     * @param request
-     * @param response
-     * @return The created template or null if the page was not found for the specified uri
-     * @throws IOException
-     * @throws ServletException
-     */
-   public Template createTemplate(String uri, ServletContext context, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-        URL pageUrl = getPageUrl(context,uri);
-        if (pageUrl == null) {
-            context.log("GroovyPagesServlet:  \"" + pageUrl + "\" not found");
-            return null;
-        }
-        boolean spillGroovy = showSource && request.getParameter("showSource") != null;
-
-        PageMeta pageMeta = getPage(uri, context,pageUrl, spillGroovy);
-        return new GroovyPagesTemplate(context,request,response,pageMeta,spillGroovy);
-    }
-
-    /**
-     * Return the page identifier.
-     * @param request
-     * @return The page id
-     */
-    protected String getPageId(HttpServletRequest request) {
-        // Get the name of the Groovy script (intern the name so that we can
-        // lock on it)
-        int contextLength = request.getContextPath().length();
-        return request.getRequestURI().substring(contextLength).intern();
-    } // getPageId()
-
-    /**
-     * Return the page URL from the request path.
-     * @param pageId
-     * @return
-     * @throws java.net.MalformedURLException
-     */
-    protected URL getPageUrl(ServletContext context, String pageId) throws MalformedURLException {
-        // Check to make sure that the file exists in the web application
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("Loading GSP for url ["+pageId+"]");
-        }
-        return context.getResource(pageId);
-    } // getPageUrl()
-
-    /**
-     * Lookup page class or load new one if needed.
-     * @param uri
-     * @param pageUrl
-     * @param spillGroovy
-     * @return
-     * @throws IOException
-     * @throws javax.servlet.ServletException
-     */
-    protected PageMeta getPage(String uri, ServletContext context,URL pageUrl, boolean spillGroovy)
-            throws IOException, ServletException  {
-            // Lock on the uri to ensure that only one compile occurs for any script
-        synchronized (uri) {
-                // Get the URLConnection
-            URLConnection groovyScriptConn = pageUrl.openConnection();
-                // URL last modified
-            long lastModified = groovyScriptConn.getLastModified();
-                // Check the cache for the script
-            PageMeta pageMeta = (PageMeta)pageCache.get(uri);
-                // If the pageMeta isn't null check all the dependencies
-            boolean dependencyOutOfDate = false;
-            if (pageMeta != null && !spillGroovy) {
-                isPageNew(pageMeta);
-            }
-            if (pageMeta == null || pageMeta.lastModified < lastModified || dependencyOutOfDate || spillGroovy) {
-                pageMeta = newPage(uri, context,groovyScriptConn, lastModified, spillGroovy);
-            }
-            return pageMeta;
-        }
-    } // getPage()
-
-   /**
-     * Load and compile new page.
-     * @param uri
-     * @param groovyScriptConn
-     * @param lastModified
-     * @param spillGroovy
-     * @return
-     * @throws IOException
-     * @throws ServletException
-     */
-    private PageMeta newPage(String uri, ServletContext context,URLConnection groovyScriptConn, long lastModified,
-                             boolean spillGroovy) throws IOException, ServletException {
-        Parse parse = new Parse(uri, groovyScriptConn.getInputStream());
-        InputStream in = parse.parse();
-
-        // Make a new pageMeta
-        PageMeta pageMeta = new PageMeta();
-
-            // just return groovy and don't compile if asked
-        if (spillGroovy) {
-            pageMeta.groovySource = in;
-            return pageMeta;
-        }
-            // Compile the script into an object
-
-        Loader loader = new Loader(classLoader, context, uri, pageMeta.dependencies);
-        Class scriptClass;
-        try {
-            scriptClass =
-                loader.parseClass(in, uri.substring(1));
-        } catch (CompilationFailedException e) {
-            throw new ServletException("Could not parse script: " + uri, e);
-        }
-        pageMeta.servletScriptClass = scriptClass;
-        pageMeta.lastModified = lastModified;
-        pageCache.put(uri, pageMeta);
-        return pageMeta;
-    } // newPage()
-
-    /**
-     * Is page new or changed?
-     * @param pageMeta page data
-     * @return true if compile needed
-     */
-    private boolean isPageNew(PageMeta pageMeta) {
-        for (Iterator i = pageMeta.dependencies.keySet().iterator(); i.hasNext(); ) {
-            URLConnection urlc;
-            URL url = (URL)i.next();
-            try {
-                urlc = url.openConnection();
-                urlc.setDoInput(false);
-                urlc.setDoOutput(false);
-                long dependentLastModified = urlc.getLastModified();
-                if (dependentLastModified > ((Long)pageMeta.dependencies.get(url)).longValue()) {
-                    return true;
-                }
-            } catch (IOException ioe) {
-                return true;
-            }
-        }
-        return false;
-    } // isPageNew()
-
-    /**
-     *
-     * @author Graeme Rocher
-     * @since 12-Jan-2006
-     */
-    protected static class GroovyPagesTemplate implements Template {
-        private HttpServletResponse response;
-        private HttpServletRequest request;
-        private ServletContext context;
-        private boolean showSource = false;
-        private PageMeta pageMeta;
-
-
-        public GroovyPagesTemplate(ServletContext context,
-                                   HttpServletRequest request,
-                                   HttpServletResponse response,
-                                   PageMeta pageMeta,
-                                   boolean showSource) {
-            this.request = request;
-            this.response = response;
-            this.context = context;
-
-            this.showSource = showSource;
-            this.pageMeta = pageMeta;
-        }
-
-        public Writable make() {
-            return new GroovyPageTemplateWritable(context,request,response,pageMeta,showSource);
-        }
-
-        public Writable make(Map binding) {
-            GroovyPageTemplateWritable gptw = new GroovyPageTemplateWritable(context,request,response,pageMeta,showSource);
-            gptw.setBinding(binding);
-            return gptw;
-        }
-    }
-
-    /**
-     *
-     * @author Graeme Rocher
-     * @since 12-Jan-2006
-     */
-    protected static class GroovyPageTemplateWritable implements Writable {
-        private HttpServletResponse response;
-        private HttpServletRequest request;
-        private PageMeta pageMeta;
-        private boolean showSource;
-        private ServletContext context;
-        private Map additionalBinding = new HashMap();
-
-        public GroovyPageTemplateWritable(ServletContext context,
-                                          HttpServletRequest request,
-                                          HttpServletResponse response,
-                                          PageMeta pageMeta,
-                                          boolean showSource) {
-            this.request = request;
-            this.response = response;
-            this.pageMeta = pageMeta;
-            this.showSource = showSource;
-            this.context = context;
-        }
-
-        public void setBinding(Map binding) {
-            if(binding != null)
-                this.additionalBinding = binding;
-        }
-
-        public Writer writeTo(Writer out) throws IOException {
-            if (showSource) {
-                    // Set it to TEXT
-                response.setContentType("text/plain"); // must come before response.getOutputStream()
-                send(pageMeta.groovySource, out);
-                pageMeta.groovySource = null;
-            } else {
-                // Set it to HTML by default
-                response.setContentType("text/html"); // must come before response.getWriter()
-                Binding binding = getBinding(request, response, out);
-                Script page = InvokerHelper.createScript(pageMeta.servletScriptClass, binding);
-                page.run();
-            }
-            return out;
-        }
-
-        /**
-         * Copy all of input to output.
-         * @param in
-         * @param out
-         * @throws IOException
-         */
-        public static void send(InputStream in, Writer out) throws IOException {
-            try {
-                Reader reader = new InputStreamReader(in);
-                char[] buf = new char[8192];
-                for (;;) {
-                    int read = reader.read(buf);
-                    if (read <= 0) break;
-                    out.write(buf, 0, read);
-                }
-            } finally {
-                out.close();
-                in.close();
-            }
-        } // send()
-        /**
-         * Prepare Bindings before instantiating page.
-         * @param request
-         * @param response
-         * @param out
-         * @return the Bindings
-         * @throws IOException
-         */
-        protected Binding getBinding(HttpServletRequest request, HttpServletResponse response, Writer out)
-                throws IOException {
-            // Set up the script context
-            Binding binding = new Binding();
-            
-            GroovyObject controller = (GroovyObject)request.getAttribute(GrailsApplicationAttributes.CONTROLLER);
-            binding.setVariable(GroovyPage.REQUEST, controller.getProperty(ControllerDynamicMethods.REQUEST_PROPERTY));
-            binding.setVariable(GroovyPage.RESPONSE, controller.getProperty(ControllerDynamicMethods.RESPONSE_PROPERTY));
-            binding.setVariable(GroovyPage.FLASH, controller.getProperty(ControllerDynamicMethods.FLASH_SCOPE_PROPERTY));
-            binding.setVariable(GroovyPage.SERVLET_CONTEXT, context);
-            ApplicationContext appContext = (ApplicationContext)context.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
-            binding.setVariable(GroovyPage.APPLICATION_CONTEXT, appContext);
-            binding.setVariable(GrailsApplication.APPLICATION_ID, appContext.getBean(GrailsApplication.APPLICATION_ID));
-            binding.setVariable(GrailsApplicationAttributes.CONTROLLER, controller);
-            binding.setVariable(GroovyPage.SESSION, controller.getProperty(GetSessionDynamicProperty.PROPERTY_NAME));
-            binding.setVariable(GroovyPage.PARAMS, controller.getProperty(GetParamsDynamicProperty.PROPERTY_NAME));
-            binding.setVariable(GroovyPage.OUT, out);
-
-
-            // Go through request attributes and add them to the binding as the model
-            for (Enumeration attributeEnum =  request.getAttributeNames(); attributeEnum.hasMoreElements();) {
-                String key = (String) attributeEnum.nextElement();
-                try {
-                    binding.getVariable(key);
-                }
-                catch(MissingPropertyException mpe) {
-                    binding.setVariable( key, request.getAttribute(key) );
-                }
-            }
-            for (Iterator i = additionalBinding.keySet().iterator(); i.hasNext();) {
-                String key =  (String)i.next();
-                binding.setVariable(key, additionalBinding.get(key));
-            }
-            return binding;
-        } // getBinding()
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Loader.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Loader.java
deleted file mode 100644
index a58c5c5..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Loader.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import groovy.lang.GroovyClassLoader;
-import org.codehaus.groovy.control.CompilationFailedException;
-
-import javax.servlet.ServletContext;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Map;
-
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Class loader that knows about loading from a servlet context and about class dependancies.
- *
- * @author Troy Heninger
- * Date: Jan 10, 2004
- *
- */
-public class Loader extends GroovyClassLoader {
-
-    private String servletPath;
-    private ServletContext context;
-    private Map dependencies;
-
-    /**
-     * Constructor.
-     * @param parent
-     * @param context
-     * @param servletPath
-     * @param dependencies
-     */
-    public Loader(ClassLoader parent, ServletContext context, String servletPath, Map dependencies) {
-        super(parent);
-        this.context = context;
-        this.servletPath = servletPath;
-        this.dependencies = dependencies;
-    } // Loader()
-
-    /**
-     * Load the class.
-     * @param className
-     * @return
-     * @throws ClassNotFoundException
-     */
-    protected Class findClass(String className) throws ClassNotFoundException {
-        String filename = className.replace('.', File.separatorChar) + ".groovy";
-        URL dependentScript;
-        try {
-            dependentScript = context.getResource("/WEB-INF/groovy/" + filename);
-            if (dependentScript == null) {
-                String current = servletPath.substring(0, servletPath.lastIndexOf("/") + 1);
-                dependentScript = context.getResource(current + filename);
-            }
-        } catch (MalformedURLException e) {
-            throw new ClassNotFoundException(className + ": " + e);
-        }
-        if (dependentScript == null) {
-            throw new ClassNotFoundException("Could not find " + className + " in webapp");
-        } else {
-            URLConnection dependentScriptConn;
-            try {
-                dependentScriptConn = dependentScript.openConnection();
-                dependencies.put(dependentScript, new Long(dependentScriptConn.getLastModified()));
-            } catch (IOException e1) {
-                throw new ClassNotFoundException("Could not read " + className + ": " + e1);
-            }
-            try {
-                return parseClass(dependentScriptConn.getInputStream(), filename);
-            } catch (CompilationFailedException e2) {
-                throw new ClassNotFoundException("Syntax error in " + className + ": " + e2);
-            } catch (IOException e2) {
-                throw new ClassNotFoundException("Problem reading " + className + ": " + e2);
-            }
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Parse.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Parse.java
deleted file mode 100644
index c6cb286..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Parse.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.*;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-import java.io.*;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Parsing implementation for GSP files
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- * 
- * Date: Jan 10, 2004
- *
- */
-public class Parse implements Tokens {
-    public static final Log LOG = LogFactory.getLog(Parse.class);
-
-    private static final Pattern PARA_BREAK = Pattern.compile("/p>\\s*<p[^>]*>", Pattern.CASE_INSENSITIVE);
-    private static final Pattern LINE_BREAK = Pattern.compile("\\r\\n|\\n|\\r");
-    private static final Pattern ROW_BREAK = Pattern.compile("((/td>\\s*</tr>\\s*<)?tr[^>]*>\\s*<)?td[^>]*>", Pattern.CASE_INSENSITIVE);
-    private static final Pattern PARSE_TAG_FIRST_PASS = Pattern.compile("(\\s*(\\S+)\\s*=\\s*[\"]([^\"]*)[\"][\\s|>]{1}){1}");
-    private static final Pattern PARSE_TAG_SECOND_PASS = Pattern.compile("(\\s*(\\S+)\\s*=\\s*[']([^']*)['][\\s|>]{1}){1}");
-
-    private Scan scan;
-    //private StringBuffer buf;
-    private StringWriter sw;
-    private GSPWriter out;
-    private String className;
-    private boolean finalPass = false;
-    private int tagIndex;
-    private int dynamicTagIndex;
-    private Map tagContext;
-    private List tagMetaStack = new ArrayList();
-    private GrailsTagRegistry tagRegistry = GrailsTagRegistry.getInstance();
-    private boolean bufferWhiteSpace ;
-
-    private StringBuffer whiteSpaceBuffer = new StringBuffer();
-    private int[] lineNumbers = new int[1000];
-    private int currentOutputLine;
-
-    class TagMeta  {
-        String name;
-        Object instance;
-        boolean isDynamic;
-        boolean hasAttributes;
-    }
-
-    public Parse(String name, InputStream in) throws IOException {
-        scan = new Scan(readStream(in));
-        makeName(name);
-    } // Parse()
-
-    public int[] getLineNumberMatrix() {
-        return this.lineNumbers;
-    }
-    public InputStream parse() {
-
-        sw = new StringWriter();
-        out = new GSPWriter(sw);
-        page();
-        finalPass = true;
-        scan.reset();
-        page();
-//		if (DEBUG) System.out.println(buf);
-        InputStream in = new ByteArrayInputStream(sw.toString().getBytes());
-        out = null;
-        scan = null;
-        return in;
-    } // parse()
-
-    private void declare(boolean gsp) {
-        if (finalPass) return;
-        if (LOG.isDebugEnabled()) LOG.debug("parse: declare");
-        out.println();
-        write(scan.getToken().trim(), gsp);
-        out.println();
-        out.println();
-    } // declare()
-
-    private void direct() {
-        if (finalPass) return;
-        if (LOG.isDebugEnabled()) LOG.debug("parse: direct");
-        String text = scan.getToken();
-        text = text.trim();
-//		LOG.debug("direct(" + text + ')');
-        if (text.startsWith("page ")) directPage(text);
-    } // direct()
-
-    private void directPage(String text) {
-        text = text.substring(5).trim();
-//		LOG.debug("directPage(" + text + ')');
-        Pattern pat = Pattern.compile("(\\w+)\\s*=\\s*\"([^\"]*)\"");
-        Matcher mat = pat.matcher(text);
-        for (int ix = 0;;) {
-            if (!mat.find(ix)) return;
-            String name = mat.group(1);
-            String value = mat.group(2);
-            if (name.equals("import")) pageImport(value);
-            ix = mat.end();
-        }
-    } // directPage()
-
-    private void expr() {
-        if (!finalPass) return;
-        if (LOG.isDebugEnabled()) LOG.debug("parse: expr");
-
-        String text = scan.getToken().trim();
-        out.printlnToResponse(GroovyPage.fromHtml(text));
-    } // expr()
-
-    private void html() {
-        if (!finalPass) return;
-        if (LOG.isDebugEnabled()) LOG.debug("parse: html");
-        StringBuffer text = new StringBuffer(scan.getToken());
-        while (text.length() > 80) {
-            int end = 80;
-                // don't end a line with a '\'
-            while (text.charAt(end - 1) == '\\') end--;
-            print(text.subSequence(0, end));
-            text.delete(0, end);
-        }
-        if (text.length() > 0) {
-            print(text);
-        }
-    } // html()
-
-    private void makeName(String uri) {
-        String name;
-        int slash = uri.lastIndexOf('/');
-        if (slash > -1) {
-            name = uri.substring(slash + 1);
-            uri = uri.substring(0,(uri.length() - 1) - name.length());
-            while(uri.endsWith("/")) {
-                uri = uri.substring(0,uri.length() -1);
-            }
-            slash = uri.lastIndexOf('/');
-            if(slash > -1) {
-                    name = uri.substring(slash + 1) + '_' + name;
-            }
-        }
-        else {
-            name = uri;
-        }
-        StringBuffer buf = new StringBuffer(name.length());
-        for (int ix = 0, ixz = name.length(); ix < ixz; ix++) {
-            char c = name.charAt(ix);
-            if (c < '0' || (c > '9' && c < '@') || (c > 'Z' && c < '_') || (c > '_' && c < 'a') || c > 'z') c = '_';
-            else if (ix == 0 && c >= '0' && c <= '9') c = '_';
-            buf.append(c);
-        }
-        className = buf.toString();
-    } // makeName()
-
-    private static boolean match(CharSequence pat, CharSequence text, int start) {
-        int ix = start, ixz = text.length(), ixy = start + pat.length();
-        if (ixz > ixy) ixz = ixy;
-        if (pat.length() > ixz - start) return false;
-        for (; ix < ixz; ix++) {
-            if (Character.toLowerCase(text.charAt(ix)) != Character.toLowerCase(pat.charAt(ix - start))) {
-                return false;
-            }
-        }
-        return true;
-    } // match()
-
-    private static int match(Pattern pat, CharSequence text, int start) {
-        Matcher mat = pat.matcher(text);
-        if (mat.find(start) && mat.start() == start) {
-            return mat.end();
-        }
-        return 0;
-    } // match()
-
-    private void page() {
-        if (LOG.isDebugEnabled()) LOG.debug("parse: page");
-        if (finalPass) {
-            out.println();
-            out.print("class ");
-            out.print(className);
-            out.println(" extends GroovyPage {");
-            out.println("public Object run() {");
-        } else {
-            out.println("import org.codehaus.groovy.grails.web.pages.GroovyPage");
-            out.println("import org.codehaus.groovy.grails.web.taglib.*");
-        }
-        loop: for (;;) {
-            int state = scan.nextToken();
-            switch (state) {
-                case EOF: break loop;
-                case HTML: html(); break;
-                case JEXPR: expr(); break;
-                case JSCRIPT: script(false); break;
-                case JDIRECT: direct(); break;
-                case JDECLAR: declare(false); break;
-                case GEXPR: expr(); break;
-                case GSCRIPT: script(true); break;
-                case GDIRECT: direct(); break;
-                case GDECLAR: declare(true); break;
-                case GSTART_TAG: startTag(); break;
-                case GEND_TAG: endTag(); break;
-            }
-        }
-        if (finalPass) {
-            out.println("}");
-            out.println("}");
-        }
-    } // page()
-
-    private void endTag() {
-        if (!finalPass) return;
-
-       String tagName = scan.getToken().trim();
-       if(tagMetaStack.isEmpty())
-             throw new GrailsTagException("Found closing Grails tag with no opening ["+tagName+"]");
-
-       TagMeta tm = (TagMeta)tagMetaStack.remove(this.tagMetaStack.size() - 1);
-       String lastInStack = tm.name;
-
-       // if the tag name is blank then it has been closed by the start tag ie <tag />
-       if(StringUtils.isBlank(tagName))
-               tagName = lastInStack;
-
-       if(!lastInStack.equals(tagName)) {
-           throw new GrailsTagException("Grails tag ["+tagName+"] was not closed");
-       }
-
-       if(tagRegistry.isSyntaxTag(tagName)) {
-           if(tm.instance instanceof GroovySyntaxTag) {
-               GroovySyntaxTag tag = (GroovySyntaxTag)tm.instance;
-               if(tag.isBufferWhiteSpace())
-                    bufferWhiteSpace = true;
-               tag.doEndTag();
-           }
-           else {
-              throw new GrailsTagException("Grails tag ["+tagName+"] was not closed");
-           }
-       }
-       else {
-          out.println("}");
-          if(tm.hasAttributes) {
-               out.println("invokeTag('"+tagName+"',attrs"+tagIndex+",body"+tagIndex+")");
-          }
-          else {
-               out.println("invokeTag('"+tagName+"',[:],body"+tagIndex+")");
-          }
-          dynamicTagIndex--;
-       }
-       tagIndex--;
-    }
-
-    private void startTag() {
-        if (!finalPass) return;
-        tagIndex++;
-
-        String text = scan.getToken().trim();
-        String tagName;
-        Map attrs = new HashMap();
-        if(text.indexOf(' ') > -1) {
-               int i = text.indexOf(' ');
-               tagName = text.substring(0,i);
-               String attrTokens = text.substring(i,text.length());
-               attrTokens += '>'; // closing bracket marker
-
-               // do first pass parse which retrieves double quoted attributes
-                Matcher m = PARSE_TAG_FIRST_PASS.matcher(attrTokens);
-                populateAttributesFromMatcher(m,attrs);
-
-               // do second pass parse which retrieves single quoted attributes
-               m = PARSE_TAG_SECOND_PASS.matcher(attrTokens);
-               populateAttributesFromMatcher(m,attrs);
-        }
-        else {
-            tagName = text;
-        }
-        TagMeta tm = new TagMeta();
-        tm.name = tagName;
-        tm.hasAttributes = !attrs.isEmpty();
-        tagMetaStack.add(tm);
-
-        if (tagRegistry.isSyntaxTag(tagName)) {
-            if(this.tagContext == null) {
-                this.tagContext = new HashMap();
-                this.tagContext.put(GroovyPage.OUT,out);
-            }
-            GroovySyntaxTag tag = (GroovySyntaxTag)tagRegistry.newTag(tagName);
-            tag.init(tagContext);
-            tag.setAttributes(attrs);
-            if(!tag.hasPrecedingContent() && !bufferWhiteSpace) {
-                throw new GrailsTagException("Tag ["+tag.getName()+"] cannot have non-whitespace characters directly preceding it.");
-            }
-            else if(!tag.hasPrecedingContent() && bufferWhiteSpace) {
-                whiteSpaceBuffer.delete(0,whiteSpaceBuffer.length());
-                bufferWhiteSpace = false;
-            } else {
-                if(whiteSpaceBuffer.length() > 0) {
-                    out.printlnToResponse(whiteSpaceBuffer.toString());
-                    whiteSpaceBuffer.delete(0,whiteSpaceBuffer.length());
-                }
-                bufferWhiteSpace = false;
-            }
-            tag.doStartTag();
-            tm.instance = tag;
-        }
-        else {
-            dynamicTagIndex++;
-            if(attrs.size() > 0) {
-                out.print("attrs"+tagIndex+" = [");
-                for (Iterator i = attrs.keySet().iterator(); i.hasNext();) {
-                    String name = (String) i.next();
-                    out.print(name);
-                    out.print(':');
-                    out.print(attrs.get(name));
-                    if(i.hasNext())
-                        out.print(',');
-                    else
-                        out.println(']');
-                }
-            }
-            out.println("body"+tagIndex+" = {" );
-        }
-    }
-
-    private void populateAttributesFromMatcher(Matcher m, Map attrs) {
-        while(m.find()) {
-            String name = m.group(2);
-            String val = m.group(3);
-            val = val.trim();
-            name = '\"' + name + '\"';
-            if(val.startsWith("${") && val.endsWith("}")) {
-                val = val.substring(2,val.length() -1);
-            }
-            else if(!val.startsWith("[") && !val.endsWith("]")) {
-                val = '\"' + val + '\"';
-            }
-            attrs.put(name,val);
-        }
-    }
-
-    private void pageImport(String value) {
-//		LOG.debug("pageImport(" + value + ')');
-        String[] imports = Pattern.compile(";").split(value.subSequence(0, value.length()));
-        for (int ix = 0; ix < imports.length; ix++) {
-            out.print("import ");
-            out.print(imports[ix]);
-            out.println();
-        }
-    } // pageImport()
-
-    private void print(CharSequence text) {
-        StringBuffer buf = new StringBuffer();
-        if(Pattern.compile("\\S").matcher(text).find())
-            bufferWhiteSpace = false;
-
-        Matcher m = LINE_BREAK.matcher(text);
-        while(m.find()) {
-            incrementLineNumber();
-        }
-
-        buf.append('\'');
-        for (int ix = 0, ixz = text.length(); ix < ixz; ix++) {
-            char c = text.charAt(ix);
-            String rep = null;
-            if (c == '\n') rep = "\\n";
-            else if (c == '\r') rep = "\\r";
-            else if (c == '\t') rep = "\\t";
-            else if (c == '\'') rep = "\\'";
-            else if (c == '\\') rep = "\\\\";
-            if (rep != null) buf.append(rep);
-            else buf.append(c);
-        }
-        buf.append('\'');
-        if(!bufferWhiteSpace) {
-           out.printlnToResponse(buf.toString());
-        }
-        else {
-            whiteSpaceBuffer.append(buf.toString());
-            whiteSpaceBuffer.delete(0,whiteSpaceBuffer.length());
-        }
-
-    } // print()
-
-    private String readStream(InputStream in) throws IOException {
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        try {
-            byte[] buf = new byte[8192];
-            for (;;) {
-                int read = in.read(buf);
-                if (read <= 0) break;
-                out.write(buf, 0, read);
-            }
-            return out.toString();
-        } finally {
-            out.close();
-            in.close();
-        }
-    } // readStream()
-
-    private void script(boolean gsp) {
-        if (!finalPass) return;
-        if (LOG.isDebugEnabled()) LOG.debug("parse: script");
-        out.println();
-        write(scan.getToken().trim(), gsp);
-        out.println();
-        out.println();
-    } // script()
-
-    private void write(CharSequence text, boolean gsp) {
-        if (!gsp) {
-            out.print(text);
-            return;
-        }
-        for (int ix = 0, ixz = text.length(); ix < ixz; ix++) {
-            char c = text.charAt(ix);
-            String rep = null;
-            if (Character.isWhitespace(c)) {
-                for (ix++; ix < ixz; ix++) {
-                    if (Character.isWhitespace(text.charAt(ix))) continue;
-                    ix--;
-                    rep = " ";
-                    break;
-                }
-            } else if (c == '&') {
-                if (match("&semi;", text, ix)) {
-                    rep = ";";
-                    ix += 5;
-                } else if (match("&amp;", text, ix)) {
-                    rep = "&";
-                    ix += 4;
-                } else if (match("&lt;", text, ix)) {
-                    rep = "<";
-                    ix += 3;
-                } else if (match("&gt;", text, ix)) {
-                    rep = ">";
-                    ix += 3;
-                }
-            } else if (c == '<') {
-                if (match("<br>", text, ix) || match("<hr>", text, ix)) {
-                    rep = "\n";
-                    incrementLineNumber();
-                    ix += 3;
-                } else {
-                    int end = match(PARA_BREAK, text, ix);
-                    if (end <= 0) end = match(ROW_BREAK, text, ix);
-                    if (end > 0) {
-                        rep = "\n";
-                        incrementLineNumber();
-                        ix = end;
-                    }
-                }
-            }
-            if (rep != null) out.print(rep);
-            else out.print(c);
-        }
-    } // write()
-
-    private void incrementLineNumber() {
-        if(currentOutputLine >= lineNumbers.length) {
-            lineNumbers = (int[])resizeArray(lineNumbers, lineNumbers.length * 2);
-        }
-        else {
-            lineNumbers[currentOutputLine++] = out.getCurrentLineNumber();
-        }
-    }
-
-    private Object resizeArray (Object oldArray, int newSize) {
-       int oldSize = java.lang.reflect.Array.getLength(oldArray);
-       Class elementType = oldArray.getClass().getComponentType();
-       Object newArray = java.lang.reflect.Array.newInstance(
-             elementType,newSize);
-       int preserveLength = Math.min(oldSize,newSize);
-       if (preserveLength > 0)
-          System.arraycopy (oldArray,0,newArray,0,preserveLength);
-       return newArray;
-   }
-} // Parse
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Reverse.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Reverse.java
deleted file mode 100644
index c1e4cf8..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Reverse.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Utility class to reverse a char sequence.
- *
- * @author Troy Heninger
- * Date: Jan 10, 2004
- *
- */
-class Reverse implements CharSequence {
-	private CharSequence text;
-	private int start, end, anchor;
-
-	Reverse(CharSequence text) {
-		this(text, 0, text.length());
-	}
-
-	Reverse(CharSequence text, int start, int end) {
-		this.text = text;
-		this.start = start;
-		this.end = end;
-		anchor = end - 1;
-	}
-	public char charAt(int index) {
-		return text.charAt(anchor - index);
-	}
-
-	public int length() {
-		return end - start;
-	}
-
-	public CharSequence subSequence(int start, int end) {
-		return new Reverse(text, anchor - end, anchor - start);
-	}
-
-	public String toString() {
-		int len = length();
-		StringBuffer buf = new StringBuffer(len);
-		for (int ix = anchor; ix >= start; ix--) {
-			buf.append(text.charAt(ix));
-		}
-		return buf.toString();
-	}
-} // Reverse
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Scan.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Scan.java
deleted file mode 100644
index 853d064..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Scan.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Lexer for GroovyPagesServlet.
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- *
- * Date: Jan 10, 2004
- *
- */
-class Scan implements Tokens {
-	private String text;
-	private int end1, begin1, end2, begin2, state = HTML, len, level;
-	private boolean str1, str2;
-
-	Scan(String text) {
-		Strip strip = new Strip(text);
-		strip.strip(0);
-		this.text = strip.toString();
-		len = this.text.length();
-	} // Scan()
-
-	private int found(int newState, int skip) {
-		begin2 = begin1;
-		end2 = --end1;
-		begin1 = end1 += skip;
-		int lastState = state;
-		state = newState;
-		return lastState;
-	} // found()
-
-	String getToken() {
-		return text.substring(begin2, end2);
-	} // getToken()
-
-	int nextToken() {
-		for (;;) {
-			int left = len - end1;
-			if (left == 0) {
-				end1++; // in order to include the last letter
-				return found(EOF, 0);
-			}
-			char c = text.charAt(end1++);
-			char c1 = left > 1 ? text.charAt(end1) : 0;
-			char c2 = left > 2 ? text.charAt(end1 + 1) : 0;
-            char c3 = left > 3 ? text.charAt(end1 + 2) : 0;
-            
-            StringBuffer chars = new StringBuffer()
-                                       .append(c)
-                                       .append(c1)
-                                       .append(c2);
-            String startTag = chars.toString();
-
-            String endTag =    chars
-                                 .append(c3)
-                                 .toString();
-
-            if (str1) {
-				if (c == '\\') end1++;
-				else if (c == '\'') str1 = false;
-				continue;
-			} else if (str2) {
-				if (c == '\\') end1++;
-				else if (c == '"') str2 = false;
-				continue;
-			} else if (level > 0 && (c == ')' || c == '}' || c == ']')) {
-				level--;
-				continue;
-			}
-
-			switch (state) {
-				case HTML:
-					if (c == '<' && left > 3) {
-						if (c1 == '%') {
-							if (c2 == '=') {
-								return found(JEXPR, 3);
-							} else if (c2 == '@') {
-								return found(JDIRECT, 3);
-							} else if (c2 == '!') {
-								return found(JDECLAR, 3);
-							} else if (c2 == '-' && left > 3 && text.charAt(end1 + 2) == '-') {
-								if (skipJComment()) continue;
-							}
-							return found(JSCRIPT, 2);
-						}
-                        else if(startTag.equals("<g:")) {
-                            return found(GSTART_TAG,3);
-                        }
-                        else if(endTag.equals("</g:")) {
-                            return found(GEND_TAG,4);
-                        }
-                    } else if (c == '$' && c1 == '{') {
-						return found(GEXPR, 2);
-					} else if (c == '%' && c1 == '{') {
-						if (c2 == '-' && left > 3 && text.charAt(end1 + 2) == '-') {
-							if (skipGComment()) continue;
-						}
-						return found(GSCRIPT, 2);
-					} else if (c == '!' && c1 == '{') {
-						return found(GDECLAR, 2);
-					} else if (c == '@' && c1 == '{') {
-						return found(GDIRECT, 2);
-					}
-					break;
-				case JEXPR:
-				case JSCRIPT:
-				case JDIRECT:
-                case JDECLAR:
-					if (c == '%' && c1 == '>') {
-						return found(HTML, 2);
-					}
-					break;
-                case GSTART_TAG:
-                    if(c == '>') {
-                        return found(HTML,1);
-                    }
-                    else if(c == '/' && c1 == '>') {
-                       return found(GEND_TAG,1);
-                    }
-                    break;
-                case GEND_TAG:
-                    if(c == '>') {
-                        return found(HTML,1);
-                    }
-                    break;
-                case GEXPR:
-				case GDIRECT:
-					if (c == '}' && !str1 && !str2 && level == 0) {
-						return found(HTML, 1);
-					}
-					break;
-				case GSCRIPT:
-					if (c == '}' && c1 == '%' && !str1 && !str2 && level == 0) {
-						return found(HTML, 2);
-					}
-					break;
-				case GDECLAR:
-					if (c == '}' && (c1 == '!' || c1 == '%') && !str1 && !str2 && level == 0) {
-						return found(HTML, 2);
-					}
-					break;
-			}
-		}
-	} // nextToken()
-
-	private boolean skipComment(char c3, char c4) {
-		int ix = end1 + 3;
-		for (int ixz = len - 4; ; ix++) {
-			if (ix >= ixz) return false;
-			if (text.charAt(ix) == '-' && text.charAt(ix + 1) == '-' && text.charAt(ix + 2) == c3
-			        && text.charAt(ix + 3) == c4) break;
-		}
-		text = text.substring(0, --end1) + text.substring(ix + 4);
-		len = text.length();
-		return true;
-	} // skipComment()
-
-	private boolean skipGComment() {
-		return skipComment('}', '%');
-	} // skipGComment()
-
-	private boolean skipJComment() {
-		return skipComment('%', '>');
-	} // skipJComment()
-
-	void reset() {
-		end1= begin1 = end2 = begin2 = level = 0;
-		state = HTML;
-	} // reset()
-
-} // Scan
-
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Strip.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Strip.java
deleted file mode 100644
index 56a009e..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Strip.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.pages;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Utility class to strip HTML from around tags that specify it.
- *
- * @author Troy Heninger
- * Date: Jan 10, 2004
- *
- */
-class Strip {
-	private static Pattern stripTag = Pattern.compile("\\^([a-zA-Z]+)%\\{([^}]|\\}[^%])*\\}%");
-	private static Pattern anyTag = Pattern.compile("((\\^[a-zA-Z])?%\\{([^}]|\\}[^%])*\\}%|[$@]\\{[^}]*\\})");
-
-	private StringBuffer text;
-
-	Strip(CharSequence text) {
-		this.text = new StringBuffer(text.toString());
-	} // Scan()
-
-	void strip(int index) {
-		Matcher match = stripTag.matcher(text);
-		if (match.find(index)) {
-			strip(match.end());
-			String tag = match.group(1);
-			int start = match.start() + 1 + tag.length(); // begin after '^tag'; at the '%{'
-			int end = match.end();
-			Pattern patAfter = Pattern.compile("</" + tag + "(>|[^>a-zA-Z][^>]*>)\\s*", Pattern.CASE_INSENSITIVE);
-			Matcher matchAfter = patAfter.matcher(text);
-			if (matchAfter.find(end)) {
-				int end2 = matchAfter.end();
-				Matcher matchAny = anyTag.matcher(text.subSequence(0, end2));
-				if (matchAny.find(end)) end2 = matchAny.start();
-				Pattern nextTagPat = Pattern.compile("<" + tag + "(\\s|>)", Pattern.CASE_INSENSITIVE);
-				Matcher matchNext = nextTagPat.matcher(text.subSequence(0, end2));
-				if (matchNext.find(end)) end2 = matchNext.start();
-					// System.out.println("Stripping " + text.subSequence(end, end2));
-				text.delete(end, end2);
-			}
-			Pattern patBefore = Pattern.compile(new Reverse("*s\\<" + tag).toString(),
-					Pattern.CASE_INSENSITIVE);
-			Matcher matchBefore = patBefore.matcher(new Reverse(text, 0, start));
-			if (matchBefore.find()) {
-				int start2 = start - matchBefore.end();
-				Matcher matchAny = anyTag.matcher(text.subSequence(0, start));
-				if (matchAny.find(start2)) start2 = matchAny.end();
-					// System.out.println("Stripping " + text.subSequence(start2, start));
-				text.delete(start2, start);
-			}
-		}
-	} // strip()
-
-	public String toString() {
-		return text.toString();
-	}
-
-} // Strip
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Tokens.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Tokens.java
deleted file mode 100644
index 1af3e03..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/pages/Tokens.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.codehaus.groovy.grails.web.pages;
-
-/**
- * NOTE: Based on work done by on the GSP standalone project (https://gsp.dev.java.net/)
- *
- * Interface defining an enumeration of tokens for the different scriptlet types
- *
- * @author Troy Heninger
- * @author Graeme Rocher
- *
- * Date: Jan 10, 2004
- *
- */
-interface Tokens {
-	static final int EOF = -1;
-	static final int HTML = 0;
-	static final int JEXPR = 1;   // <%= ... %>
-	static final int JSCRIPT = 2; // <% .... %>
-	static final int JDIRECT = 3; // <%@ ... %>
-	static final int JDECLAR = 4; // <%! ... %>
-	static final int GEXPR = 11;   // ${ ... }
-	static final int GSCRIPT = 12; // %{ ... }%
-	static final int GDIRECT = 13; // @{ ... }
-	static final int GDECLAR = 14; // !{ ... }!
-    static final int GSTART_TAG = 15; // <gr:..>
-    static final int GEND_TAG = 16; // </gr:..>
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/DefaultGrailsApplicationAttributes.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/DefaultGrailsApplicationAttributes.java
deleted file mode 100644
index 50374e6..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/DefaultGrailsApplicationAttributes.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import org.springframework.web.util.UrlPathHelper;
-import org.springframework.validation.Errors;
-import org.springframework.context.ApplicationContext;
-import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine;
-import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import groovy.lang.GroovyObject;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-
-/**
- * @author Graeme Rocher
- * @since 17-Jan-2006
- */
-public class DefaultGrailsApplicationAttributes implements GrailsApplicationAttributes {
-
-    private UrlPathHelper urlHelper = new UrlPathHelper();
-    private ServletContext context;
-
-    public DefaultGrailsApplicationAttributes(ServletContext context) {
-        this.context = context;
-    }
-
-    public ApplicationContext getApplicationContext() {
-        return (ApplicationContext)this.context.getAttribute(APPLICATION_CONTEXT);
-    }
-
-    public GroovyObject getController(ServletRequest request) {
-        return (GroovyObject)request.getAttribute(CONTROLLER);
-    }
-
-    public String getControllerUri(ServletRequest request) {
-        GroovyObject controller = getController(request);
-        if(controller != null)
-            return (String)controller.getProperty(ControllerDynamicMethods.CONTROLLER_URI_PROPERTY);
-        else
-            return null;
-    }
-
-    public String getApplicationUri(ServletRequest request) {
-        return this.urlHelper.getContextPath((HttpServletRequest)request);
-    }
-
-    public ServletContext getServletContext() {
-        return this.context;
-    }
-
-    public FlashScope getFlashScope(ServletRequest request) {
-        if(request instanceof HttpServletRequest) {
-            HttpSession session = ((HttpServletRequest)request).getSession(true);
-            FlashScope fs = (FlashScope)session.getAttribute(FLASH_SCOPE);
-            if(fs == null) {
-                fs = new GrailsFlashScope();
-                session.setAttribute(FLASH_SCOPE,fs);
-            }
-            return fs;
-        }
-        return null;
-    }
-
-    public String getTemplateUri(String templateName, ServletRequest request) {
-       return new StringBuffer("/WEB-INF/grails-app/views")
-                                   .append(getControllerUri(request))
-                                   .append("/_")
-                                   .append(templateName)
-                                   .append(".gsp")
-                                   .toString();
-   }
-
-    public String getControllerActionUri(ServletRequest request) {
-        GroovyObject controller = getController(request);
-
-        return (String)controller.getProperty(ControllerDynamicMethods.ACTION_URI_PROPERTY);
-    }
-
-    public Errors getErrors(ServletRequest request) {
-        return (Errors)request.getAttribute(ERRORS);
-    }
-
-    public GroovyPagesTemplateEngine getPagesTemplateEngine() {
-       GroovyPagesTemplateEngine engine = (GroovyPagesTemplateEngine)this.context.getAttribute(GSP_TEMPLATE_ENGINE);
-       if(engine == null) {
-           engine = new GroovyPagesTemplateEngine();
-           engine.setClassLoader(getGrailsApplication().getClassLoader());
-           this.context.setAttribute(GSP_TEMPLATE_ENGINE,engine);
-       }
-       return engine;
-    }
-
-    public GrailsApplication getGrailsApplication() {
-        return (GrailsApplication)getApplicationContext()
-                                    .getBean(GrailsApplication.APPLICATION_ID);
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/FlashScope.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/FlashScope.java
deleted file mode 100644
index b0c7231..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/FlashScope.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import java.util.Map;
-
-/**
- * An interface that represents flash scope and allows a flash scope map to be set to the next
- * state. Flash scope essentially allows variables to be maintained for the next state and the next
- * state only, what this means is if objects are stored inside FlashScope on the first call to
- * "next()" they will be still there, but on the subsequent call they will be cleared unless they
- * have been set again since the last call to "next()"
- *
- * @author Graeme Rocher
- * @since 07-Feb-2006
- */
-public interface FlashScope extends Map {
-    /**
-     * Sets the flash scope to the next state upon a new request
-     */
-    void next();
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsApplicationAttributes.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsApplicationAttributes.java
deleted file mode 100644
index 4cb6ecf..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsApplicationAttributes.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.codehaus.groovy.grails.web.servlet;
-
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.validation.Errors;
-import org.springframework.context.ApplicationContext;
-import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import groovy.lang.GroovyObject;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletContext;
-
-/**
- * An interface defining the names of and methods to retrieve Grails specific request and servlet attributes
- *
- * @author Graeme Rocher
- * @since 17-Jan-2006
- */
-public interface GrailsApplicationAttributes {
-
-    String GSP_TEMPLATE_ENGINE = "org.codehaus.groovy.grails.GSP_TEMPLATE_ENGINE";
-    String APPLICATION_CONTEXT = "org.codehaus.groovy.grails.APPLICATION_CONTEXT";
-    String FLASH_SCOPE = "org.codehaus.groovy.grails.FLASH_SCOPE";
-    String CONTROLLER = "org.codehaus.groovy.grails.CONTROLLER";
-    String ERRORS =  "org.codehaus.groovy.grails.ERRORS";
-    String ID_PARAM = "id";
-    String PARENT_APPLICATION_CONTEXT = "org.codehaus.groovy.grails.PARENT_APPLICATION_CONTEXT";
-
-    /**
-     * @return The application context for servlet
-     */
-    ApplicationContext getApplicationContext();
-
-    /**
-     * @return The controller for the request
-     */
-    GroovyObject getController(ServletRequest request);
-
-    /**
-     *
-     * @param request
-     * @return The uri of the controller within the request
-     */
-    String getControllerUri(ServletRequest request);
-
-    /**
-     *
-     * @param request
-     * @return The uri of the application relative to the server root
-     */
-    String getApplicationUri(ServletRequest request);
-
-    /**
-     * Retrieves the servlet context instance
-     * @return The servlet context instance
-     */
-    ServletContext getServletContext();
-
-    /**
-     * Retrieves the flash scope instance for the given requeste
-     * @param request
-     * @return The FlashScope instance
-     */
-    FlashScope getFlashScope(ServletRequest request);
-    /**
-     *
-     * @param templateName
-     * @param request
-     * @return The uri of a named template for the current controller
-     */
-    String getTemplateUri(String templateName, ServletRequest request);
-
-    /**
-     *
-     * @param request
-     * @return The uri of the action called within the controller
-     */
-    String getControllerActionUri(ServletRequest request);
-
-    /**
-     *
-     * @param request
-     * @return The errors instance contained within the request
-     */
-    Errors getErrors(ServletRequest request);
-
-    /**
-     *
-     * @return Retrieves the shared GSP template engine
-     */
-    GroovyPagesTemplateEngine getPagesTemplateEngine();
-
-    /**
-     *
-     * @return Retrieves the grails application instance
-     */
-    GrailsApplication getGrailsApplication();
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsDispatcherServlet.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsDispatcherServlet.java
deleted file mode 100644
index 0d02874..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsDispatcherServlet.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsBootstrapClass;
-import org.codehaus.groovy.grails.commons.GrailsConfigUtils;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.hibernate.FlushMode;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.orm.hibernate3.SessionFactoryUtils;
-import org.springframework.orm.hibernate3.SessionHolder;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-import org.springframework.util.StringUtils;
-import org.springframework.web.context.ConfigurableWebApplicationContext;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.XmlWebApplicationContext;
-import org.springframework.web.servlet.DispatcherServlet;
-import org.springmodules.beans.factory.drivers.xml.XmlWebApplicationContextDriver;
-
-/**
- * <p>Servlet that handles incoming requests for Grails.
- * <p/>
- * <p>This servlet loads the Spring configuration based on the Grails application
- * in the parent application context.
- *
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class GrailsDispatcherServlet extends DispatcherServlet {
-
-    public GrailsDispatcherServlet() {
-        super();
-        setDetectAllHandlerMappings(false);
-    }
-
-    protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) throws BeansException {
-        // use config file locations if available
-        getServletContext().setAttribute(GrailsApplicationAttributes.PARENT_APPLICATION_CONTEXT,parent);
-        ApplicationContext grailsContext = (ApplicationContext)getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
-        GrailsApplication application;
-        WebApplicationContext webContext;
-
-        if(grailsContext != null) {
-            XmlWebApplicationContext xmlContext = new XmlWebApplicationContext();
-            xmlContext.setParent(grailsContext);
-            webContext = xmlContext;
-            application = (GrailsApplication) webContext.getBean(GrailsApplication.APPLICATION_ID, GrailsApplication.class);
-
-        }
-        else {
-            String[] locations = null;
-            if (null != getContextConfigLocation()) {
-                locations = StringUtils.tokenizeToStringArray(
-                        getContextConfigLocation(),
-                        ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS);
-            }
-            // construct the SpringConfig for the container managed application
-            application = (GrailsApplication) parent.getBean(GrailsApplication.APPLICATION_ID, GrailsApplication.class);
-            SpringConfig springConfig = new SpringConfig(application);
-            // return a context that obeys grails' settings
-            webContext = new XmlWebApplicationContextDriver().getWebApplicationContext(
-                    springConfig.getBeanReferences(),
-                    parent,
-                    getServletContext(),
-                    getNamespace(),
-                    locations);
-            getServletContext().setAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT,webContext );
-        }
-
-        // configure scaffolders
-        GrailsConfigUtils.configureScaffolders(application, webContext);
-
-        SessionFactory sessionFactory = (SessionFactory)webContext.getBean("sessionFactory");
-
-        if(sessionFactory != null) {
-            Session session = null;
-            boolean participate = false;
-            // single session mode
-            if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
-                // Do not modify the Session: just set the participate flag.
-                participate = true;
-            }
-            else {
-                logger.debug("Opening single Hibernate session in GrailsDispatcherServlet");
-                session = SessionFactoryUtils.getSession(sessionFactory,true);
-                session.setFlushMode(FlushMode.AUTO);
-                TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
-            }
-            // init the Grails application
-            try {
-                GrailsBootstrapClass[] bootstraps =  application.getGrailsBootstrapClasses();
-                for (int i = 0; i < bootstraps.length; i++) {
-                    bootstraps[i].callInit(  getServletContext() );
-                }
-            }
-
-            finally {
-                if (!participate) {
-                    // single session mode
-                    TransactionSynchronizationManager.unbindResource(sessionFactory);
-                    logger.debug("Closing single Hibernate session in GrailsDispatcherServlet");
-                    try {
-                        SessionFactoryUtils.releaseSession(session, sessionFactory);
-                    }
-                    catch (RuntimeException ex) {
-                        logger.error("Unexpected exception on closing Hibernate Session", ex);
-                    }
-                }
-            }
-            
-        }
-
-        return webContext;
-    }
-
-    public void destroy() {
-        WebApplicationContext webContext = getWebApplicationContext();
-        GrailsApplication application = (GrailsApplication) webContext.getBean(GrailsApplication.APPLICATION_ID, GrailsApplication.class);
-
-        GrailsBootstrapClass[] bootstraps =  application.getGrailsBootstrapClasses();
-        for (int i = 0; i < bootstraps.length; i++) {
-            bootstraps[i].callDestroy();
-        }
-        // call super
-        super.destroy();
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScope.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScope.java
deleted file mode 100644
index d137660..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScope.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import java.util.*;
-
-/**
- * Grails implementation of Flash scope (@see org.codehaus.groovy.grails.web.servlet.FlashScope)
- *
- * @author Graeme Rocher
- * @since 07-Feb-2006
- */
-public class GrailsFlashScope implements FlashScope {
-    private HashMap current = new HashMap();
-    private HashMap next = new HashMap();
-
-    public void next() {
-        current.clear();
-        current = (HashMap)next.clone();
-        next.clear();
-    }
-
-    public int size() {
-        return current.size() + next.size();
-    }
-
-    public void clear() {
-        current.clear();
-        next.clear();
-    }
-
-    public boolean isEmpty() {
-        return size() == 0;
-    }
-
-    public boolean containsKey(Object key) {
-        return (current.containsKey(key) || next.containsKey(key));
-    }
-
-    public boolean containsValue(Object value) {
-        return (current.containsValue(value) || next.containsValue(value));
-    }
-
-    public Collection values() {
-        Collection c = new ArrayList();
-        c.addAll(current.values());
-        c.addAll(next.values());
-        return c;
-    }
-
-    public void putAll(Map t) {
-        for (Iterator i = t.keySet().iterator(); i.hasNext();) {
-            Object key = i.next();
-            put(key,t.get(key));
-        }
-    }
-
-    public Set entrySet() {
-        Set keySet = new HashSet();
-        keySet.addAll(current.entrySet());
-        keySet.addAll(next.entrySet());
-        return keySet;
-    }
-
-    public Set keySet() {
-        Set keySet = new HashSet();
-        keySet.addAll(current.keySet());
-        keySet.addAll(next.keySet());
-        return keySet;
-    }
-
-    public Object get(Object key) {
-        if(next.containsKey(key))
-            return next.get(key);
-        return current.get(key);
-    }
-
-    public Object remove(Object key) {
-        if(current.containsKey(key))
-            return current.remove(key);
-        else
-            return next.remove(key);
-    }
-
-    public Object put(Object key, Object value) {
-        if(current.containsKey(key)) {
-            current.remove(key);
-        }
-        return next.put(key,value);
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletRequest.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletRequest.java
deleted file mode 100644
index cf4107f..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletRequest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import groovy.lang.GroovyObject;
-import org.codehaus.groovy.grails.web.metaclass.GetParamsDynamicProperty;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.servlet.ServletRequest;
-import java.util.*;
-
-/**
- * <p>Wrapper for HttpServletRequest instance that also implements
- * java.util.Map to delegate to request attributes
- *
- * @author Steven Devijver
- * @author Graeme Rocher
- * @since Jul 2, 2005
- * @see javax.servlet.http.HttpServletRequest
- * @see java.util.Map
- */
-public class GrailsHttpServletRequest extends HttpServletRequestWrapper implements Map {
-
-    Map controllerParams = Collections.EMPTY_MAP;
-
-    public GrailsHttpServletRequest(HttpServletRequest delegate) {
-        super(delegate);
-    }
-
-    public GrailsHttpServletRequest(HttpServletRequest request, GroovyObject controller) {
-        super(request);
-        controllerParams = (Map)controller.getProperty(GetParamsDynamicProperty.PROPERTY_NAME);
-    }
-
-    /* (non-Javadoc)
-      * @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
-      */
-    public String getParameter(String paramName) {
-        if(controllerParams.containsKey(paramName))
-            return controllerParams.get(paramName).toString();
-        return super.getParameter(paramName);
-    }
-
-    public int size() {
-        throw new UnsupportedOperationException("Method java.util.Map.size() is not supported by ["+getClass()+"]");
-    }
-
-    public boolean isEmpty() {
-        return getRequest().getAttributeNames().hasMoreElements();
-    }
-
-    public boolean containsKey(Object key) {
-        if(key instanceof String)
-            return getRequest().getAttribute((String)key) != null;
-        else
-            return false;
-    }
-
-    public boolean containsValue(Object value) {
-        while (getRequest().getAttributeNames().hasMoreElements()) {
-            String s =  (String)getRequest().getAttributeNames().nextElement();
-            if(getAttribute(s).equals(value))
-                return true;
-        }
-        return false;
-    }
-
-    public Object get(Object key) {
-        if(key instanceof String)
-            return getRequest().getAttribute((String)key);
-        else
-            return null;
-    }
-
-    public Object put(Object key, Object value) {
-        if(key instanceof String)
-            getRequest().setAttribute((String)key,value);
-        return value;
-    }
-
-    public Object remove(Object key) {
-        if(key instanceof String) {
-            Object v = getRequest().getAttribute((String)key) ;
-            getRequest().removeAttribute((String)key);
-            return v;
-        }
-        return null;
-    }
-
-    public void putAll(Map arg0) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void clear() {
-        ServletRequest r = getRequest();
-        while (r.getAttributeNames().hasMoreElements()) {
-            String s =  (String)r.getAttributeNames().nextElement();
-            getRequest().removeAttribute(s);
-        }
-    }
-
-    public Set keySet() {
-        Set set = new HashSet();
-        ServletRequest r = getRequest();
-        while (r.getAttributeNames().hasMoreElements()) {
-            String s =  (String)r.getAttributeNames().nextElement();
-            set.add(s);
-        }
-        return set;
-    }
-
-    public Collection values() {
-        Collection values = new ArrayList();
-        ServletRequest r = getRequest();
-        while (r.getAttributeNames().hasMoreElements()) {
-            String s =  (String)r.getAttributeNames().nextElement();
-            values.add(r.getAttribute(s));
-        }
-        return values;
-    }
-
-    public Set entrySet() {
-        throw new UnsupportedOperationException("Method java.util.Map.entrySet() is not supported by ["+getClass()+"]");
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletResponse.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletResponse.java
deleted file mode 100644
index d37a3f4..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/GrailsHttpServletResponse.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Locale;
-
-/**
- * <p>Wrapper class for HttpServletResponse that allows setting the content type while getting the writer.
- * 
- * @author Steven Devijver
- * @since Jul 5, 2005
- */
-public class GrailsHttpServletResponse implements HttpServletResponse {
-
-	private HttpServletResponse delegate = null;
-	
-	public GrailsHttpServletResponse(HttpServletResponse delegate) {
-		super();
-		this.delegate = delegate;
-	}
-
-	public void addCookie(Cookie cookie) {
-		this.delegate.addCookie(cookie);
-	}
-
-	public boolean containsHeader(String headerName) {
-		return this.delegate.containsHeader(headerName);
-	}
-
-	public String encodeURL(String url) {
-		return this.delegate.encodeURL(url);
-	}
-
-	public String encodeRedirectURL(String url) {
-		return this.delegate.encodeURL(url);
-	}
-
-    /** @deprecated */
-	public String encodeUrl(String url) {
-		return this.delegate.encodeUrl(url);
-	}
-
-    /** @deprecated */
-    public String encodeRedirectUrl(String url) {
-		return this.delegate.encodeRedirectUrl(url);
-	}
-
-	public void sendError(int error, String message) throws IOException {
-		this.delegate.sendError(error, message);
-	}
-
-	public void sendError(int error) throws IOException {
-		this.delegate.sendError(error);
-	}
-
-	public void sendRedirect(String url) throws IOException {
-		this.delegate.sendRedirect(url);
-	}
-
-	public void setDateHeader(String headerName, long value) {
-		this.delegate.setDateHeader(headerName, value);
-	}
-
-	public void addDateHeader(String headerName, long value) {
-		this.delegate.addDateHeader(headerName, value);
-	}
-
-	public void setHeader(String headerName, String value) {
-		this.delegate.setHeader(headerName, value);
-	}
-
-	public void addHeader(String headerName, String value) {
-		this.delegate.addHeader(headerName, value);
-	}
-
-	public void setIntHeader(String headerName, int value) {
-		this.delegate.setIntHeader(headerName, value);
-	}
-
-	public void addIntHeader(String headerName, int value) {
-		this.delegate.addIntHeader(headerName, value);
-	}
-
-	public void setStatus(int status) {
-		this.delegate.setStatus(status);
-	}
-
-    /** @deprecated */
-	public void setStatus(int status, String message) {
-		this.delegate.setStatus(status, message);
-	}
-
-	public String getCharacterEncoding() {
-		return this.delegate.getCharacterEncoding();
-	}
-
-	public String getContentType() {
-		return this.delegate.getContentType();
-	}
-
-	public ServletOutputStream getOutputStream() throws IOException {
-		return this.delegate.getOutputStream() ;
-	}
-
-	public ServletOutputStream getOutputStream(String contentType, String characterEncoding) throws IOException {
-		this.delegate.setContentType(contentType + ";charset=" + characterEncoding);
-		return this.delegate.getOutputStream();
-	}
-	
-	public PrintWriter getWriter() throws IOException {
-		return this.delegate.getWriter();
-	}
-
-	public PrintWriter getWriter(String contentType, String characterEncoding) throws IOException {
-		this.delegate.setContentType(contentType + ";charset=" + characterEncoding);
-		return this.delegate.getWriter();
-	}
-
-	public PrintWriter getWriter(String contentType) throws IOException {
-		this.delegate.setContentType(contentType);
-		return this.delegate.getWriter();
-	}
-
-    public void setCharacterEncoding(String characterEncoding) {
-		this.delegate.setCharacterEncoding(characterEncoding);
-	}
-
-	public void setContentLength(int contentLength) {
-		this.delegate.setContentLength(contentLength);
-	}
-
-	public void setContentType(String contentType) {
-		this.delegate.setContentType(contentType);
-	}
-
-	public void setBufferSize(int bufferSize) {
-		this.delegate.setBufferSize(bufferSize);
-	}
-
-	public int getBufferSize() {
-		return this.delegate.getBufferSize();
-	}
-
-	public void flushBuffer() throws IOException {
-		this.delegate.flushBuffer();
-	}
-
-	public void resetBuffer() {
-		this.delegate.resetBuffer();
-	}
-
-	public boolean isCommitted() {
-		return this.delegate.isCommitted();
-	}
-
-	public void reset() {
-		this.delegate.reset();
-	}
-
-	public void setLocale(Locale locale) {
-		this.delegate.setLocale(locale);
-	}
-
-	public Locale getLocale() {
-		return this.delegate.getLocale();
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsReloadServletFilter.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsReloadServletFilter.java
deleted file mode 100644
index 1f4f5be..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsReloadServletFilter.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.servlet.filter;
-
-import groovy.lang.GroovyClassLoader;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.grails.commons.*;
-import org.codehaus.groovy.grails.commons.spring.GrailsResourceHolder;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsUrlHandlerMapping;
-import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController;
-import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator;
-import org.springframework.aop.target.HotSwappableTargetSource;
-import org.springframework.context.ApplicationContext;
-import org.springframework.core.io.Resource;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.filter.OncePerRequestFilter;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * A servlet filter that copies resources from the source on content change and manages reloading if necessary
- *
- * @author Graeme Rocher
- * @since Jan 10, 2006
- */
-public class GrailsReloadServletFilter extends OncePerRequestFilter {
-
-    public static final Log LOG = LogFactory.getLog(GrailsReloadServletFilter.class);
-
-    private ResourceCopier copyScript;
-    private ApplicationContext context;
-    private GrailsApplication application;
-    private boolean initialised = false;
-    private Map resourceMetas = Collections.synchronizedMap(new HashMap());
-    private GrailsTemplateGenerator templateGenerator;
-
-    class ResourceMeta {
-        long lastModified;
-        String className;
-        Class clazz;
-        URL url;
-    }
-
-    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
-      context = (ApplicationContext)getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
-
-      if(context == null) {
-          filterChain.doFilter(httpServletRequest,httpServletResponse);
-          return;
-      }
-      application = (GrailsApplication)context.getBean(GrailsApplication.APPLICATION_ID);
-      if(application == null) {
-          filterChain.doFilter(httpServletRequest,httpServletResponse);
-          return;
-      }
-
-      if(copyScript == null) {
-          GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-
-          Class groovyClass;
-          try {
-              groovyClass = gcl.parseClass(gcl.getResource("org/codehaus/groovy/grails/web/servlet/filter/GrailsResourceCopier.groovy").openStream());
-              copyScript = (ResourceCopier)groovyClass.newInstance();
-              groovyClass = gcl.parseClass(gcl.getResource("org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy").openStream());
-              templateGenerator = (GrailsTemplateGenerator)groovyClass.newInstance();
-              templateGenerator.setOverwrite(true);
-              // perform initial generation of views
-              GrailsControllerClass[] controllers = application.getControllers();
-              for (int i = 0; i < controllers.length; i++) {
-                  GrailsControllerClass controller = controllers[i];
-                  if(controller.isScaffolding()) {
-                    Class clazz = controller.getScaffoldedClass();
-                    GrailsDomainClass domainClass;
-                    if(clazz != null) {
-                       domainClass = application.getGrailsDomainClass(clazz.getName());
-                    }
-                    else {
-                       domainClass = application.getGrailsDomainClass(controller.getName());
-                    }
-                    if(domainClass != null) {
-                        // generate new views
-                        templateGenerator.generateViews(domainClass,getServletContext().getRealPath("/WEB-INF"));
-                    }
-                  }
-              }
-            // overwrite with user defined views
-            copyScript.copyViews(true);
-          } catch (IllegalAccessException e) {
-              LOG.error("Illegal access creating resource copier. Save/reload disabled: " + e.getMessage(), e);
-          } catch (InstantiationException e) {
-              LOG.error("Error instantiating resource copier. Save/reload disabled: " + e.getMessage(), e);
-          } catch (CompilationFailedException e) {
-               LOG.error("Error compiling resource copier. Save/reload disabled: " + e.getMessage(), e);
-          } catch(Exception e) {
-             LOG.error("Error loading resource copier. Save/reload disabled: " + e.getMessage(), e);
-          }
-        }
-        if(copyScript != null) {
-            copyScript.copyGrailsApp();
-        }
-
-        GrailsResourceHolder resourceHolder = (GrailsResourceHolder)context.getBean(GrailsResourceHolder.APPLICATION_CONTEXT_ID);
-        Resource[] resources = resourceHolder.getResources();
-
-        if(!initialised) {
-            for (int i = 0; i < resources.length; i++) {
-                Resource resource = resources[i];
-                String className = resourceHolder.getClassName(resources[i]);
-                URL url = resource.getURL();
-                URLConnection c = url.openConnection();
-                c.setDoInput(false);
-                c.setDoOutput(false);
-                long lastModified = c.getLastModified();
-
-                ResourceMeta rm = new ResourceMeta();
-                rm.className = className;
-                rm.lastModified = lastModified;
-                rm.url = url;
-                resourceMetas.put(className, rm);
-            }
-
-            initialised = true;
-        }
-        else {
-
-            for (int i = 0; i < resources.length; i++) {
-                Resource resource = resources[i];
-                String className = resourceHolder.getClassName(resources[i]);
-
-                Class loadedClass = null;
-                boolean isNew = false;
-                // if its not in the resource metas its new.. so load it
-                try {
-                    if(!resourceMetas.containsKey(className)) {
-                        // add to resource metas
-                        URL url = resource.getURL();
-                        URLConnection c = url.openConnection();
-                        c.setDoInput(false);
-                        c.setDoOutput(false);
-                        long lastModified = c.getLastModified();
-
-                        ResourceMeta rm = new ResourceMeta();
-                        rm.className = className;
-                        rm.lastModified = lastModified;
-                        rm.url = url;
-                        resourceMetas.put(className, rm);
-                        // load class
-                        GroovyClassLoader gcl = application.getClassLoader();
-                        ((GrailsResourceLoader)gcl.getResourceLoader()).setResources(resources);
-                        loadedClass = gcl.loadClass(className,true,false);
-                        // set as new
-                        isNew = true;
-                    }
-                    // otherwise check the last modified date
-                    else {
-                        ResourceMeta rm = (ResourceMeta)resourceMetas.get(className);
-                        URL url = resource.getURL();
-                        URLConnection c = url.openConnection();
-                        // if its been modified reload it
-                        if(rm.lastModified < c.getLastModified()) {
-                            loadedClass = application
-                                        .getClassLoader()
-                                        .loadClass(className,true,false);
-                            rm.lastModified = c.getLastModified();
-                        }
-                    }
-                }
-                catch(ClassNotFoundException cnfex) {
-                     LOG.error("Unabled to reload class ["+className+"], class not found: " + cnfex.getMessage(),cnfex);
-                }
-
-                // if the loaded class is not null then we have a change
-                if(loadedClass != null) {
-                    // so establish the type and take the appropriate action
-                    if(GrailsClassUtils.isControllerClass(loadedClass)) {
-                        loadControllerClass(loadedClass,isNew);
-                    }
-                    else if(GrailsClassUtils.isDomainClass(loadedClass)) {
-                        loadDomainClass(loadedClass,isNew);
-                    }
-                    else if(GrailsClassUtils.isService(loadedClass)) {
-                        loadServiceClass(loadedClass,isNew);
-                    }
-                    else if(GrailsClassUtils.isTagLibClass(loadedClass)) {
-                        loadTagLibClass(loadedClass, isNew);
-                    }
-                }
-            }
-        }
-
-        filterChain.doFilter(httpServletRequest,httpServletResponse);
-    }
-
-    private void loadServiceClass(Class loadedClass, boolean isNew) {
-
-        GrailsServiceClass serviceClass = application.addServiceClass(loadedClass);
-        if(serviceClass.isTransactional()) {
-            LOG.warn("Cannot reload class ["+loadedClass+"] reloading of transactional service classes is not currently possible. Set class to non-transactional first.");
-        }
-        else {
-            // reload whole context
-            reloadApplicationContext();
-            /* if(serviceClass != null) {
-                // if its a new taglib, reload app context
-                if(isNew) {
-                    reloadApplicationContext();
-                }
-                else {
-                    // swap target source in app context
-                    HotSwappableTargetSource targetSource = (HotSwappableTargetSource)context.getBean(serviceClass.getFullName() + "TargetSource");
-                    targetSource.swap(serviceClass.newInstance());
-                }
-            }*/
-        }
-    }
-
-    private void loadTagLibClass(Class loadedClass, boolean isNew) {
-        GrailsTagLibClass tagLibClass = application.addTagLibClass(loadedClass);
-        if(tagLibClass != null) {
-            // if its a new taglib, reload app context
-            if(isNew) {
-                reloadApplicationContext();
-            }
-            else {
-                // swap target source in app context
-                HotSwappableTargetSource targetSource = (HotSwappableTargetSource)context.getBean(tagLibClass.getFullName() + "TargetSource");
-                targetSource.swap(tagLibClass);
-            }
-        }
-    }
-
-    private void loadDomainClass(Class loadedClass, boolean isNew) {
-        GrailsDomainClass domainClass = application.addDomainClass(loadedClass);
-
-        reloadApplicationContext();
-        GrailsControllerClass controllerClass = application.getScaffoldingController(domainClass);
-        if(controllerClass != null && controllerClass.isScaffolding()) {
-            // generate new views
-            templateGenerator.generateViews(domainClass,getServletContext().getRealPath("/WEB-INF"));
-            // overwrite with user defined views
-            copyScript.copyViews(true);
-        }
-    }
-
-    private void loadControllerClass(Class loadedClass, boolean isNew) {
-        GrailsControllerClass controllerClass = application.addControllerClass(loadedClass);
-        if(controllerClass != null) {
-             // if its a new controller re-generate web.xml, reload app context
-            if(isNew) {
-                reloadApplicationContext();
-                LOG.info("New controller added, re-generating web.xml");
-                copyScript.generateWebXml();
-            }
-            else {
-                // regenerate controller urlMap
-                Properties mappings = new Properties();
-                for (int i = 0; i < application.getControllers().length; i++) {
-                    GrailsControllerClass simpleController = application.getControllers()[i];
-                    for (int x = 0; x < simpleController.getURIs().length; x++) {
-                        if(!mappings.containsKey(simpleController.getURIs()[x]))
-                            mappings.put(simpleController.getURIs()[x], SimpleGrailsController.APPLICATION_CONTEXT_ID);
-                    }
-                }
-                for (int i = 0; i < application.getPageFlows().length; i++) {
-                    GrailsPageFlowClass pageFlow = application.getPageFlows()[i];
-                    mappings.put(pageFlow.getUri(), pageFlow.getFullName() + "Controller");
-                }
-
-                HotSwappableTargetSource urlMappingsTargetSource = (HotSwappableTargetSource)context.getBean(GrailsUrlHandlerMapping.APPLICATION_CONTEXT_TARGET_SOURCE);
-
-                GrailsUrlHandlerMapping urlMappings = new GrailsUrlHandlerMapping();
-                urlMappings.setApplicationContext(context);
-                urlMappings.setMappings(mappings);
-                urlMappings.initApplicationContext();
-
-                urlMappingsTargetSource.swap(urlMappings);
-
-
-                // swap target source in app context
-                HotSwappableTargetSource controllerTargetSource = (HotSwappableTargetSource)context.getBean(controllerClass.getFullName() + "TargetSource");
-                controllerTargetSource.swap(controllerClass);
-            }
-        }
-    }
-
-    private void reloadApplicationContext() {
-        WebApplicationContext parent = (WebApplicationContext)getServletContext().getAttribute(GrailsApplicationAttributes.PARENT_APPLICATION_CONTEXT);
-        // construct the SpringConfig for the container managed application
-        if(this.application == null)
-            this.application = (GrailsApplication) parent.getBean(GrailsApplication.APPLICATION_ID, GrailsApplication.class);
-
-        SpringConfig springConfig = new SpringConfig(application);
-        // return a context that obeys grails' settings
-
-        context = new XmlApplicationContextDriver().getApplicationContext(
-                    springConfig.getBeanReferences(),
-                    parent
-                );
-
-       getServletContext().setAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT, context );
-
-        // re-configure scaffolders
-        GrailsConfigUtils.configureScaffolders(application,context);
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsResourceCopier.groovy b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsResourceCopier.groovy
deleted file mode 100644
index ce69b79..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/GrailsResourceCopier.groovy
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.codehaus.groovy.grails.web.servlet.filter;
-class GrailsResourceCopier implements ResourceCopier {
-
-    @Property String basedir = "."
-    @Property String destdir = "./tmp/war"
-
-    def ant = new AntBuilder()
-
-    public void copyGrailsApp() {
-        if(new File("${basedir}/grails-app").exists()) {
-            ant.copy(todir:"${destdir}/WEB-INF/grails-app",failonerror:false) {
-                fileset(dir:"${basedir}/grails-app",includes:"**")
-            }
-            ant.copy(todir:"${destdir}/WEB-INF/classes",failonerror:false) {
-                fileset(dir:"${basedir}/grails-app/i18n",includes:"**")
-            }
-        }
-    }
-
-    public void copyViews(boolean shouldOverwrite) {
-        if(new File("${basedir}/grails-app/views").exists()) {
-            ant.copy(todir:"${destdir}/WEB-INF/grails-app/views",failonerror:false,overwrite:shouldOverwrite) {
-                fileset(dir:"${basedir}/grails-app/views",includes:"**")
-            }
-        }
-    }
-
-    public void generateWebXml() {
-        def controllersHome = new File("${basedir}/grails-app/controllers")
-        if(controllersHome.exists()) {
-            println "base directory exists re-creating web.xml"
-            def controllers = []
-            def flows = []
-            controllersHome.eachFileRecurse {
-                def match = it.name =~ "(\\w+)(Controller.groovy\$)"
-                if(match) {
-                    def controllerName = match[0][1]
-                    controllerName = controllerName[0].toLowerCase() + controllerName[1..-1]
-                    controllers << controllerName
-                }
-                match = it.name =~ "(\\w+)(PageFlow.groovy\$)"
-                if(match) {
-                    def flowName = match[0][1]
-                    flowName = flowName[0].toLowerCase() + flowName[1..-1]
-                    flows << flowName
-                }
-            }
-            def binding = [ "controllers" : controllers,
-                            "flows" : flows,
-                            "basedir" : "${basedir}",
-                            "destdir" : "${basedir}",
-                            "dev" : true     ]
-            def engine = new groovy.text.SimpleTemplateEngine()
-            def template = engine.createTemplate( new File("${basedir}/web-app/WEB-INF/web.template.xml"  ).text ).make(binding)
-
-            new File("${destdir}/WEB-INF/web.xml" ).write( template.toString() )
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/ResourceCopier.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/ResourceCopier.java
deleted file mode 100644
index 00e572f..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/filter/ResourceCopier.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.servlet.filter;
-
-/**
- * @author Graeme Rocher
- * @since 17-Feb-2006
- */
-public interface ResourceCopier {
-
-    /**
-     * Copies the whole grails-app replacing any changes
-     */
-    void copyGrailsApp();
-
-    /**
-     * Copies only the views
-     *
-     * @param shouldOverwrite Whether the views should be overwritten
-     */
-    void copyViews(boolean shouldOverwrite);
-
-    /**
-     * The basedir to copy from (defaults to ".")
-     * @param basedir
-     */
-    void setBasedir(String basedir);
-
-    /**
-     * * The destdir to copy destdir (defaults to "./tmp/war")
-     * @param destdir
-     */
-    void setDestdir(String destdir);
-
-    /**
-     * Re-generates the web.xml file
-     */
-    void generateWebXml();
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsControllerHelper.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsControllerHelper.java
deleted file mode 100644
index ad8c537..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsControllerHelper.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import org.codehaus.groovy.grails.commons.GrailsControllerClass;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.ServletContext;
-import java.util.Map;
-/**
- * An interface for a helper class that processes Grails controller requests and responses 
- * 
- * @author Graeme Rocher
- * @since Oct 27, 2005
- */
-public interface GrailsControllerHelper {
-
-    /**
-     * @return The servlet context instance
-     */
-    public abstract ServletContext getServletContext();
-    /**
-	 * Retrieves a controller class for the specified class name
-	 * @param className
-	 * @return  The controller class or null
-	 */
-	public abstract GrailsControllerClass getControllerClassByName(String className);
-
-	/**
-	 * Retrieves a GrailsControllerClass by URI
-	 * 
-	 * @param uri The URI to lookup
-	 * @return A GrailsControllerClass 
-	 */
-	public abstract GrailsControllerClass getControllerClassByURI(String uri);
-	/**
-	 * Creates a new controller instance for the specified GrailsControllerClass
-	 * @param controllerClass The GrailsControllerClass
-	 * @return A new controller instance
-	 */	
-	public abstract GroovyObject getControllerInstance(
-			GrailsControllerClass controllerClass);
-	
-	/**
-	 * Retreives the scaffolder for the specified controller
-	 * @param controllerName The controller name
-	 * @return The scaffolder or null
-	 */
-	public abstract GrailsScaffolder getScaffolderForController(String controllerName);
-	/**
-	 * Handles a Grails URI
-	 * @param uri The URI to processs
-	 * @param request The request instance
-	 * @param response The response instance
-	 * @return A ModelAndView instance
-	 */
-	public abstract ModelAndView handleURI(String uri,
-			HttpServletRequest request, HttpServletResponse response);
-
-	/**
-	 * Handles a Controller action
-	 * 
-	 * @param action An action Closure instance
-	 * @param request The request object
-	 * @param response The response
-	 * 
-	 * @return The action response
-	 */
-	public abstract Object handleAction(GroovyObject controller,Closure action,HttpServletRequest request, HttpServletResponse response);
-	
-	/**
-	 * Handles a Controller action
-	 * 
-	 * @param action An action Closure instance
-	 * @param request The request object
-	 * @param response The response
-	 * @param params A Map of controller parameters
-	 * 
-	 * @return The action response
-	 */
-	public abstract Object handleAction(GroovyObject controller,Closure action,HttpServletRequest request, HttpServletResponse response, Map params);
-	
-	/**
-	 * Processes an action response for the specified arguments
-	 * 
-	 * @param controller The controller instance
-	 * @param returnValue The response from the closure
-	 * @param closurePropertyName The property name of the closure
-	 * @param viewName The name of the view
-	 * 
-	 * @return A ModelAndView object
-	 */
-	public abstract ModelAndView handleActionResponse(
-			GroovyObject controller, Object returnValue,
-			String closurePropertyName, String viewName);
-
-	/**
-	 * Handles a Grails URI
-	 * @param uri The URI to processs
-	 * @param request The request instance
-	 * @param response The response instance
-	 * @param params A map of controller parameters
-	 * @return A ModelAndView instance
-	 */
-	public abstract ModelAndView handleURI(String uri,
-			HttpServletRequest request, HttpServletResponse response, Map params);
-
-
-    /**
-     *
-     * @return Returns the grails request attributes instance
-     */
-    GrailsApplicationAttributes getGrailsAttributes();
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsUrlHandlerMapping.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsUrlHandlerMapping.java
deleted file mode 100644
index be07d12..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/GrailsUrlHandlerMapping.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc;
-
-import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
-import org.springframework.web.util.UrlPathHelper;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * <p>Class that handles URL mapping for Grails
- * 
- * @author Graeme Rocher
- * @since Dec 15, 2005
- */
-public class GrailsUrlHandlerMapping extends SimpleUrlHandlerMapping {
-
-    public static final String APPLICATION_CONTEXT_ID = "handlerMapping";
-    public static final String APPLICATION_CONTEXT_TARGET_SOURCE = "handlerMappingTargetSource";
-
-    private UrlPathHelper urlPathHelper = new UrlPathHelper();
-	
-	/* (non-Javadoc)
-	 * @see org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#getHandlerInternal(javax.servlet.http.HttpServletRequest)
-	 */
-	protected Object getHandlerInternal(HttpServletRequest request) throws Exception {
-		String appPath = urlPathHelper.getPathWithinApplication(request);
-		if (logger.isDebugEnabled()) {
-			logger.debug("Looking up handler for [" + appPath + "]");
-		}
-		return lookupHandler(appPath);
-	}
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsController.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsController.java
deleted file mode 100644
index bac37ca..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsController.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.servlet.mvc;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.context.ServletContextAware;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.Controller;
-import org.springframework.web.util.UrlPathHelper;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * <p>Base class for Grails controllers.
- *
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class SimpleGrailsController implements Controller, ServletContextAware {
-
-    public static final String APPLICATION_CONTEXT_ID = "simpleGrailsController";
-    
-    private UrlPathHelper urlPathHelper = new UrlPathHelper();
-    private GrailsApplication application = null;
-    private ServletContext servletContext;
-    private GrailsControllerHelper helper;
-
-    private static final Log LOG = LogFactory.getLog(SimpleGrailsController.class);
-
-
-    public SimpleGrailsController() {
-        super();
-    }
-
-
-    public void setGrailsApplication(GrailsApplication application) {
-        this.application = application;
-    }
-
-    /**
-     * <p>This method wraps regular request and response objects into Grails request and response objects.
-     *
-     * <p>It can handle maps as model types next to ModelAndView instances.
-     *
-     * @param request HTTP request
-     * @param response HTTP response
-     * @return the model
-     */
-    public ModelAndView handleRequest(HttpServletRequest request,
-                                      HttpServletResponse response) throws Exception {
-        // Step 1: determine the correct URI of the request.
-        String uri = this.urlPathHelper.getPathWithinApplication(request);
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("[SimpleGrailsController] Processing request for uri ["+uri+"]");
-        }
-
-        ApplicationContext context = (ApplicationContext)this.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
-        this.helper = new SimpleGrailsControllerHelper(this.application,context,this.servletContext);
-        ModelAndView mv = helper.handleURI(uri,request,response);
-
-        if(LOG.isDebugEnabled()) {
-            if(mv != null) {
-                LOG.debug("[SimpleGrailsController] Forwarding to view ["+mv.getViewName()+"] with model ["+mv.getModel()+"]");    
-            }
-        }
-        return mv;
-    }
-
-    public void setServletContext(ServletContext servletContext) {
-        this.servletContext = servletContext;
-    }
-
-    public ServletContext getServletContext() {
-        return this.servletContext;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerHelper.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerHelper.java
deleted file mode 100644
index 9db836f..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerHelper.java
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.ProxyMetaClass;
-import groovy.util.Proxy;
-import org.apache.commons.collections.BeanMap;
-import org.apache.commons.collections.map.CompositeMap;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsControllerClass;
-import org.codehaus.groovy.grails.commons.GrailsClassUtils;
-import org.codehaus.groovy.grails.commons.metaclass.GenericDynamicProperty;
-import org.codehaus.groovy.grails.scaffolding.GrailsScaffolder;
-import org.codehaus.groovy.grails.web.metaclass.ChainDynamicMethod;
-import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods;
-import org.codehaus.groovy.grails.web.metaclass.GetParamsDynamicProperty;
-import org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.FlashScope;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.NoClosurePropertyForURIException;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.NoViewNameDefinedException;
-import org.codehaus.groovy.grails.web.servlet.mvc.exceptions.UnknownControllerException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.IntrospectionException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-public class SimpleGrailsControllerHelper implements GrailsControllerHelper {
-
-    private static final String SCAFFOLDER = "Scaffolder";
-
-    private GrailsApplication application;
-    private ApplicationContext applicationContext;
-    private Map chainModel = Collections.EMPTY_MAP;
-    private ControllerDynamicMethods interceptor;
-    private GrailsScaffolder scaffolder;
-    private ServletContext servletContext;
-    private GrailsApplicationAttributes grailsAttributes;
-    private Pattern uriPattern = Pattern.compile("/(\\w+)/?(\\w*)/?(\\w*)/?(.*)");
-    private static final Log LOG = LogFactory.getLog(SimpleGrailsControllerHelper.class);
-    private static final String DISPATCH_ACTION_PARAMETER = "_action";
-    private static final String ID_PARAMETER = "id";
-
-    public SimpleGrailsControllerHelper(GrailsApplication application, ApplicationContext context, ServletContext servletContext) {
-        super();
-        this.application = application;
-        this.applicationContext = context;
-        this.servletContext = servletContext;
-        this.grailsAttributes = new DefaultGrailsApplicationAttributes(this.servletContext);
-    }
-
-    public ServletContext getServletContext() {
-        return this.servletContext;
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#getControllerClassByName(java.lang.String)
-      */
-    public GrailsControllerClass getControllerClassByName(String name) {
-        return this.application.getController(name);
-    }
-
-    public GrailsScaffolder getScaffolderForController(String controllerName) {
-        GrailsControllerClass controllerClass = getControllerClassByName(controllerName);
-        return (GrailsScaffolder)applicationContext.getBean( controllerClass.getFullName() + SCAFFOLDER );
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#getControllerClassByURI(java.lang.String)
-      */
-    public GrailsControllerClass getControllerClassByURI(String uri) {
-        return this.application.getControllerByURI(uri);
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#getControllerInstance(org.codehaus.groovy.grails.commons.GrailsControllerClass)
-      */
-    public GroovyObject getControllerInstance(GrailsControllerClass controllerClass) {
-        return (GroovyObject)this.applicationContext.getBean(controllerClass.getFullName());
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#handleURI(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
-      */
-    public ModelAndView handleURI(String uri, HttpServletRequest request, HttpServletResponse response) {
-        return handleURI(uri,request,response,Collections.EMPTY_MAP);
-    }
-
-
-
-    /**
-     * If in Proxy's are used in the Groovy context, unproxy (is that a word?) them by setting
-     * the adaptee as the value in the map so that they can be used in non-groovy view technologies
-     *
-     * @param model The model as a map
-     */
-    private void removeProxiesFromModelObjects(Map model) {
-
-        for (Iterator keyIter = model.keySet().iterator(); keyIter.hasNext();) {
-            Object current = keyIter.next();
-            Object modelObject = model.get(current);
-            if(modelObject instanceof Proxy) {
-                model.put( current, ((Proxy)modelObject).getAdaptee() );
-            }
-        }
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#handleURI(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.util.Map)
-      */
-    public ModelAndView handleURI(String uri, HttpServletRequest request, HttpServletResponse response, Map params) {
-        if(uri == null)
-            throw new IllegalArgumentException("Controller URI [" + uri + "] cannot be null!");
-
-        // step 1: process the uri
-        if (uri.indexOf("?") > -1) {
-            uri = uri.substring(0, uri.indexOf("?"));
-        }
-        if(uri.indexOf('\\') > -1) {
-            uri = uri.replaceAll("\\\\", "/");
-        }
-        if(!uri.startsWith("/"))
-            uri = '/' + uri;
-        if(uri.endsWith("/"))
-            uri = uri.substring(0,uri.length() - 1);
-
-        String id = null;
-        String controllerName = null;
-        String actionName = null;
-        Map extraParams = Collections.EMPTY_MAP;
-        Matcher m = uriPattern.matcher(uri);
-        if(m.find()) {
-            controllerName = m.group(1);
-            actionName =  m.group(2);
-            uri = '/' + controllerName + '/' + actionName;
-            id = m.group(3);
-            String extraParamsString = m.group(4);
-            if(extraParamsString != null && extraParamsString.indexOf('/') > - 1) {
-                String[] tokens = extraParamsString.split("/");
-                extraParams = new HashMap();
-                for (int i = 0; i < tokens.length; i++) {
-                    String token = tokens[i];
-                    if(i == 0 || ((i % 2) == 0)) {
-                        if((i + 1) < tokens.length) {
-                            extraParams.put(token, tokens[i + 1]);
-                        }
-                    }
-                }
-
-            }
-        }
-        // if the action name is blank check its included as dispatch parameter
-        if(StringUtils.isBlank(actionName) && request.getParameter(DISPATCH_ACTION_PARAMETER) != null) {
-            actionName = GrailsClassUtils.getPropertyNameRepresentation(request.getParameter(DISPATCH_ACTION_PARAMETER));
-            uri = '/' + controllerName + '/' + actionName;
-        }
-        // if the id is blank check if its a request parameter
-        if(StringUtils.isBlank(id) && request.getParameter(ID_PARAMETER) != null) {
-            id = request.getParameter(ID_PARAMETER);
-        }
-        if(LOG.isDebugEnabled()) {
-            LOG.debug("Processing request for controller ["+controllerName+"], action ["+actionName+"], and id ["+id+"]");
-        }
-        if(LOG.isTraceEnabled()) {
-            LOG.trace("Extra params from uri ["+extraParams+"] ");
-        }
-        // Step 2: lookup the controller in the application.
-        GrailsControllerClass controllerClass = getControllerClassByURI(uri);
-
-        // parse the uri in its individual tokens
-        controllerName = WordUtils.uncapitalize(controllerClass.getName());
-
-        if (controllerClass == null) {
-            throw new UnknownControllerException("No controller found for URI [" + uri + "]!");
-        }
-
-
-        // Step 3: load controller from application context.
-        GroovyObject controller = getControllerInstance(controllerClass);
-
-        request.setAttribute( GrailsApplicationAttributes.CONTROLLER, controller );
-
-        // Step 3a: Configure a proxy interceptor for controller dynamic methods for this request
-        if(this.interceptor == null) {
-            try {
-                interceptor = new ControllerDynamicMethods(controller,this,request,response);
-            }
-            catch(IntrospectionException ie) {
-                throw new ControllerExecutionException("Error creating dynamic controller methods for controller ["+controller.getClass()+"]: " + ie.getMessage(), ie);
-            }
-        }
-        // Step 3b: if scaffolding retrieve scaffolder
-        if(controllerClass.isScaffolding())  {
-            this.scaffolder = (GrailsScaffolder)applicationContext.getBean( controllerClass.getFullName() + SCAFFOLDER );
-            if(this.scaffolder == null)
-                throw new IllegalStateException("Scaffolding set to true for controller ["+controllerClass.getFullName()+"] but no scaffolder available!");
-        }
-
-        // Step 4: get closure property name for URI.
-        if(StringUtils.isBlank(actionName))
-            actionName = controllerClass.getClosurePropertyName(uri);
-
-        if (StringUtils.isBlank(actionName)) {
-            // Step 4a: Check if scaffolding
-            if( controllerClass.isScaffolding() && !scaffolder.supportsAction(actionName))
-                throw new NoClosurePropertyForURIException("Could not find closure property for URI [" + uri + "] for controller [" + controllerClass.getFullName() + "]!");
-        }
-
-        // Step 4a: Set dynamic properties on controller
-
-        controller.setProperty(ControllerDynamicMethods.CONTROLLER_URI_PROPERTY, '/' + controllerName);
-        controller.setProperty(ControllerDynamicMethods.ACTION_URI_PROPERTY, '/' + controllerName + '/' + actionName);
-
-        // populate additional params from url
-        Map controllerParams = (Map)controller.getProperty(GetParamsDynamicProperty.PROPERTY_NAME);
-        if(!StringUtils.isBlank(id)) {
-            controllerParams.put(GrailsApplicationAttributes.ID_PARAM, id);
-        }
-        if(!extraParams.isEmpty()) {
-            for (Iterator i = extraParams.keySet().iterator(); i.hasNext();) {
-                String name = (String) i.next();
-                controllerParams.put(name,extraParams.get(name));
-            }
-        }
-
-        // set the flash scope instance to its next state and set on controller
-        FlashScope fs = this.grailsAttributes.getFlashScope(request);
-        fs.next();
-
-        controller.setProperty(ControllerDynamicMethods.FLASH_SCOPE_PROPERTY,fs);
-
-        // Step 5: get the view name for this URI.
-        String viewName = controllerClass.getViewByURI(uri);
-
-        // Step 6: get closure from closure property
-        Closure action = (Closure)controller.getProperty(actionName);
-
-        if(action == null)
-            throw new IllegalStateException("Scaffolder supports action ["+actionName +"] for controller ["+controllerClass.getFullName()+"] but getAction returned null!");
-
-
-        // Step 7: process the action
-        Object returnValue = handleAction( controller,action,request,response,params );
-
-
-        // Step 8: determine return value type and handle accordingly
-        return handleActionResponse(controller,returnValue,actionName,viewName);
-    }
-
-    public GrailsApplicationAttributes getGrailsAttributes() {
-        return this.grailsAttributes;
-    }
-
-    public Object handleAction(GroovyObject controller,Closure action, HttpServletRequest request, HttpServletResponse response) {
-        return handleAction(controller,action,request,response,Collections.EMPTY_MAP);
-    }
-
-    public Object handleAction(GroovyObject controller,Closure action, HttpServletRequest request, HttpServletResponse response, Map params) {
-            if(interceptor == null) {
-                ProxyMetaClass pmc = (ProxyMetaClass)controller.getMetaClass();
-                interceptor = (ControllerDynamicMethods)pmc.getInterceptor();
-            }
-            // if there are additional params add them to the params dynamic property
-            if(params != null && !params.isEmpty()) {
-                GetParamsDynamicProperty paramsProp = (GetParamsDynamicProperty)interceptor.getDynamicProperty( GetParamsDynamicProperty.PROPERTY_NAME );
-                paramsProp.addParams( params );
-            }
-            // check the chain model is not empty and add it
-            if(!this.chainModel.isEmpty()) {
-                // get the "chainModel" property
-                GenericDynamicProperty chainProperty = (GenericDynamicProperty)interceptor.getDynamicProperty(ChainDynamicMethod.PROPERTY_CHAIN_MODEL);
-                // if it doesn't exist create it
-                if(chainProperty == null) {
-                    interceptor.addDynamicProperty( new GenericDynamicProperty( ChainDynamicMethod.PROPERTY_CHAIN_MODEL,Map.class,this.chainModel,false ) );
-                }
-                else {
-                    // otherwise add to it
-                    Map chainPropertyModel = (Map)chainProperty.get(controller);
-                    chainPropertyModel.putAll( this.chainModel );
-                    this.chainModel = chainPropertyModel;
-                }
-            }
-
-
-
-        // Step 7: determine argument count and execute.
-        Object returnValue = action.call();
-
-        // Step 8: add any errors to the request
-        request.setAttribute( GrailsApplicationAttributes.ERRORS, controller.getProperty(ControllerDynamicMethods.ERRORS_PROPERTY) );
-
-        return returnValue;
-    }
-
-    /* (non-Javadoc)
-      * @see org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper#handleActionResponse(org.codehaus.groovy.grails.commons.GrailsControllerClass, java.lang.Object, java.lang.String, java.lang.String)
-      */
-    public ModelAndView handleActionResponse( GroovyObject controller,Object returnValue,String closurePropertyName, String viewName) {
-        boolean viewNameBlank = (viewName == null || viewName.length() == 0);
-        // reset the metaclass
-        ModelAndView explicityModelAndView = (ModelAndView)controller.getProperty(ControllerDynamicMethods.MODEL_AND_VIEW_PROPERTY);
-        Boolean renderView = (Boolean)controller.getProperty(ControllerDynamicMethods.RENDER_VIEW_PROPERTY);
-        FlashScope fs = this.grailsAttributes.getFlashScope((HttpServletRequest)controller.getProperty(ControllerDynamicMethods.REQUEST_PROPERTY));
-        if(fs.containsKey(ChainDynamicMethod.PROPERTY_CHAIN_MODEL)) {
-            this.chainModel = (Map)fs.get(ChainDynamicMethod.PROPERTY_CHAIN_MODEL);
-            if(this.chainModel == null)
-                this.chainModel = Collections.EMPTY_MAP;
-        }
-
-
-        if(renderView == null) renderView = Boolean.TRUE;
-
-        if(!renderView.booleanValue()) {
-            return null;
-        }
-        else if(explicityModelAndView != null) {
-            return explicityModelAndView;
-        }
-        else if (returnValue == null) {
-            if (viewNameBlank) {
-                return null;
-            } else {
-                Map model;
-                if(!this.chainModel.isEmpty()) {
-                    model = new CompositeMap(this.chainModel, new BeanMap(controller));
-                }
-                else {
-                    model = new BeanMap(controller);
-                }
-
-                return new ModelAndView(viewName, model);
-            }
-        } else if (returnValue instanceof Map) {
-            // remove any Proxy wrappers and set the adaptee as the value
-            Map returnModel = (Map)returnValue;
-            removeProxiesFromModelObjects(returnModel);
-            if(!this.chainModel.isEmpty()) {
-                returnModel.putAll(this.chainModel);
-            }
-            return new ModelAndView(viewName, returnModel);
-
-        } else if (returnValue instanceof ModelAndView) {
-            ModelAndView modelAndView = (ModelAndView)returnValue;
-
-            // remove any Proxy wrappers and set the adaptee as the value
-            Map modelMap = modelAndView.getModel();
-            removeProxiesFromModelObjects(modelMap);
-
-            if(!this.chainModel.isEmpty()) {
-                modelAndView.addAllObjects(this.chainModel);
-            }
-
-            if (modelAndView.getView() == null && modelAndView.getViewName() == null) {
-                if (viewNameBlank) {
-                    throw new NoViewNameDefinedException("ModelAndView instance returned by and no view name defined by nor for closure on property [" + closurePropertyName + "] in controller [" + controller.getClass() + "]!");
-                } else {
-                    modelAndView.setViewName(viewName);
-                }
-            }
-            return modelAndView;
-        }
-        else {
-            Map model;
-            if(!this.chainModel.isEmpty()) {
-                model = new CompositeMap(this.chainModel, new BeanMap(controller));
-            }
-            else {
-                model = new BeanMap(controller);
-            }
-            return new ModelAndView(viewName, model);
-        }
-    }
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/ControllerExecutionException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/ControllerExecutionException.java
deleted file mode 100644
index 0479e49..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/ControllerExecutionException.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-public class ControllerExecutionException extends GrailsMVCException {
-
-	public ControllerExecutionException() {
-		super();
-		// TODO Auto-generated constructor stub
-	}
-
-	public ControllerExecutionException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-		// TODO Auto-generated constructor stub
-	}
-
-	public ControllerExecutionException(String arg0) {
-		super(arg0);
-		// TODO Auto-generated constructor stub
-	}
-
-	public ControllerExecutionException(Throwable arg0) {
-		super(arg0);
-		// TODO Auto-generated constructor stub
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/GrailsMVCException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/GrailsMVCException.java
deleted file mode 100644
index 786a4e3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/GrailsMVCException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-
-/**
- * <p>Thrown when an unrecoverable error occured in the Grails MVC framework.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public abstract class GrailsMVCException extends GrailsException {
-
-	public GrailsMVCException() {
-		super();
-	}
-
-	public GrailsMVCException(String arg0) {
-		super(arg0);
-	}
-
-	public GrailsMVCException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public GrailsMVCException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/IncompatibleParameterCountException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/IncompatibleParameterCountException.java
deleted file mode 100644
index 0420e78..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/IncompatibleParameterCountException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when a closure has an incompatible parameter count for a controller implementation.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class IncompatibleParameterCountException extends GrailsMVCException {
-
-	public IncompatibleParameterCountException() {
-		super();
-	}
-
-	public IncompatibleParameterCountException(String arg0) {
-		super(arg0);
-	}
-
-	public IncompatibleParameterCountException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public IncompatibleParameterCountException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/InvalidUriException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/InvalidUriException.java
deleted file mode 100644
index e8c2713..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/InvalidUriException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when a controller cannot make sense of the URI it has to handle. 
- * 
- * @author Steven Devijver
- * @since Jul 3, 2005
- */
-public class InvalidUriException extends GrailsMVCException {
-
-	public InvalidUriException() {
-		super();
-	}
-
-	public InvalidUriException(String arg0) {
-		super(arg0);
-	}
-
-	public InvalidUriException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public InvalidUriException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoClosurePropertyForURIException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoClosurePropertyForURIException.java
deleted file mode 100644
index d193704..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoClosurePropertyForURIException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when no closure property has been mapped to a given URI. 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class NoClosurePropertyForURIException extends GrailsMVCException {
-
-	public NoClosurePropertyForURIException() {
-		super();
-	}
-
-	public NoClosurePropertyForURIException(String arg0) {
-		super(arg0);
-	}
-
-	public NoClosurePropertyForURIException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public NoClosurePropertyForURIException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoViewNameDefinedException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoViewNameDefinedException.java
deleted file mode 100644
index 40c445d..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/NoViewNameDefinedException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when no view name is returned from a closure in a controller and no view name has been configured. 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class NoViewNameDefinedException extends GrailsMVCException {
-
-	public NoViewNameDefinedException() {
-		super();
-	}
-
-	public NoViewNameDefinedException(String arg0) {
-		super(arg0);
-	}
-
-	public NoViewNameDefinedException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public NoViewNameDefinedException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnknownControllerException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnknownControllerException.java
deleted file mode 100644
index 1579502..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnknownControllerException.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when a URI cannot be matched to a controller.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class UnknownControllerException extends GrailsMVCException {
-
-	public UnknownControllerException() {
-		super();
-	}
-
-	public UnknownControllerException(String arg0) {
-		super(arg0);
-	}
-
-	public UnknownControllerException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public UnknownControllerException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnsupportedReturnValueException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnsupportedReturnValueException.java
deleted file mode 100644
index 0768032..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/mvc/exceptions/UnsupportedReturnValueException.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc.exceptions;
-
-/**
- * <p>Thrown when the return value of a closure is unsupported.
- * 
- * <p>If you are using a builder in your code and this exception
- * is thrown you may need to return a null value at the end of
- * the closure to avoid this exception.
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class UnsupportedReturnValueException extends GrailsMVCException {
-
-	public UnsupportedReturnValueException() {
-		super();
-	}
-
-	public UnsupportedReturnValueException(String arg0) {
-		super(arg0);
-	}
-
-	public UnsupportedReturnValueException(String arg0, Throwable arg1) {
-		super(arg0, arg1);
-	}
-
-	public UnsupportedReturnValueException(Throwable arg0) {
-		super(arg0);
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/view/GrailsViewResolver.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/view/GrailsViewResolver.java
deleted file mode 100644
index 731fb63..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/servlet/view/GrailsViewResolver.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.view;
-
-import org.springframework.web.servlet.View;
-import org.springframework.web.servlet.view.AbstractUrlBasedView;
-import org.springframework.web.servlet.view.InternalResourceViewResolver;
-
-import javax.servlet.ServletContext;
-import java.util.Locale;
-import java.util.Map;
-import java.util.HashMap;
-import java.net.URL;
-
-/**
- * A Grails view resolver which evaluates the existance of a view for different extensions choosing which
- * one to delegate to.
- *
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public class GrailsViewResolver extends InternalResourceViewResolver {
-    private String localSuffix;
-    private String localPrefix;
-    private static final String GSP_SUFFIX = ".gsp";
-    private Map resolvedCache = new HashMap();
-
-    public void setPrefix(String prefix) {
-        super.setPrefix(prefix);
-        this.localPrefix = prefix;
-    }
-
-    public void setSuffix(String suffix) {
-        super.setSuffix(suffix);
-        this.localSuffix = suffix;
-    }
-
-    protected View loadView(String viewName, Locale locale) throws Exception {
-        AbstractUrlBasedView view = buildView(viewName);
-
-        ServletContext context = getServletContext();
-        if(this.resolvedCache.containsKey(viewName)) {
-            view.setUrl((String)this.resolvedCache.get(viewName));
-        }
-        else {
-            URL res = context.getResource(view.getUrl());
-            // try GSP if res is null
-            if(res == null) {
-                String gspView = localPrefix + viewName + GSP_SUFFIX;
-                res = context.getResource(gspView);
-                if(res != null) {
-                    view.setUrl(gspView);
-                    this.resolvedCache.put(viewName,gspView);
-                }
-            }
-            else {
-                this.resolvedCache.put(viewName,view.getUrl());
-            }
-        }
-
-        view.setApplicationContext(getApplicationContext());
-        view.afterPropertiesSet();
-        return view;
-    }
-
-    private String localUrlForView(String viewName) {
-        return null;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapper.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapper.java
deleted file mode 100644
index baefcf8..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapper.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.sitemesh;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.opensymphony.module.sitemesh.Config;
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.DecoratorMapper;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.module.sitemesh.mapper.AbstractDecoratorMapper;
-import com.opensymphony.module.sitemesh.mapper.DefaultDecorator;
-/**
- * Implements the SiteMesh decorator mapper interface and allows grails views to map to grails layouts
- *  
- * @author Graeme Rocher
- * @since Oct 10, 2005
- */
-public class GrailsLayoutDecoratorMapper extends AbstractDecoratorMapper implements DecoratorMapper {
-
-	private static final String DEFAULT_DECORATOR_PATH = "/WEB-INF/grails-app/views/layouts";
-	private static final String DEFAULT_VIEW_TYPE = ".jsp";
-	
-	private static final Log LOG = LogFactory.getLog( GrailsLayoutDecoratorMapper.class );
-	
-	
-	private Map decoratorMap = new HashMap();
-	
-	public void init(Config config, Properties properties, DecoratorMapper parent) throws InstantiationException {
-		super.init(config,properties,parent);
-	}
-
-	public Decorator getDecorator(HttpServletRequest request, Page page) {
-		String layoutName = page.getProperty("meta.layout");
-		if(StringUtils.isBlank(layoutName))
-			return super.getDecorator(request, page);
-		
-		return getNamedDecorator(request, layoutName);
-	}
-
-	public Decorator getNamedDecorator(HttpServletRequest request, String name) {
-		
-		if(decoratorMap.containsKey(name)) {
-			return (Decorator)decoratorMap.get(name);
-		}
-		else {
-			String decoratorName = name;
-			if(!name.matches("(.+)(\\.)(\\w{2}|\\w{3})")) {
-				name += DEFAULT_VIEW_TYPE;
-			}
-			String decoratorPage = DEFAULT_DECORATOR_PATH + '/' + name;
-			
-			if(LOG.isInfoEnabled()) 
-				LOG.info("Using decorator " + decoratorPage);
-			
-			Decorator d = new DefaultDecorator(decoratorName,decoratorPage, Collections.EMPTY_MAP);
-			decoratorMap.put(decoratorName,d);
-			return d;
-		}	
-	}
-
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTag.java
deleted file mode 100644
index d062344..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTag.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.codehaus.groovy.grails.web.taglib;
-
-import java.io.Writer;
-import java.util.Map;
-
-/**
- * An interface that allows to tag implementation to be abstracted from the JSP custom tag spec.. hence allowing
- * them to be used in direct method calls etc.
- * 
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public interface GrailsTag {
-
-    void init(Map tagContext);
-
-    /**
-     * Sets the writer that processes the tag
-     * @param w
-     */
-    void setWriter(Writer w);
-
-    /**
-     * Sets the attributes of the tag
-     * @param attributes
-     */
-    void setAttributes(Map attributes);
-
-    /**
-     * Sets an attribute of the tag
-     * @param name
-     * @param value
-     */
-    void setAttribute(String name, Object value);
-
-    /**
-     * Process the start tag
-     */
-    void doStartTag();
-
-    /**
-     * process the end tag
-     */
-    void doEndTag();
-
-    /**
-     * @return The name of the tag
-     */
-    String getName();
-}
-                            
\ No newline at end of file
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTagRegistry.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTagRegistry.java
deleted file mode 100644
index 1306e78..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GrailsTagRegistry.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A registry for holding all Grails tag implementations
- *
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public class GrailsTagRegistry {
-    private static GrailsTagRegistry instance;
-
-    private static Map tagRegistry = Collections.synchronizedMap(new HashMap());
-
-    static {
-        GrailsTagRegistry tagRegistry = getInstance();
-        tagRegistry.registerTag(RenderInputTag.TAG_NAME, RenderInputTag.class);
-        tagRegistry.registerTag(GroovyEachTag.TAG_NAME, GroovyEachTag.class);
-        tagRegistry.registerTag(GroovyIfTag.TAG_NAME, GroovyIfTag.class);
-        tagRegistry.registerTag(GroovyElseTag.TAG_NAME, GroovyElseTag.class);
-        tagRegistry.registerTag(GroovyElseIfTag.TAG_NAME, GroovyElseIfTag.class);
-        tagRegistry.registerTag(GroovyFindAllTag.TAG_NAME, GroovyFindAllTag.class);
-        tagRegistry.registerTag(GroovyCollectTag.TAG_NAME, GroovyCollectTag.class);
-        tagRegistry.registerTag(GroovyGrepTag.TAG_NAME, GroovyGrepTag.class);
-        tagRegistry.registerTag(GroovyWhileTag.TAG_NAME, GroovyWhileTag.class);
-        tagRegistry.registerTag(GroovyDefTag.TAG_NAME, GroovyDefTag.class);
-        tagRegistry.registerTag(GroovySetTag.TAG_NAME, GroovySetTag.class);
-    }
-
-    private GrailsTagRegistry() {
-    }
-
-    public static GrailsTagRegistry getInstance() {
-        if(instance == null)
-            instance = new GrailsTagRegistry();
-
-        return instance;
-    }
-
-    public void registerTag(String tagName, Class tag) {
-        tagRegistry.put(tagName,tag);
-    }
-
-    public boolean tagSupported(String tagName) {
-        return tagRegistry.containsKey(tagName);
-    }
-    
-    public boolean isSyntaxTag(String tagName) {
-        if(tagRegistry.containsKey(tagName)) {
-            Class tagClass = (Class)tagRegistry.get(tagName);
-            return GroovySyntaxTag.class.isAssignableFrom(tagClass);
-        }
-        return false;
-    }
-
-    public GrailsTag newTag(String tagName) {
-        if(tagRegistry.containsKey(tagName)) {
-            Class tagClass = (Class)tagRegistry.get(tagName);
-
-            GrailsTag tag;
-            try {
-                tag = (GrailsTag)tagClass.newInstance();
-            } catch (InstantiationException e) {
-                throw new GrailsTagException("Instantiation error loading tag ["+tagName+"]: " + e.getMessage(), e);
-            } catch (IllegalAccessException e) {
-                throw new GrailsTagException("Illegal access error loading tag ["+tagName+"]: " + e.getMessage(), e);
-            }
-            return tag;
-        }
-        else {
-            throw new GrailsTagException("Tag ["+tagName+"] is not a a valid grails tag");
-        }
-    }
-
-    public boolean isRequestContextTag(String tagName) {
-        if(tagRegistry.containsKey(tagName)) {
-            Class tagClass = (Class)tagRegistry.get(tagName);
-            return RequestContextTag.class.isAssignableFrom(tagClass);
-        }
-        return false;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyCollectTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyCollectTag.java
deleted file mode 100644
index 95f3a9c..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyCollectTag.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * Example:
- *
- * <code>
- *  <gr:collect in="${thing}" expr="it.length() == 3">
- *        <p>${it}</p>
- *  </gr:collect>
- * </code>
- * @author Graeme Rocher
- * @since 19-Jan-2006
- */
-public class GroovyCollectTag extends GroovySyntaxTag {
-   public static final String TAG_NAME = "collect";
-    private static final String ATTRIBUTE_IN = "in";
-    private static final String ATTRIBUTE_EXPR = "expr";
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-
-    public void doStartTag() {
-        String in = (String) attributes.get(ATTRIBUTE_IN);
-        String expr = (String) attributes.get(ATTRIBUTE_EXPR);
-        if(StringUtils.isBlank(in))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_IN+"]");
-        if(StringUtils.isBlank(expr))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_EXPR+"]");
-
-        out.print(in);
-        out.print(".collect {");
-        if(expr.startsWith("\"") && expr.endsWith("\"")) {
-            expr = expr.substring(1,expr.length()-1);
-        }
-        out.print(expr);
-        out.println("}.each {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyDefTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyDefTag.java
deleted file mode 100644
index 6aa4032..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyDefTag.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * Allows defining of variables within the page context
- *
- * @author Graeme Rocher
- * @since 23-Feb-2006
- */
-public class GroovyDefTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "def";
-    private static final String ATTRIBUTE_EXPR = "expr";
-    private static final String ATTRIBUTE_VAR = "var";
-
-    public void doStartTag() {
-        String expr = (String) attributes.get(ATTRIBUTE_EXPR);
-        String var = (String) attributes.get(ATTRIBUTE_VAR);
-
-        if(StringUtils.isBlank(var))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_VAR+"]");
-        if(StringUtils.isBlank(expr))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_EXPR+"]");
-
-        out.print("def ");
-        out.print(var.substring(1,var.length() -1));
-        out.print('=');
-        out.println(expr);
-    }
-
-    public void doEndTag() {
-        // do nothing
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return false;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyEachTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyEachTag.java
deleted file mode 100644
index 081a8de..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyEachTag.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * @author Graeme Rocher
- * @since 18-Jan-2006
- */
-public class GroovyEachTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "each";
-    private static final String ATTRIBUTE_IN = "in";
-    private static final String ATTRIBUTE_VAR = "var";
-
-    public void doStartTag() {
-        String in = (String) attributes.get(ATTRIBUTE_IN);
-        String var = (String) attributes.get(ATTRIBUTE_VAR);
-
-        if(StringUtils.isBlank(in))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_IN+"]");
-
-        out.print(in);
-        if(StringUtils.isBlank(var)) {
-            out.println(".each {");
-        }
-        else {
-            out.print(".each { ");
-            out.print(var.substring(1,var.length() -1));
-            out.println(" ->");
-        }
-
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseIfTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseIfTag.java
deleted file mode 100644
index e655eac..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseIfTag.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * @author Graeme Rocher
- * @since 18-Jan-2006
- */
-public class GroovyElseIfTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "elseif";
-    private static final String ATTRIBUTE_TEST = "test";
-
-    public void doStartTag() {
-        String test = (String) attributes.get(ATTRIBUTE_TEST);
-        if(StringUtils.isBlank(test))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_TEST+"]");
-        out.print("else if(");
-        out.print(test);
-        out.println(") {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return true;
-    }
-
-    public boolean hasPrecedingContent() {
-        return false;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseTag.java
deleted file mode 100644
index 31b3d42..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyElseTag.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-/**
- * @author Graeme Rocher
- * @since 18-Jan-2006
- */
-public class GroovyElseTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "else";
-
-
-    public void doStartTag() {
-        out.println("else {");
-    }
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return false;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyFindAllTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyFindAllTag.java
deleted file mode 100644
index 5260ae3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyFindAllTag.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * Example:
- *
- * <code>
- *  <gr:findAll in="${thing}" expr="it.length() == 3">
- *        <p>${it}</p>
- *  </gr:findAll>
- * </code>
- * @author Graeme Rocher
- * @since 19-Jan-2006
- */
-public class GroovyFindAllTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "findAll";
-    private static final String ATTRIBUTE_IN = "in";
-    private static final String ATTRIBUTE_EXPR = "expr";
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-
-    public void doStartTag() {
-        String in = (String) attributes.get(ATTRIBUTE_IN);
-        String expr = (String) attributes.get(ATTRIBUTE_EXPR);
-        if(StringUtils.isBlank(in))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_IN+"]");
-        if(StringUtils.isBlank(expr))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_EXPR+"]");
-
-        out.print(in);
-        out.print(".findAll {");
-        if(expr.startsWith("\"") && expr.endsWith("\"")) {
-            expr = expr.substring(1,expr.length()-1);
-        }
-        out.print(expr);
-        out.println("}.each {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyGrepTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyGrepTag.java
deleted file mode 100644
index 394657c..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyGrepTag.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- *
- * Example:
- *
- * <code>
- *  <gr:grep in="${thing}" filter="${Pattern.compile('[a-zA-Z]')}">
- *        <p>${it}</p>
- *  </gr:grep>
- * </code>
- *
- * @author Graeme Rocher
- * @since 19-Jan-2006
- */
-public class GroovyGrepTag extends GroovySyntaxTag{
-   public static final String TAG_NAME = "grep";
-    private static final String ATTRIBUTE_IN = "in";
-    private static final String ATTRIBUTE_FILTER = "filter";
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-
-    public void doStartTag() {
-        String in = (String) attributes.get(ATTRIBUTE_IN);
-        String filter = (String) attributes.get(ATTRIBUTE_FILTER);
-        if(StringUtils.isBlank(in))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_IN+"]");
-        if(StringUtils.isBlank(filter))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_FILTER +"]");
-
-        out.print(in);
-        out.print(".grep (");
-        if(filter.startsWith("\"") && filter.endsWith("\"")) {
-            filter = filter.substring(1,filter.length()-1);
-        }
-        out.print(filter);
-        out.println(").each {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyIfTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyIfTag.java
deleted file mode 100644
index c18c8de..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyIfTag.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * @author Graeme Rocher
- * @since 18-Jan-2006
- */
-public class GroovyIfTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "if";
-    private static final String ATTRIBUTE_TEST = "test";
-
-    public void doStartTag() {
-        String test = (String) attributes.get(ATTRIBUTE_TEST);
-        if(StringUtils.isBlank(test))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_TEST+"]");
-        out.print("if(");
-        out.print(test);
-        out.println(") {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return true;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySetTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySetTag.java
deleted file mode 100644
index 4c64805..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySetTag.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * Allows setting of variables within the page context
- *
- * @author Graeme Rocher
- * @since 23-Feb-2006
- */
-public class GroovySetTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "set";
-    private static final String ATTRIBUTE_EXPR = "expr";
-    private static final String ATTRIBUTE_VAR = "var";
-
-    public void doStartTag() {
-        String expr = (String) attributes.get(ATTRIBUTE_EXPR);
-        String var = (String) attributes.get(ATTRIBUTE_VAR);
-
-        if(StringUtils.isBlank(var))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_VAR+"]");
-        if(StringUtils.isBlank(expr))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_EXPR+"]");
-
-        out.print(var.substring(1,var.length() -1));
-        out.print('=');
-        out.println(expr);
-    }
-
-    public void doEndTag() {
-        // do nothing
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return false;
-    }
-
-    public boolean hasPrecedingContent() {
-        return false;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySyntaxTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySyntaxTag.java
deleted file mode 100644
index 3b5febc..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovySyntaxTag.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- *
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.codehaus.groovy.grails.web.pages.GroovyPage;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.io.Writer;
-import java.io.PrintWriter;
-
-/**
- * A tag type that gets translated directly into Groovy syntax by the GSP parser
- *
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public abstract class GroovySyntaxTag implements GrailsTag {
-    protected Map tagContext;
-    protected PrintWriter out;
-    protected Map attributes = new HashMap();
-
-    public void init(Map tagContext) {
-        this.tagContext = tagContext;
-        this.out = (PrintWriter)tagContext.get(GroovyPage.OUT);
-    }
-
-    public void setWriter(Writer w) {
-        if(w instanceof PrintWriter) {
-            this.out = (PrintWriter)w;
-        }
-        else {
-            throw new IllegalArgumentException("A GroovySynax tag requires a java.io.PrintWriter instance");
-        }
-    }
-
-    public void setAttributes(Map attributes) {
-        for (Iterator i = attributes.keySet().iterator(); i.hasNext();) {
-            String attrName = (String) i.next();
-            setAttribute(attrName,attributes.get(attrName));
-        }
-    }
-
-    public void setAttribute(String name, Object value) {
-        if(value instanceof String ) {
-            String stringValue = (String)value;
-            if(stringValue.startsWith("${") && stringValue.endsWith("}")) {
-                stringValue = stringValue.substring(2,stringValue.length() -1);
-            }
-
-            this.attributes.put(name.substring(1,name.length()-1),stringValue);
-        }
-        else {
-            throw new IllegalArgumentException("A GroovySynax tag requires only string valued attributes");
-        }
-    }
-
-    public abstract boolean isBufferWhiteSpace();
-
-    public abstract boolean hasPrecedingContent();
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyWhileTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyWhileTag.java
deleted file mode 100644
index e61e056..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/GroovyWhileTag.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-
-/**
- * @author Graeme Rocher
- * @since 18-Jan-2006
- */
-public class GroovyWhileTag extends GroovySyntaxTag {
-    public static final String TAG_NAME = "while";
-    private static final String ATTRIBUTE_TEST = "test";
-
-    public void doStartTag() {
-        String test = (String) attributes.get(ATTRIBUTE_TEST);
-        if(StringUtils.isBlank(test))
-            throw new GrailsTagException("Tag ["+TAG_NAME+"] missing required attribute ["+ATTRIBUTE_TEST+"]");
-        out.print("while(");
-        out.print(test);
-        out.println(") {");
-    }
-
-    public void doEndTag() {
-        out.println("}");
-    }
-
-    public String getName() {
-        return TAG_NAME;
-    }
-
-    public boolean isBufferWhiteSpace() {
-        return true;
-    }
-
-    public boolean hasPrecedingContent() {
-        return true;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RenderInputTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RenderInputTag.java
deleted file mode 100644
index 0f2cd90..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RenderInputTag.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import groovy.lang.Writable;
-import groovy.text.Template;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.beans.BeansException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A tag that attempts to render an input for a bean property into an appropriate component based on the type.
- * It uses the templates defined in "grails-app/views/scaffolding" to achieve this by looking up
- * the template by type.
- *
- * Example:
- * <code>
- *      <gr:renderInput bean="myBean" property="firstName" />
- * </code>
- * Produces for Example (unless customised):
- * <code>
- *      <input type="text" name="firstName" value="Bob" />
- * </code>
- * @author Graeme Rocher
- * @since 12-Jan-2006
- */
-public class RenderInputTag extends RequestContextTag {
-
-    public static final String PATH_PREFIX = "/WEB-INF/grails-app/views/scaffolding/";
-    public static final String PATH_SUFFIX = ".gsp";
-    public static final String TAG_NAME = "renderInput";
-
-    private static final Log LOG = LogFactory.getLog(RenderInputTag.class);
-
-    private static final String BEAN_PROPERTY = "bean";
-
-    private Object bean;
-    private String property;
-    private BeanWrapper beanWrapper;
-    private Map constrainedProperties = Collections.EMPTY_MAP;
-    private Map cachedUris = Collections.synchronizedMap(new HashMap());
-
-    protected RenderInputTag() {
-        super(TAG_NAME);
-    }
-
-
-    protected void doStartTagInternal() {
-
-         GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass(bean.getClass().getName());
-         if(domainClass != null) {
-             this.constrainedProperties = domainClass.getConstrainedProperties();
-         }
-        this.beanWrapper = new BeanWrapperImpl(bean);
-        PropertyDescriptor pd = null;
-        try {
-            pd = this.beanWrapper.getPropertyDescriptor(property);
-        } catch (BeansException e) {
-            throw new GrailsTagException("Property ["+property+"] is not a valid bean property in tag [renderInput]:" + e.getMessage(),e);
-        }
-        GroovyPagesTemplateEngine engine = (GroovyPagesTemplateEngine)servletContext.getAttribute(GrailsApplicationAttributes.GSP_TEMPLATE_ENGINE);
-
-        Template t = null;
-        try {
-            String uri = findUriForType(pd.getPropertyType());
-            t = engine.createTemplate(uri,
-                                               servletContext,
-                                               (HttpServletRequest)request,
-                                               (HttpServletResponse)response);
-            if(t == null)
-                throw new GrailsTagException("Type ["+pd.getPropertyType()+"] is unsupported by tag [scaffold]. No template found.");
-
-            Map binding = new HashMap();
-            binding.put("name", pd.getName());
-            binding.put("value",this.beanWrapper.getPropertyValue(property));
-            if(this.constrainedProperties.containsKey(property)) {
-                binding.put("constraints",this.constrainedProperties.get(property));
-            }
-            else {
-                binding.put("constraints",null);
-            }
-            Writable  w = t.make(binding);
-            w.writeTo(out);
-
-        } catch (ServletException e) {
-            throw new GrailsTagException("Error creating template for type ["+pd.getPropertyType()+"] by tag [scaffold]: " + e.getMessage(),e);
-        } catch (IOException e) {
-            throw new GrailsTagException("I/O error writing tag ["+getName()+"] to writer: " + e.getMessage(),e);
-        }
-
-
-    }
-
-    protected void doEndTagInternal() {
-        // do nothing
-    }
-
-    public boolean isDynamicAttribute(String attr) {
-        if(BEAN_PROPERTY.equals(attr))
-            return true;
-        return false;
-    }
-
-    public Object getBean() {
-        return bean;
-    }
-
-    public void setBean(Object bean) {
-        this.bean = bean;
-    }
-
-    public String getProperty() {
-        return property;
-    }
-
-    public void setProperty(String property) {
-        this.property = property;
-    }
-
-
-   public String findUriForType(Class type)
-            throws MalformedURLException {
-
-        if(LOG.isTraceEnabled()) {
-            LOG.trace("[JspRenderInputTag] Attempting to retrieve template for type ["+type+"]");
-        }
-        String templateUri;
-        if(cachedUris.containsKey(type)) {
-            templateUri = (String)cachedUris.get(type);
-        }
-        else {
-            templateUri = locateTemplateUrl(type);
-            cachedUris.put(type,templateUri);
-        }
-       return templateUri;
-   }
-
-    private String locateTemplateUrl(Class type)
-                throws MalformedURLException {
-        if(type == Object.class)
-            return null;
-
-        String uri = PATH_PREFIX + type.getName() + PATH_SUFFIX;
-        URL returnUrl = servletContext.getResource(uri);
-        if(returnUrl == null) {
-            return locateTemplateUrl(type.getSuperclass());
-        }
-        return uri;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RequestContextTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RequestContextTag.java
deleted file mode 100644
index 34f3ead..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/RequestContextTag.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.web.pages.GroovyPage;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.servlet.support.RequestContextUtils;
-import org.springframework.web.util.UrlPathHelper;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public abstract class RequestContextTag implements GrailsTag {
-    protected Writer out;
-    protected Map attributes = new HashMap();
-    protected ServletRequest request;
-    protected String contextPath;
-    protected UrlPathHelper urlPathHelper = new UrlPathHelper();
-    protected GrailsTagRegistry registry;
-    private boolean init;
-    protected BeanWrapper bean;
-    protected ServletContext servletContext;
-    protected ServletResponse response;
-    protected WebApplicationContext applicationContext;
-    protected GrailsApplication grailsApplication;
-    private String name;
-
-    protected RequestContextTag(String name) {
-        this.name = name;
-        this.bean = new BeanWrapperImpl(this);
-    }
-
-    public String getName() {
-        return this.name;
-    }
-
-    public void init(Map context) {
-        if(context == null)
-            throw new IllegalArgumentException("Argument 'context' cannot be null");
-        this.out = (Writer)context.get(GroovyPage.OUT);
-        this.request = (ServletRequest)context.get(GroovyPage.REQUEST);
-        this.servletContext = (ServletContext)context.get(GroovyPage.SERVLET_CONTEXT);
-        this.response = (ServletResponse)context.get(GroovyPage.RESPONSE);
-        this.applicationContext = RequestContextUtils.getWebApplicationContext(request, servletContext);
-        this.grailsApplication = (GrailsApplication)this.applicationContext.getBean(GrailsApplication.APPLICATION_ID);
-        if(context.get(GroovyPage.ATTRIBUTES) == null)
-            this.attributes = new HashMap();
-        else {
-            this.attributes = (Map)context.get(GroovyPage.ATTRIBUTES);
-        }
-        this.contextPath = urlPathHelper.getContextPath( (HttpServletRequest)this.request );
-        this.init = true;
-    }
-
-    public void setAttribute(String name, Object value) {
-        if(this.bean.isWritableProperty(name)) {
-            this.bean.setPropertyValue(name,value);
-        }else {
-            this.attributes.put(name,value);
-        }
-    }
-
-    public GrailsTagRegistry getRegistry() {
-        return this.registry;
-    }
-
-    public void setWriter(Writer w) {
-        this.out = w;
-    }
-
-    public void setAttributes(Map attributes) {
-        this.attributes = attributes;
-    }
-
-    public final void doStartTag() {
-        if(!init)
-            throw new IllegalStateException("Tag not initialised called 'init' first");
-
-        doStartTagInternal();
-    }
-
-    protected abstract void doStartTagInternal() ;
-    protected abstract void doEndTagInternal() ;
-
-    public final void doEndTag()  {
-        if(!init)
-            throw new IllegalStateException("Tag not initialised called 'init' first");
-
-        doEndTagInternal();
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/ScaffoldTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/ScaffoldTag.java
deleted file mode 100644
index 5f19759..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/ScaffoldTag.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib;
-
-import groovy.text.Template;
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.scaffolding.ServletContextTemplateFactory;
-import org.codehaus.groovy.grails.scaffolding.TemplateFactory;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.beans.InvalidPropertyException;
-import org.springframework.web.servlet.tags.RequestContextAwareTag;
-import org.springframework.web.util.ExpressionEvaluationUtils;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author Graeme Rocher
- * @since 06-Jan-2006
- */
-public class ScaffoldTag extends RequestContextAwareTag {
-
-    private String bean;
-    private String property;
-    private BeanWrapper beanWrapper;
-    private Map constrainedProperties = Collections.EMPTY_MAP;
-    private  static  TemplateFactory templateFactory;
-
-    protected int doStartTagInternal() throws Exception {
-        if(templateFactory == null)
-             templateFactory = new ServletContextTemplateFactory(pageContext.getServletContext());
-
-        if(StringUtils.isBlank(property)) {
-             throw new JspException("Tag [scaffold] missing required attribute [property]");
-         }
-         if(StringUtils.isBlank(bean)) {
-             throw new JspException("Tag [scaffold] missing required attribute [bean]");
-         }
-         if(!ExpressionEvaluationUtils.isExpressionLanguage(bean)) {
-             throw new JspException("Attribute [bean] of tag [scaffold] must be a JSTL expression");
-         }
-         Writer out = pageContext.getOut();
-         try {
-             Object beanInstance = ExpressionEvaluationUtils.evaluate("bean",this.bean,Object.class,this.pageContext);
-             if(beanInstance == null)
-                throw new JspTagException("Bean ["+this.bean+"] referenced by tag [scaffold] cannot be null");
-
-             GrailsApplication application = (GrailsApplication) super.getRequestContext().getWebApplicationContext().getBean(GrailsApplication.APPLICATION_ID);
-             if(application != null) {
-                 GrailsDomainClass domainClass = application.getGrailsDomainClass(beanInstance.getClass().getName());
-                 if(domainClass != null) {
-                     this.constrainedProperties = domainClass.getConstrainedProperties();
-                 }
-             }
-             this.beanWrapper = new BeanWrapperImpl(beanInstance);
-
-             PropertyDescriptor pd = this.beanWrapper.getPropertyDescriptor(property);
-
-             Template t = templateFactory.findTemplateForType(pd.getPropertyType());
-             if(t == null)
-                 throw new JspException("Type ["+pd.getPropertyType()+"] is unsupported by tag [scaffold]. No template found.");
-
-             Map binding = new HashMap();
-             binding.put("name", pd.getName());
-             binding.put("value",this.beanWrapper.getPropertyValue(property));
-             binding.put("request",this.pageContext.getRequest());
-             binding.put("response",this.pageContext.getResponse());
-             binding.put("application",this.pageContext.getServletContext());
-             if(this.constrainedProperties.containsKey(property)) {
-                 binding.put("constraints",this.constrainedProperties.get(property));
-             }
-             else {
-                 binding.put("constraints",null);
-             }
-             out.write(t.make(binding).toString());
-         } catch (InvalidPropertyException ipe) {
-             throw new JspException("Attribute [property] with value ["+property+"] is not a valid property of bean ["+bean+"] in tag [scaffold]",ipe);
-         } catch (IOException e) {
-             throw new JspException("I/O error writing tag [scaffold]: " + e.getMessage(),e);
-         }
-         return SKIP_BODY;
-    }
-
-    public String getBean() {
-        return bean;
-    }
-
-    public void setBean(String bean) {
-        this.bean = bean;
-    }
-
-    public String getProperty() {
-        return property;
-    }
-
-    public void setProperty(String property) {
-        this.property = property;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/exceptions/GrailsTagException.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/exceptions/GrailsTagException.java
deleted file mode 100644
index 9c423e3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/exceptions/GrailsTagException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib.exceptions;
-
-import org.codehaus.groovy.grails.exceptions.GrailsException;
-
-/**
- * @author Graeme Rocher
- * @since 11-Jan-2006
- */
-public class GrailsTagException extends GrailsException {
-    public GrailsTagException(String s) {
-        super(s);
-    }
-
-    public GrailsTagException(String arg0, Throwable arg1) {
-        super(arg0, arg1);
-    }
-
-    public GrailsTagException(Throwable arg0) {
-        super(arg0);
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspInvokeGrailsTagLibTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspInvokeGrailsTagLibTag.java
deleted file mode 100644
index 58921bc..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspInvokeGrailsTagLibTag.java
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib.jsp;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingPropertyException;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsTagLibClass;
-import org.codehaus.groovy.grails.web.metaclass.TagLibDynamicMethods;
-import org.codehaus.groovy.grails.web.servlet.DefaultGrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException;
-import org.springframework.beans.BeanWrapper;
-import org.springframework.beans.BeanWrapperImpl;
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.util.ExpressionEvaluationUtils;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import javax.servlet.jsp.JspWriter;
-import javax.servlet.jsp.tagext.BodyContent;
-import javax.servlet.jsp.tagext.BodyTagSupport;
-import javax.servlet.jsp.tagext.DynamicAttributes;
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.*;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * A tag that invokes a tag defined in a the Grails dynamic tag library. Authors of Grails tags
- * who want their tags to work in JSP should sub-class this class and call "setName" to set
- * the name of the tag within the Grails taglib
- *
- * This tag can of course be used standalone to invoke a Grails tag from JSP:
- *
- * <code>
- *   <gr:invokeTag name="myTag" />
- * </code>
- *
- * @author Graeme Rocher
- * @since 16-Jan-2006
- */
-public class JspInvokeGrailsTagLibTag extends BodyTagSupport implements DynamicAttributes  {
-
-    private static final String ZERO_ARGUMENTS = "zeroArgumentsFlag";
-    private static final String GROOVY_DEFAULT_ARGUMENT = "it";
-    private static final String NAME_ATTRIBUTE = "name";
-    private static final Pattern ATTRIBUTE_MAP = Pattern.compile("(\\s*(\\S+)\\s*:\\s*(\\S+?)(,|$){1}){1}");
-
-    private String name;
-    private int invocationCount;
-    private List invocationArgs = new ArrayList();
-    private List invocationBodyContent = new ArrayList();
-    private BeanWrapper bean;
-    protected Map attributes = new HashMap();
-    private StringWriter sw;
-    private PrintWriter out;
-    private JspWriter jspWriter;
-    private GrailsApplicationAttributes grailsAttributes;
-    private GrailsApplication application;
-    private ApplicationContext appContext;;
-    private static final String TAG_LIBS_ATTRIBUTE = "org.codehaus.groovy.grails.TAG_LIBS";
-
-
-    public JspInvokeGrailsTagLibTag() {
-        this.bean = new BeanWrapperImpl(this);
-    }
-
-    public final int doStartTag() throws JspException {
-        PropertyDescriptor[] pds = this.bean.getPropertyDescriptors();
-        for (int i = 0; i < pds.length; i++) {
-            PropertyDescriptor pd = pds[i];
-            if( pd.getPropertyType() == String.class &&
-                !pd.getName().equals(NAME_ATTRIBUTE) &&
-                this.bean.isWritableProperty(pd.getName()) &&
-                this.bean.isReadableProperty(pd.getName())) {
-                String propertyValue = (String)this.bean.getPropertyValue(pd.getName());
-
-                if(propertyValue != null) {
-                    String trimmed = propertyValue.trim();
-                    if(trimmed.startsWith("[") && trimmed.endsWith("]")) {
-                        trimmed = trimmed.substring(1,trimmed.length() - 1);
-                        Matcher m = ATTRIBUTE_MAP.matcher(trimmed);
-                        Map attributeMap = new HashMap();
-                        while(m.find()) {
-                            String attributeName = m.group(1);
-                            String attributeValue = m.group(2);
-                            if(ExpressionEvaluationUtils.isExpressionLanguage(attributeValue)) {
-                                attributeMap.put(attributeName, ExpressionEvaluationUtils.evaluate(attributeName,attributeValue,Object.class,super.pageContext));
-                            }
-                            else {
-                                attributeMap.put(attributeName, attributeValue);
-                            }
-                        }
-                        this.attributes.put(pd.getName(), attributeMap);
-                    }
-                    else {
-                        if(ExpressionEvaluationUtils.isExpressionLanguage(propertyValue)) {
-                            this.attributes.put(pd.getName(), ExpressionEvaluationUtils.evaluate(pd.getName(),propertyValue,Object.class,super.pageContext));
-                        }
-                        else {
-                            this.attributes.put(pd.getName(), propertyValue);
-                        }
-                    }
-                }
-            }
-        }
-        return doStartTagInternal();
-    }
-
-    private GroovyObject getTagLib(String tagName) {
-        if(this.application == null)
-            initPageState();
-
-        HttpServletRequest request = (HttpServletRequest)this.pageContext.getRequest();
-        HttpServletResponse response = (HttpServletResponse)this.pageContext.getResponse();
-        Map tagLibs = (Map)pageContext.getAttribute(TAG_LIBS_ATTRIBUTE);
-        if(tagLibs == null) {
-            tagLibs = new HashMap();
-            pageContext.setAttribute(TAG_LIBS_ATTRIBUTE, tagLibs);
-        }
-        GrailsTagLibClass tagLibClass = application.getTagLibClassForTag(tagName);
-        GroovyObject tagLib;
-        if(tagLibs.containsKey(tagLibClass.getFullName())) {
-             tagLib = (GroovyObject)tagLibs.get(tagLibClass.getFullName());
-        }
-        else {
-            tagLib = (GroovyObject)appContext.getBean(tagLibClass.getFullName());
-            try {
-                new TagLibDynamicMethods(tagLib,grailsAttributes.getController(request));
-            } catch (IntrospectionException e) {
-                throw new GrailsTagException("Error instantiating taglib ["+tagLibClass.getFullName()+"]: " + e.getMessage(),e);
-            }
-            tagLibs.put(tagLibClass.getFullName(),tagLib);
-        }
-        return tagLib;
-    }
-
-    private void initPageState() {
-        if(this.application == null) {
-            this.grailsAttributes = new DefaultGrailsApplicationAttributes(pageContext.getServletContext());
-            this.application = grailsAttributes.getGrailsApplication();
-            this.appContext = grailsAttributes.getApplicationContext();
-        }
-    }
-
-    protected int doStartTagInternal() {
-      GroovyObject tagLib = getTagLib(getName());
-        if(tagLib != null) {
-            sw = new StringWriter();
-            out = new PrintWriter(sw);
-            tagLib.setProperty( TagLibDynamicMethods.OUT_PROPERTY, out );
-            Object tagLibProp;
-            try {
-                tagLibProp = tagLib.getProperty(getName());
-            } catch (MissingPropertyException mpe) {
-                throw new GrailsTagException("Tag ["+getName()+"] does not exist in tag library ["+tagLib.getClass().getName()+"]");
-            }
-            if(tagLibProp instanceof Closure) {
-                Closure body = new Closure(this) {
-                    public Object doCall() {
-                        return call();
-                    }
-                    public Object doCall(Object o) {
-                        return call(new Object[]{o});
-                    }
-                    public Object doCall(Object[] args) {
-                        return call(args);
-                    }
-                    public Object call(Object[] args) {
-                        invocationCount++;
-                        if(args.length > 0) {
-                            invocationArgs.add(args[0]);
-                        }
-                        else {
-                            invocationArgs.add(ZERO_ARGUMENTS);
-                        }
-                        out.print("<jsp-body-gen"+invocationCount+">");
-                        return null;
-                    }
-                };
-                Closure tag = (Closure)tagLibProp;
-                if(tag.getParameterTypes().length == 1) {
-                    tag.call( new Object[]{ attributes });
-                    if(body != null) {
-                        body.call();
-                    }
-                }
-                if(tag.getParameterTypes().length == 2) {
-                    tag.call( new Object[] { attributes, body });
-                }
-            }else {
-               throw new GrailsTagException("Tag ["+getName()+"] does not exist in tag library ["+tagLib.getClass().getName()+"]");
-            }
-        }
-        else {
-            throw new GrailsTagException("Tag ["+getName()+"] does not exist. No tag library found.");
-        }
-
-        Collections.reverse(invocationArgs);
-        setCurrentArgument();
-        return EVAL_BODY_BUFFERED;
-    }
-
-    private void setCurrentArgument() {
-        if(invocationCount > 0) {
-            Object arg = invocationArgs.get(invocationCount - 1);
-            if(arg.equals(ZERO_ARGUMENTS)) {
-                pageContext.setAttribute(GROOVY_DEFAULT_ARGUMENT, null);
-            }
-            else {
-                pageContext.setAttribute(GROOVY_DEFAULT_ARGUMENT, arg);
-            }
-        }
-    }
-
-    public int doAfterBody() throws JspException {
-
-        BodyContent b = getBodyContent();
-        if(invocationCount > 0) {
-            if(b != null) {
-                jspWriter = b.getEnclosingWriter();
-                invocationBodyContent.add(b.getString());
-                b.clearBody();
-            }
-        }
-
-        invocationCount--;
-        setCurrentArgument();
-        if(invocationCount <= 0)  {
-            String tagContent = sw.toString();
-
-            int i = 1;
-            StringBuffer buf = new StringBuffer();
-            for (Iterator iter = invocationBodyContent.iterator(); iter.hasNext();i++) {
-                String body = (String) iter.next();
-                String replaceFlag = "<jsp-body-gen"+i+">";
-                int j = tagContent.indexOf(replaceFlag);
-                if(j > -1) {
-                    buf.append(tagContent.substring(0,j))
-                        .append(body)
-                        .append(tagContent.substring(j + replaceFlag.length(), tagContent.length()));
-                    tagContent = buf.toString();
-                    buf.delete(0, buf.length());
-                }
-            }
-            try {
-                jspWriter.write(tagContent);
-                out.close();
-            } catch (IOException e) {
-                throw new JspTagException("I/O error writing tag contents ["+tagContent +"] to response out");
-            }
-            return SKIP_BODY;
-        }
-        else
-            return EVAL_BODY_BUFFERED;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public final void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
-        if(value instanceof String) {
-            String stringValue = (String)value;
-            String trimmed = stringValue.trim();
-            if(trimmed.startsWith("[") && trimmed.endsWith("]")) {
-                trimmed = trimmed.substring(1,trimmed.length() - 1);
-                Matcher m = ATTRIBUTE_MAP.matcher(trimmed);
-                Map attributeMap = new HashMap();
-                while(m.find()) {
-                    String attributeName = m.group(1);
-                    String attributeValue = m.group(2);
-                    if(ExpressionEvaluationUtils.isExpressionLanguage(attributeValue)) {
-                        attributeMap.put(attributeName, ExpressionEvaluationUtils.evaluate(attributeName,attributeValue,Object.class,super.pageContext));
-                    }
-                    else {
-                        attributeMap.put(attributeName, attributeValue);
-                    }
-                }
-                this.attributes.put(localName, attributeMap);
-            }
-            else {
-                if(ExpressionEvaluationUtils.isExpressionLanguage(stringValue)) {
-                     this.attributes.put(localName,ExpressionEvaluationUtils.evaluate(localName,stringValue,Object.class,this.pageContext));
-                } else {
-                    this.attributes.put(localName,value);
-                }
-            }
-        }else {
-            this.attributes.put(localName,value);
-        }
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspLinkTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspLinkTag.java
deleted file mode 100644
index 7cd7db3..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspLinkTag.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib.jsp;
-
-/**
- * A JSP facade that delegates to the Grails taglib link tag
- *
- * @author Graeme Rocher
- * @since Jan 3, 2006
- */
-public class JspLinkTag extends JspInvokeGrailsTagLibTag {
-    private static final String TAG_NAME = "link";
-
-    private String controller;
-    private String action;
-
-    public JspLinkTag() {
-        super.setName(TAG_NAME);
-    }
-
-    public String getController() {
-        return controller;
-    }
-
-    public void setController(String controller) {
-        this.controller = controller;
-    }
-
-    public String getAction() {
-        return action;
-    }
-
-    public void setAction(String action) {
-        this.action = action;
-    }
-}
diff --git a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspRenderInputTag.java b/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspRenderInputTag.java
deleted file mode 100644
index 1fef052..0000000
--- a/groovy/modules/grails/src/web/org/codehaus/groovy/grails/web/taglib/jsp/JspRenderInputTag.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.taglib.jsp;
-
-import org.apache.commons.lang.StringUtils;
-import org.codehaus.groovy.grails.web.taglib.GrailsTagRegistry;
-import org.codehaus.groovy.grails.web.taglib.RenderInputTag;
-import org.codehaus.groovy.grails.web.pages.GroovyPage;
-import org.springframework.beans.InvalidPropertyException;
-import org.springframework.web.servlet.tags.RequestContextAwareTag;
-import org.springframework.web.util.ExpressionEvaluationUtils;
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.JspTagException;
-import java.io.Writer;
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * A JSP facade that delegates to the Grails RenderInputTag (@see org.codehaus.groovy.grails.web.taglib.RenderInputTag)
- * 
- * @author Graeme Rocher
- * @since 06-Jan-2006
- */
-public class JspRenderInputTag extends RequestContextAwareTag {
-
-    private String bean;
-    private String property;
-
-    protected int doStartTagInternal() throws Exception {
-
-        if(StringUtils.isBlank(property)) {
-             throw new JspTagException("Tag [scaffold] missing required attribute [property]");
-         }
-         if(StringUtils.isBlank(bean)) {
-             throw new JspTagException("Tag [scaffold] missing required attribute [bean]");
-         }
-         if(!ExpressionEvaluationUtils.isExpressionLanguage(bean)) {
-             throw new JspTagException("Attribute [bean] of tag [scaffold] must be a JSTL expression");
-         }
-         Writer out = pageContext.getOut();
-         try {
-             Object beanInstance = ExpressionEvaluationUtils.evaluate("bean",this.bean,Object.class,this.pageContext);
-             if(beanInstance == null)
-                throw new JspTagException("Bean ["+this.bean+"] referenced by tag [scaffold] cannot be null");
-
-            GrailsTagRegistry tagRegistry = GrailsTagRegistry.getInstance();
-            Map tagContext = new HashMap();
-            tagContext.put(GroovyPage.REQUEST, pageContext.getRequest());
-            tagContext.put(GroovyPage.RESPONSE, pageContext.getResponse());
-            tagContext.put(GroovyPage.SERVLET_CONTEXT, pageContext.getServletContext());
-            RenderInputTag tag = (RenderInputTag)tagRegistry.newTag( RenderInputTag.TAG_NAME );
-            tag.init(tagContext);
-            tag.setBean(beanInstance);
-            tag.setProperty(property);
-            tag.doStartTag();
-
-         } catch (InvalidPropertyException ipe) {
-             throw new JspException("Attribute [property] with value ["+property+"] is not a valid property of bean ["+bean+"] in tag [scaffold]",ipe);
-         }
-        return SKIP_BODY;
-    }
-
-
-    public String getBean() {
-        return bean;
-    }
-
-    public void setBean(String bean) {
-        this.bean = bean;
-    }
-
-    public String getProperty() {
-        return property;
-    }
-
-    public void setProperty(String property) {
-        this.property = property;
-    }
-}
diff --git a/groovy/modules/grails/test/commons/grails/pageflow/PageFlowBuilderTest.java b/groovy/modules/grails/test/commons/grails/pageflow/PageFlowBuilderTest.java
deleted file mode 100644
index 9c9f52a..0000000
--- a/groovy/modules/grails/test/commons/grails/pageflow/PageFlowBuilderTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-
-import java.lang.Class;
-import java.lang.Exception;
-import java.lang.Object;
-import java.lang.String;
-
-import junit.framework.TestCase;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class PageFlowBuilderTest extends TestCase {
-
-	public PageFlowBuilderTest() {
-		super();
-	}
-
-	public PageFlowBuilderTest(String arg0) {
-		super(arg0);
-	}
-
-	public void testSuccessPageFlowBuilder1() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("" +
-				"import grails.pageflow.*;\n" +
-				"\n" +
-				"class TestClass {\n" +
-				"  @Property Flow flow = new PageFlowBuilder().flow {\n" +
-				"    onSubmit(action:[formObjectClass:Object.class,formObjectName:\"object\"]) {\n" +
-				"      success(\"myFirstState\")\n" +
-				"    }\n" +
-				"    myFirstState(view:\"myView\") {\n" +
-				"      submit(\"myNextState\")\n" +
-				"    }\n" +
-				"  }\n" +
-				"}\n");
-		GroovyObject go = (GroovyObject)clazz.newInstance();
-		Object flow = go.getProperty("flow");
-		assertNotNull(flow);
-		assertTrue(flow instanceof Flow);
-		System.out.println(flow);
-	}
-}
diff --git a/groovy/modules/grails/test/commons/grails/pageflow/StateTests.java b/groovy/modules/grails/test/commons/grails/pageflow/StateTests.java
deleted file mode 100644
index 47de097..0000000
--- a/groovy/modules/grails/test/commons/grails/pageflow/StateTests.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.pageflow;
-
-import groovy.lang.Closure;
-
-import java.lang.IllegalArgumentException;
-import java.lang.IllegalStateException;
-import java.lang.Object;
-import java.lang.String;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.springframework.webflow.Action;
-import org.springframework.webflow.FlowAttributeMapper;
-import org.springframework.webflow.RequestContext;
-import org.springframework.webflow.action.FormAction;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class StateTests extends TestCase {
-
-	public StateTests() {
-		super();
-	}
-
-	public StateTests(String arg0) {
-		super(arg0);
-	}
-
-	public void testSuccessOneDiscriminatorField() {
-		State state = new State("test");
-		state.setViewName("test");
-		state.validate();
-		assertEquals(true, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testFailTwoDiscriminatorFields() {
-		State state = new State("test");
-		state.setActionClass(Object.class);
-		state.setViewName("test");
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-		
-	public void testFailWrongActionClass() {
-		State state = new State("test");
-		state.setActionClass(Object.class);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-	
-	public void testFailAbstractActionClass() {
-		State state = new State("test");
-		state.setActionClass(Action.class);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-	
-	public void testSuccessGoodActionClass1() {
-		State state = new State("test");
-		state.setActionClass(FormAction.class);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(true, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testSuccessGoodActionClass2() {
-		State state = new State("test");
-		state.setActionClass(new Object() {
-			public String execute(RequestContext context) {
-				return null;
-			}
-		}.getClass());
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(true, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testFailWrongAttributeMapperClass() {
-		State state = new State("test");
-		state.setAttributeMapperClass(Object.class);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-	
-	public void testFailAbstractAttributeMapperClass() {
-		State state = new State("test");
-		state.setAttributeMapperClass(FlowAttributeMapper.class);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-	
-	public void testSuccessGoodAttributeMapperClass() {
-		State state = new State("test");
-		state.setSubFlowId("test");
-		state.setAttributeMapperClass(new FlowAttributeMapper() {
-			public Map createSubflowInput(RequestContext arg0) {
-				return null;
-			}
-			public void mapSubflowOutput(RequestContext arg0) {
-			}
-		}.getClass());
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-	
-	public void testSuccessActionAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("action", new FormAction());
-		attributes.put("properties", new HashMap());
-		State state = new State("myAction", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(true, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testSuccessActionAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("action", FormAction.class);
-		attributes.put("properties", null);
-		State state = new State("myAction", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(true, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testSuccessActionAttributes3() {
-		Map attributes = new HashMap();
-		attributes.put("action", new Closure(new Object()) {});
-		attributes.put("properties", null);
-		State state = new State("myAction", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(true, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}	
-	
-	public void testFailActionAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("action", new Object());
-		try {
-			new State("myAction", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-	
-	public void testFailActionAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("action", FormAction.class);
-		attributes.put("properties", new ArrayList());
-		try {
-			new State("myAction", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-
-// Ideally this test should fail but then we would have to validate for every state
-//	if properties that are not supported are not set.
-//	public void testFailProperties() {
-//		Map attributes = new HashMap();
-//		attributes.put("properties", new HashMap());
-//		State state = new State("myAction", attributes);
-//		try {
-//			state.validate();
-//            fail("validate should have thrown IllegalStateException");
-//		} catch (IllegalStateException e) {
-//			// expected
-//		}
-//	}
-	
-	public void testSuccessViewAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("view", "someView");
-		attributes.put("model", new HashMap());
-		State state = new  State("myViewState", attributes);
-		state.validate();
-		assertEquals(true, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testSuccessViewAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("view", new Closure(new Object()) {});
-		attributes.put("model", null);
-		State state = new State("myViewState", attributes);
-		state.validate();
-		assertEquals(true, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testFailViewAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("view", new Object());
-		try {
-			new State("myViewState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-	
-	public void testFailViewAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("view", "someView");
-		attributes.put("model", new ArrayList());
-		try {
-			new State("myViewState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-	
-	public void testSuccessDecisionAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("decision", "expression");
-		attributes.put("trueState", "someState");
-		attributes.put("falseState", "someOtherState");
-		State state = new State("myDecisionState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(true, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-
-	public void testSuccessDecisionAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("decision", new Closure(new Object()) {});
-		attributes.put("trueState", "someState");
-		attributes.put("falseState", "someOtherState");
-		State state = new State("myDecisionState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(true, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testFailDecisionAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("decision", "expression");
-		attributes.put("falseState", "someOtherState");
-		State state = new State("myDecisionState", attributes);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-        } catch (IllegalStateException e) {
-			// expected
-		}
-	}
-
-	public void testFailDecisionAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("decision", "expression");
-		attributes.put("trueState", "someState");
-		State state = new State("myDecisionState", attributes);
-		try {
-			state.validate();
-            fail("validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			// expected
-		}
-	}
-
-	public void testFailDecisionAttributes3() {
-		Map attributes = new HashMap();
-		attributes.put("decision", new Object());
-		try {
-			new State("myDecisionState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-	
-	public void testFailDecisionAttributes4() {
-		Map attributes = new HashMap();
-		attributes.put("decision", "expression");
-		attributes.put("trueState", new Object());
-		try {
-			new State("myDecisionState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-
-	public void testFailDecisionAttributes5() {
-		Map attributes = new HashMap();
-		attributes.put("decision", "expression");
-		attributes.put("falseState", new Object());
-		try {
-			new State("myDecisionState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			// expected
-		}
-	}
-
-	public void testSuccessSubflowAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "someFlow");
-		State state = new State("mySubflowState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-	
-	public void testSuccessSubflowAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "someFlow");
-		attributes.put("input", new Closure(new Object()) {});
-		State state = new State("mySubflowState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-
-	public void testSuccessSubflowAttributes3() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "someFlow");
-		attributes.put("output", new Closure(new Object()) {});
-		State state = new State("mySubflowState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-
-	public void testSuccessSubflowAttributes4() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "someFlow");
-		attributes.put("mapper", new FlowAttributeMapper() {
-			public Map createSubflowInput(RequestContext arg0) {
-				return null;
-			}
-			public void mapSubflowOutput(RequestContext arg0) {
-			}
-		}.getClass());
-		attributes.put("properties", new HashMap());
-		State state = new State("mySubflowState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-
-	public void testSuccessSubflowAttributes5() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "someFlow");
-		attributes.put("mapper", new FlowAttributeMapper() {
-			public Map createSubflowInput(RequestContext arg0) {
-				return null;
-			}
-			public void mapSubflowOutput(RequestContext arg0) {
-			}
-		});
-		attributes.put("properties", null);
-		State state = new State("mySubflowState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(false, state.isEndState());
-		assertEquals(true, state.isSubflowState());
-	}
-
-	public void testFailSubflowAttributes1() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", new Object());
-		try {
-			new State("mySubflowState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			//expected
-		}
-	}
-	
-	public void testFailSubflowAttributes2() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "expression");
-		attributes.put("input", new Object());
-		try {
-			new State("mySubflowState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			//expected
-		}
-	}
-
-	public void testFailSubflowAttributes3() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "expression");
-		attributes.put("output", new Object());
-		try {
-			new State("mySubflowState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			//expected
-		}
-	}
-
-	public void testFailSubflowAttributes4() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "expression");
-		attributes.put("mapper", new Object());
-		try {
-			new State("mySubflowState", attributes);
-            fail("State ctor should have thrown IllegalArgumentException");
-		} catch (IllegalArgumentException e) {
-			//expected
-		}
-	}
-
-	public void testFailSubflowAttributes5() {
-		Map attributes = new HashMap();
-		attributes.put("subflow", "expression");
-		attributes.put("mapper", Object.class);
-		State state = new State("mySubflowState", attributes);
-		try {
-			state.validate();
-            fail("State validate should have thrown IllegalStateException");
-		} catch (IllegalStateException e) {
-			//expected
-		}
-	}
-
-	public void testSuccessEndState1() {
-		Map attributes = new HashMap();
-		State state = new State("myEndState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(true, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-	
-	public void testSuccessEndState2() {
-		Map attributes = new HashMap();
-		attributes.put("view", "someView");
-		attributes.put("end", Boolean.TRUE);
-		State state = new State("myEndState", attributes);
-		state.validate();
-		assertEquals(false, state.isViewState());
-		assertEquals(false, state.isActionState());
-		assertEquals(false, state.isDecisionState());
-		assertEquals(true, state.isEndState());
-		assertEquals(false, state.isSubflowState());
-	}
-}
diff --git a/groovy/modules/grails/test/commons/grails/util/OpenRicoBuilderTests.java b/groovy/modules/grails/test/commons/grails/util/OpenRicoBuilderTests.java
deleted file mode 100644
index d2123d8..0000000
--- a/groovy/modules/grails/test/commons/grails/util/OpenRicoBuilderTests.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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 grails.util;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
-import java.io.Writer;
-
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.TestCase;
-
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 5, 2005
- */
-public class OpenRicoBuilderTests extends TestCase {
-
-	public OpenRicoBuilderTests() {
-		super();
-	}
-
-	public OpenRicoBuilderTests(String arg0) {
-		super(arg0);
-	}
-
-	private HttpServletResponse getResponse(Writer writer) {
-		final PrintWriter printer = new PrintWriter(writer);
-		return new MockHttpServletResponse() {
-			public PrintWriter getWriter() throws UnsupportedEncodingException {
-				return printer;
-			}
-		};
-	}
-
-	private void parse(String groovy) throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("import grails.util.*; class TestClass { List names = [\"Steven\", \"Hans\", \"Erwin\"]; @Property Closure test = { response -> new OpenRicoBuilder(response)." + groovy + "; } }");
-		GroovyObject go = (GroovyObject)clazz.newInstance();
-		Closure closure = (Closure)go.getProperty("test");
-		StringWriter sw = new StringWriter();
-		closure.call(getResponse(sw));
-		System.out.println(sw.getBuffer().toString());
-	}
-
-	
-	public void testOpenRicoBuilderAjaxResponse() throws Exception {
-		StringWriter sw = new StringWriter();
-		new OpenRicoBuilder(getResponse(sw));
-		System.out.println(sw.getBuffer().toString());
-	}
-
-	public void testOpenRicoBuilderElement() throws Exception {
-		parse("ajax{ element(id:\"test\") { } }");
-		
-		try {
-			parse("ajax{ test(id:\"test\") { } }");
-			fail();
-		} catch (InvokerInvocationException e) {
-			// expected
-		}
-
-		try {
-			parse("element{ test(id:\"test\") { } }");
-			fail();
-		} catch (InvokerInvocationException e) {
-			// expected
-		}
-
-		
-		parse("ajax{ element(id:\"test\") { testTag {} } }");
-		
-		parse("ajax() { element(id:\"test\") { testTag {} }; element(id:\"test2\") {}  }");
-
-		parse("ajax { object(id:\"test\") { testTag {} }; object(id:\"test2\") {}  }");
-
-		parse("ajax { element(id:\"test\") { select(name:\"test\") { for (name in names) { span(name) } } } }");
-	}
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClassTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClassTests.java
deleted file mode 100644
index a92188e..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractGrailsClassTests.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class AbstractGrailsClassTests extends TestCase {
-
-	public AbstractGrailsClassTests() {
-		super();
-	}
-
-	public AbstractGrailsClassTests(String arg0) {
-		super(arg0);
-	}
-
-	public void testAbstractGrailsClassNoPackage() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class TestService { }");
-		GrailsClass grailsClass = new AbstractGrailsClass(clazz, "Service") {};
-		assertEquals("TestService", clazz.getName());
-		assertEquals("Test", grailsClass.getName());
-		assertEquals("TestService", grailsClass.getFullName());
-		assertNotNull(grailsClass.newInstance());
-	}
-
-	public void testAbstractGrailsClassPackage() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("package test.casey; class TestService { }");
-		GrailsClass grailsClass = new AbstractGrailsClass(clazz, "Service") {};
-		assertEquals("test.casey.TestService", clazz.getName());
-		assertEquals("Test", grailsClass.getName());
-		assertEquals("TestService", grailsClass.getFullName());
-		assertNotNull(grailsClass.newInstance());
-	}
-
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClassTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClassTests.java
deleted file mode 100644
index 06b26ea..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/AbstractInjectableGrailsClassTests.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class AbstractInjectableGrailsClassTests extends TestCase {
-
-	public AbstractInjectableGrailsClassTests() {
-		super();
-	}
-
-	public AbstractInjectableGrailsClassTests(String arg0) {
-		super(arg0);
-	}
-
-	public void testAbstractInjectableGrailsClassDefault() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class TestService { }");
-		InjectableGrailsClass grailsClass = new AbstractInjectableGrailsClass(clazz, "Service") {};
-		assertTrue(grailsClass.byType());
-		assertFalse(grailsClass.byName());
-	}
-	
-	public void testAbstractInjectableGrailsClassNullProperty() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class TestService { @Property boolean byName; @Property boolean available = true }");
-		InjectableGrailsClass grailsClass = new AbstractInjectableGrailsClass(clazz, "Service") {};
-		assertTrue(grailsClass.byType());
-		assertFalse(grailsClass.byName());
-		assertTrue(grailsClass.getAvailable());
-	}
-
-	public void testAbstractInjectableGrailsClassNullPropertyFalse() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class TestService { @Property boolean byName = false; @Property boolean available = true }");
-		InjectableGrailsClass grailsClass = new AbstractInjectableGrailsClass(clazz, "Service") {};
-		assertTrue(grailsClass.byType());
-		assertFalse(grailsClass.byName());
-		assertTrue(grailsClass.getAvailable());
-	}
-
-	public void testAbstractInjectableGrailsClassNullPropertyTrue() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class TestService { @Property boolean byName = true; public static boolean available = false }");
-		InjectableGrailsClass grailsClass = new AbstractInjectableGrailsClass(clazz, "Service") {};
-		assertFalse(grailsClass.byType());
-		assertTrue(grailsClass.byName());
-		assertFalse(grailsClass.getAvailable());
-	}
-
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/ClassReloadingTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/ClassReloadingTests.java
deleted file mode 100644
index 6783029..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/ClassReloadingTests.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyResourceLoader;
-import junit.framework.TestCase;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class ClassReloadingTests extends TestCase {
-
-	public void testReloadingClasses() throws Exception {
-		final GroovyClassLoader cl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-		cl.setResourceLoader( new GroovyResourceLoader() {
-			public URL loadGroovySource(String filename) throws MalformedURLException {
-				filename = filename.replace('.', '/') + ".groovy";
-				return cl.getResource(filename);
-			}				
-		}
-	);		
-		
-		File file = new File(cl.getResource("org/codehaus/groovy/grails/commons/TestReload.groovy").getFile());
-		
-		FileWriter fw = new FileWriter(file);
-		try {
-			fw.write(  "package org.codehaus.groovy.grails.commons;\n" +
-						"class TestReload { \n" +
-							"@Property hello = \"hello\"\n" +
-						"}");		
-			fw.close();
-			
-			Class groovyClass = cl.loadClass("org.codehaus.groovy.grails.commons.TestReload",true,false);
-
-			
-			
-			GroovyObject go = (GroovyObject)groovyClass.newInstance();
-			
-			assertEquals("hello", go.getProperty("hello"));
-			
-			// change class
-			fw = new FileWriter(file);
-			fw.write(  "package org.codehaus.groovy.grails.commons;\n" +
-					"class TestReload { \n" +
-						"@Property hello = \"goodbye\"\n" +
-					"}");
-            fw.close();
-
-            // reload
-			groovyClass = cl.loadClass("org.codehaus.groovy.grails.commons.TestReload",true,false);			
-			go = (GroovyObject)groovyClass.newInstance();			
-			assertEquals("goodbye", go.getProperty("hello"));			
-		}
-		finally {
-			fw.close();
-		}
-	}
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClassTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClassTests.java
deleted file mode 100644
index 327380f..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsControllerClassTests.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class DefaultGrailsControllerClassTests extends TestCase {
-
-	public DefaultGrailsControllerClassTests() {
-		super();
-	}
-
-	public DefaultGrailsControllerClassTests(String arg0) {
-		super(arg0);
-	}
-	
-	public void testDefaultGrailsControllerClassURIs() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class OverviewController { }");
-		GrailsControllerClass grailsClass = new DefaultGrailsControllerClass(clazz);
-		assertEquals(0, grailsClass.getURIs().length);
-	}
-	
-	public void testDefaultGrailsControllerViewNames() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Class clazz = cl.parseClass("class OverviewController { @Property String listView = \"listPage\"; @Property Closure list = { request, response -> return null }; } ");
-		GrailsControllerClass grailsClass = new DefaultGrailsControllerClass(clazz);
-		assertEquals("Overview", grailsClass.getName());
-		assertEquals("OverviewController", grailsClass.getFullName());
-		assertEquals("/overview/listPage", grailsClass.getViewByURI("/overview/list"));
-		assertEquals(2, grailsClass.getURIs().length);
-	}
-
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSourceTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSourceTests.java
deleted file mode 100644
index 8cb8f72..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/DefaultGrailsDataSourceTests.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.codehaus.groovy.grails.commons;
-
-import junit.framework.TestCase;
-import groovy.lang.GroovyClassLoader;
-
-/**
- * User: Graeme
- * Date: 19-Feb-2006
- */
-public class DefaultGrailsDataSourceTests extends TestCase {
-
-    public void testGrailsDataSource() throws Exception {
-        GroovyClassLoader gcl = new GroovyClassLoader();
-
-        Class dsClass = gcl.parseClass("class TestDataSource {" +
-                "@Property String driverClassName = 'test.driverClass'\n" +
-                "@Property String url = 'jdbc://testurl'\n" +
-                "@Property String username ='sa'\n" +
-                "@Property String password = 'pass'\n" +
-                "@Property configClass = org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration.class" +
-                "}");
-
-        GrailsDataSource ds = new DefaultGrailsDataSource(dsClass);
-        assertNotNull(ds.getConfigurationClass());
-
-    }
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/GrailsClassUtilsTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/GrailsClassUtilsTests.java
deleted file mode 100644
index f4cabb2..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/GrailsClassUtilsTests.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import junit.framework.TestCase;
-
-/**
- * @author Graeme Rocher
- * @since 15-Feb-2006
- */
-public class GrailsClassUtilsTests extends TestCase {
-
-        public void testGetNaturalName() throws Exception {
-            assertEquals("First Name", GrailsClassUtils.getNaturalName("firstName"));
-            assertEquals("URL", GrailsClassUtils.getNaturalName("URL"));
-            assertEquals("Local URL", GrailsClassUtils.getNaturalName("localURL"));
-            assertEquals("URL local", GrailsClassUtils.getNaturalName("URLlocal"));
-        }
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/MultipleClassesPerFileTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/MultipleClassesPerFileTests.java
deleted file mode 100644
index f442295..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/MultipleClassesPerFileTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.commons;
-
-import java.io.File;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 3, 2005
- */
-public class MultipleClassesPerFileTests extends TestCase {
-
-	public MultipleClassesPerFileTests() {
-		super();
-	}
-
-	public MultipleClassesPerFileTests(String arg0) {
-		super(arg0);
-	}
-
-	public void testMultipleClassesPerFile() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		cl.parseClass(new File("test/commons/org/codehaus/groovy/grails/commons/classes.groovy"));
-		Class testClass1 = cl.loadClass("TestClass1");
-		Class testClass2 = cl.loadClass("TestClass2");
-		
-		try {
-			cl.loadClass("TestClass3");
-			fail();
-		} catch (ClassNotFoundException e) {
-			// expected
-		}
-		
-		assertNotNull(testClass1);
-		assertNotNull(testClass2);
-	}
-}
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/TestReload.groovy b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/TestReload.groovy
deleted file mode 100644
index a4f0970..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/TestReload.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.codehaus.groovy.grails.commons;
-class TestReload { 
-@Property hello = "goodbye"
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/classes.groovy b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/classes.groovy
deleted file mode 100644
index 48c2a56..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/commons/classes.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-class TestClass1 {
-
-}
-
-class TestClass2 {
-	static boolean available = true
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyTests.java b/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyTests.java
deleted file mode 100644
index 58b5f38..0000000
--- a/groovy/modules/grails/test/commons/org/codehaus/groovy/grails/validation/ConstrainedPropertyTests.java
+++ /dev/null
@@ -1,322 +0,0 @@
-package org.codehaus.groovy.grails.validation;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.IntRange;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.springframework.validation.BindException;
-import org.springframework.validation.Errors;
-import org.springframework.validation.FieldError;
-
-import junit.framework.TestCase;
-
-public class ConstrainedPropertyTests extends TestCase {
-
-	private String testEmail = "rubbish_email";
-	private String testURL = "rubbish_url";
-	
-	/**
-	 * @return Returns the testEmail.
-	 */
-	public String getTestEmail() {
-		return testEmail;
-	}
-
-	/**
-	 * @param testEmail The testEmail to set.
-	 */
-	public void setTestEmail(String testEmail) {
-		this.testEmail = testEmail;
-	}
-
-
-
-	/**
-	 * @return Returns the testURL.
-	 */
-	public String getTestURL() {
-		return testURL;
-	}
-
-	/**
-	 * @param testURL The testURL to set.
-	 */
-	public void setTestURL(String testURL) {
-		this.testURL = testURL;
-	}
-
-	/*
-	 * Test method for 'org.codehaus.groovy.grails.validation.ConstrainedProperty.supportsContraint(String)'
-	 */
-	public void testSupportsContraint() {
-		ConstrainedProperty cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", String.class);
-		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.LENGTH_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_LENGTH_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_LENGTH_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));
-	
-		
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", Collection.class);
-
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));		
-		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));
-		
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", Number.class);
-		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.SIZE_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));		
-		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));
-		
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", Date.class);
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));	
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));	
-		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));	
-		
-		
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", Object.class);
-		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));	
-		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));			
-		assertFalse(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.LENGTH_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MAX_LENGTH_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MIN_LENGTH_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));	
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MAX_SIZE_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MIN_SIZE_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.SIZE_CONSTRAINT ));		
-		
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testProperty", Comparable.class);
-		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.IN_LIST_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NOT_EQUAL_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.NULLABLE_CONSTRAINT ));			
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MAX_CONSTRAINT ));
-		assertTrue(cp.supportsContraint( ConstrainedProperty.MIN_CONSTRAINT ));		
-		assertTrue(cp.supportsContraint( ConstrainedProperty.RANGE_CONSTRAINT ));
-		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.BLANK_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.EMAIL_CONSTRAINT ));
-		assertFalse(cp.supportsContraint( ConstrainedProperty.MATCHES_CONSTRAINT ));		
-		assertFalse(cp.supportsContraint( ConstrainedProperty.URL_CONSTRAINT ));	
-		
-	}
-
-	/*
-	 * Test method for 'org.codehaus.groovy.grails.validation.ConstrainedProperty.applyConstraint(String, Object)'
-	 */
-	public void testApplyConstraint() {
-		
-		// test validate email
-		ConstrainedProperty cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testEmail", String.class);
-		
-		cp.applyConstraint( ConstrainedProperty.EMAIL_CONSTRAINT, new Boolean(true) );
-		assertTrue(cp.getAppliedConstraints().size() == 1);
-		Errors errors = new BindException(this,"testObject");
-		Constraint c = null;
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testEmail, errors);			
-		}
-		assertTrue(errors.hasErrors());
-		FieldError error = errors.getFieldError("testEmail");
-		assertNotNull(error);
-		assertEquals("rubbish_email",error.getRejectedValue());
-		
-		this.testEmail = "avalidemail@hotmail.com";
-		errors = new BindException(this,"testObject");
-		c.validate(this.testEmail,errors);
-		assertFalse(errors.hasErrors());
-		
-		// test validate url
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testURL", String.class);
-		cp.applyConstraint( ConstrainedProperty.URL_CONSTRAINT, new Boolean(true) );
-		
-		assertTrue(cp.getAppliedConstraints().size() == 1);
-		errors = new BindException(this,"testObject");
-		
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testURL, errors);			
-		}
-		assertTrue(errors.hasErrors());
-		error = errors.getFieldError("testURL");
-		assertNotNull(error);
-		assertEquals(this.testURL,error.getRejectedValue());
-		
-		this.testURL = "http://www.google.com";
-		errors = new BindException(this,"testObject");
-		c.validate(this.testURL,errors);
-		assertFalse(errors.hasErrors());	
-		
-		// test blank constraint
-		cp.applyConstraint( ConstrainedProperty.URL_CONSTRAINT, null );
-		cp.applyConstraint( ConstrainedProperty.BLANK_CONSTRAINT, new Boolean(false) );
-		
-		assertTrue(cp.getAppliedConstraints().size() == 1);
-		errors = new BindException(this,"testObject");
-		this.testURL = "";
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testURL, errors);			
-		}	
-		assertTrue(errors.hasErrors());
-		error = errors.getFieldError("testURL");
-		System.out.println(error);
-		assertNotNull(error);		
-		
-		// test nullable constraint
-		cp.applyConstraint( ConstrainedProperty.BLANK_CONSTRAINT, new Boolean(true) );
-		cp.applyConstraint( ConstrainedProperty.NULLABLE_CONSTRAINT, new Boolean(false) );
-		
-		errors = new BindException(this,"testObject");
-		this.testURL = null;
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testURL, errors);			
-		}	
-		assertTrue(errors.hasErrors());
-		error = errors.getFieldError("testURL");
-		System.out.println(error);
-		assertNotNull(error);		
-		
-		// test inList constraint
-		cp.applyConstraint( ConstrainedProperty.NULLABLE_CONSTRAINT, new Boolean(true) );
-		List list = new ArrayList();
-		list.add("one");
-		list.add("two");
-		list.add("three");
-		this.testURL = "something";
-		cp.applyConstraint( ConstrainedProperty.IN_LIST_CONSTRAINT, list );
-		
-		errors = new BindException(this,"testObject");
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testURL, errors);			
-		}	
-		assertTrue(errors.hasErrors());
-		error = errors.getFieldError("testURL");
-		System.out.println(error);
-		assertNotNull(error);	
-		
-		this.testURL = "two";
-		errors = new BindException(this,"testObject");
-		c.validate(this.testURL,errors);
-		assertFalse(errors.hasErrors());
-		
-		// test length constraint
-		cp = new ConstrainedProperty(ConstrainedPropertyTests.class,"testURL", String.class);
-		cp.applyConstraint( ConstrainedProperty.LENGTH_CONSTRAINT, new IntRange(5,15) );
-		
-		errors = new BindException(this,"testObject");
-		for (Iterator i = cp.getAppliedConstraints().iterator(); i.hasNext();) {
-			c = (Constraint) i.next();			
-			c.validate(this.testURL, errors);			
-		}		
-		
-		assertTrue(errors.hasErrors());
-		error = errors.getFieldError("testURL");
-		System.out.println(error);
-		assertNotNull(error);		
-		
-		this.testURL = "absolutelytotallytoolong";
-		errors = new BindException(this,"testObject");
-		c.validate(this.testURL,errors);
-		assertTrue(errors.hasErrors());		
-	}
-
-	
-	public void testConstraintBuilder() throws Exception {
-		GroovyClassLoader gcl = new GroovyClassLoader();
-		
-		Class groovyClass = gcl.parseClass( "class TestClass {\n" +
-						"@Property Long id\n" +
-						"@Property Long version\n" +
-						"@Property String login\n" +
-						"@Property String email\n" +
-						"@Property constraints = {\n" +
-							"login(length:5..15,nullable:false,blank:false)\n" +
-							"email(email:true)\n" +
-						"}\n" +
-						"}" );
-		
-		GrailsDomainClass domainClass = new DefaultGrailsDomainClass(groovyClass);
-		
-		Map constrainedProperties = domainClass.getConstrainedProperties();
-		assertTrue(constrainedProperties.size() == 2);
-		ConstrainedProperty loginConstraint = (ConstrainedProperty)constrainedProperties.get("login");
-		assertTrue(loginConstraint.getAppliedConstraints().size() == 3);
-		
-		ConstrainedProperty emailConstraint = (ConstrainedProperty)constrainedProperties.get("email");
-		assertTrue(emailConstraint.getAppliedConstraints().size() == 1);
-		
-		GroovyObject go = (GroovyObject)groovyClass.newInstance();
-		go.setProperty("email", "rubbish_email");
-		Errors errors = new BindException(go, "TestClass");
-		emailConstraint.validate( go.getProperty("email"), errors );
-		
-		assertTrue(errors.hasErrors());
-		go.setProperty("email", "valid@email.com");
-		errors = new BindException(go, "TestClass");
-		emailConstraint.validate( go.getProperty("email"), errors );
-		assertFalse(errors.hasErrors());
-	}
-}
- 
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/hibernate-configuration-2.0.dtd b/groovy/modules/grails/test/persistence/hibernate-configuration-2.0.dtd
deleted file mode 100644
index 11bca49..0000000
--- a/groovy/modules/grails/test/persistence/hibernate-configuration-2.0.dtd
+++ /dev/null
@@ -1,44 +0,0 @@
-<!-- Hibernate file-based configuration document.
-
-<!DOCTYPE hibernate-configuration PUBLIC 
-	"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
-	"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
-
-An instance of this document contains property settings and references 
-to mapping files for a number of SessionFactory instances to be listed 
-in JNDI.
-
--->
-
-<!ELEMENT hibernate-configuration (session-factory)>
-
-<!ELEMENT property (#PCDATA)>
-<!ATTLIST property name CDATA #REQUIRED>
-
-<!ELEMENT mapping EMPTY> <!-- reference to a mapping file -->
-<!ATTLIST mapping resource CDATA #IMPLIED>
-<!ATTLIST mapping file CDATA #IMPLIED>
-<!ATTLIST mapping jar CDATA #IMPLIED>
-
-<!ELEMENT jcs-class-cache EMPTY> <!-- deprecated -->
-<!ATTLIST jcs-class-cache class CDATA #REQUIRED>
-<!ATTLIST jcs-class-cache region CDATA #IMPLIED>
-<!ATTLIST jcs-class-cache usage (read-only|read-write|nonstrict-read-write) #REQUIRED>
-
-<!ELEMENT jcs-collection-cache EMPTY> <!-- deprecated -->
-<!ATTLIST jcs-collection-cache collection CDATA #REQUIRED>
-<!ATTLIST jcs-collection-cache region CDATA #IMPLIED>
-<!ATTLIST jcs-collection-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
-
-<!ELEMENT class-cache EMPTY>
-<!ATTLIST class-cache class CDATA #REQUIRED>
-<!ATTLIST class-cache region CDATA #IMPLIED>
-<!ATTLIST class-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
-
-<!ELEMENT collection-cache EMPTY>
-<!ATTLIST collection-cache collection CDATA #REQUIRED>
-<!ATTLIST collection-cache region CDATA #IMPLIED>
-<!ATTLIST collection-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
-
-<!ELEMENT session-factory (property*, mapping+, (class-cache|collection-cache|jcs-class-cache|jcs-collection-cache)*)>
-<!ATTLIST session-factory name CDATA #IMPLIED> <!-- the JNDI name -->
diff --git a/groovy/modules/grails/test/persistence/hibernate-mapping-2.0.dtd b/groovy/modules/grails/test/persistence/hibernate-mapping-2.0.dtd
deleted file mode 100644
index e49ffa4..0000000
--- a/groovy/modules/grails/test/persistence/hibernate-mapping-2.0.dtd
+++ /dev/null
@@ -1,542 +0,0 @@
-<!-- Hibernate Mapping DTD.
-
-<!DOCTYPE hibernate-mapping PUBLIC 
-	"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
-	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
-
-An instance of this XML document may contain mappings for an arbitrary 
-number of classes. The class mappings may contain associations to classes
-mapped in the same document or in another document. No class may be 
-mapped more than once. Each document may also contain definitions of an
-arbitrary number of queries, and import declarations of arbitrary classes. 
-
--->
-
-<!-- The document root. -->
-
-<!ELEMENT hibernate-mapping (meta*, import*, (class|subclass|joined-subclass)*, query*, sql-query*)>
-  <!ATTLIST hibernate-mapping schema CDATA #IMPLIED>                            <!-- default: none -->
-  <!ATTLIST hibernate-mapping default-cascade (none|save-update|all) "none">
-  <!ATTLIST hibernate-mapping default-access CDATA "property">
-  <!ATTLIST hibernate-mapping auto-import (true|false) "true">
-  <!ATTLIST hibernate-mapping package CDATA #IMPLIED>                           <!-- default: none -->
-  
-<!-- An explicit query language "import" -->
-
-<!ELEMENT import EMPTY>
-  <!ATTLIST import class CDATA #REQUIRED>
-  <!ATTLIST import rename CDATA #IMPLIED>  <!-- default: unqualified class name -->
-
-<!-- Root of an entity class hierarchy. Entities have their own tables. -->
-
-<!ELEMENT class ( 
-  meta*,
-  (cache|jcs-cache)?,
-  (id|composite-id),
-  discriminator?,
-  (version|timestamp)?,
-  (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array)*, 
-  ((subclass*)|(joined-subclass*))
-)>
-  <!ATTLIST class name CDATA #REQUIRED>
-  <!ATTLIST class table CDATA #IMPLIED>                        <!-- default: unqualified classname -->
-  <!ATTLIST class schema CDATA #IMPLIED>                       <!-- default: none -->
-  <!ATTLIST class proxy CDATA #IMPLIED>                        <!-- default: no proxy interface -->
-  <!ATTLIST class discriminator-value CDATA #IMPLIED>          <!-- default: unqualified class name | none -->
-  <!ATTLIST class mutable (true|false) "true">
-  <!ATTLIST class polymorphism (implicit|explicit) "implicit">
-  <!ATTLIST class where CDATA #IMPLIED>                        <!-- default: none -->
-  <!ATTLIST class persister CDATA #IMPLIED>
-  <!ATTLIST class dynamic-update (true|false) "false">
-  <!ATTLIST class dynamic-insert (true|false) "false">
-  <!ATTLIST class batch-size CDATA "1">
-  <!ATTLIST class select-before-update (true|false) "false">
-  <!ATTLIST class optimistic-lock (none|version|dirty|all) "version">
-  <!ATTLIST class lazy (true|false) #IMPLIED>
-  <!ATTLIST class check CDATA #IMPLIED>                        <!-- default: none -->
-
-<!-- Declares the id type, column and generation algorithm for an entity class.
-If a name attribut is given, the id is exposed to the application through the 
-named property of the class. If not, the id is only exposed to the application 
-via Session.getIdentifier() -->
-
-<!ELEMENT id (meta*, column*, generator)>
-  <!ATTLIST id name CDATA #IMPLIED>
-  <!ATTLIST id access CDATA #IMPLIED>
-  <!ATTLIST id column CDATA #IMPLIED>
-  <!ATTLIST id type CDATA #IMPLIED>
-  <!ATTLIST id length CDATA #IMPLIED>
-  <!ATTLIST id unsaved-value CDATA "null">          <!-- any|none|null|0|-1|... -->
-
-<!-- A composite key may be modelled by a java class with a property for each 
-key column. The class must implement java.io.Serializable and reimplement equals() 
-and hashCode(). -->
-
-<!ELEMENT composite-id ( meta*, (key-property|key-many-to-one)+ )>
-  <!ATTLIST composite-id class CDATA #IMPLIED>
-  <!ATTLIST composite-id name CDATA #IMPLIED>
-  <!ATTLIST composite-id access CDATA #IMPLIED>
-  <!ATTLIST composite-id unsaved-value (any|none) "none"> 
-
-<!-- Polymorphic data requires a column holding a class discriminator value. This
-value is not directly exposed to the application. -->
-
-<!ELEMENT discriminator (column?)>
-  <!ATTLIST discriminator column CDATA #IMPLIED>   <!-- default: "class"|none -->
-  <!ATTLIST discriminator type CDATA "string">
-  <!ATTLIST discriminator not-null (true|false) "true">
-  <!ATTLIST discriminator length CDATA #IMPLIED>
-  <!ATTLIST discriminator force (true|false) "false">
-  <!ATTLIST discriminator insert (true|false) "true">
-  
-<!-- Versioned data requires a column holding a version number. This is exposed to the
-application through a property of the Java class. -->
-
-<!ELEMENT version (meta*)>
-  <!ATTLIST version name CDATA #REQUIRED>
-  <!ATTLIST version access CDATA #IMPLIED>
-  <!ATTLIST version column CDATA #IMPLIED>
-  <!ATTLIST version type CDATA "integer">
-  <!ATTLIST version unsaved-value (null|negative|undefined) "undefined">
-
-<!ELEMENT timestamp (meta*)>
-  <!ATTLIST timestamp name CDATA #REQUIRED>
-  <!ATTLIST timestamp column CDATA #IMPLIED>
-  <!ATTLIST timestamp access CDATA #IMPLIED>
-  <!ATTLIST timestamp unsaved-value (null|undefined) "null">
-
-<!-- Subclass declarations are nested beneath the root class declaration to achieve
-polymorphic persistence. -->
-
-<!ELEMENT subclass ( 
-	meta*,
-	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array)*, 
-	subclass*
-)>
-  <!ATTLIST subclass name CDATA #REQUIRED>
-  <!ATTLIST subclass proxy CDATA #IMPLIED>                <!-- default: no proxy interface -->
-  <!ATTLIST subclass discriminator-value CDATA #IMPLIED>  <!-- default: unqualified class name | none -->
-  <!ATTLIST subclass dynamic-update (true|false) "false">
-  <!ATTLIST subclass dynamic-insert (true|false) "false">
-  <!ATTLIST subclass select-before-update (true|false) "false">
-  <!ATTLIST subclass extends CDATA #IMPLIED>              <!-- default: empty when a toplevel, otherwise the nearest class definition -->
-  <!ATTLIST subclass lazy (true|false) #IMPLIED>
-  <!ATTLIST subclass persister CDATA #IMPLIED>
-
-<!-- Joined subclasses are used for the normalized table-per-subclass mapping strategy -->
-
-<!ELEMENT joined-subclass ( 
-	meta*,
-	key,
-	(property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array)*, 
-	joined-subclass*
-)>
-  <!ATTLIST joined-subclass name CDATA #REQUIRED>
-  <!ATTLIST joined-subclass proxy CDATA #IMPLIED>         <!-- default: no proxy interface -->
-  <!ATTLIST joined-subclass table CDATA #IMPLIED>         <!-- default: unqualified class name -->
-  <!ATTLIST joined-subclass schema CDATA #IMPLIED>
-  <!ATTLIST joined-subclass dynamic-update (true|false) "false">
-  <!ATTLIST joined-subclass dynamic-insert (true|false) "false">
-  <!ATTLIST joined-subclass select-before-update (true|false) "false">
-  <!ATTLIST joined-subclass extends CDATA #IMPLIED>       <!-- default: empty when a toplevel, otherwise the nearest class definition -->
-  <!ATTLIST joined-subclass lazy (true|false) #IMPLIED>
-  <!ATTLIST joined-subclass persister CDATA #IMPLIED>
-  <!ATTLIST joined-subclass check CDATA #IMPLIED>         <!-- default: none -->
-  
-<!-- Property of an entity class or component, component-element, composite-id, etc. 
-JavaBeans style properties are mapped to table columns. -->
-
-<!ELEMENT property (meta*,column*)>
-  <!ATTLIST property name CDATA #REQUIRED>
-  <!ATTLIST property access CDATA #IMPLIED>
-  <!ATTLIST property type CDATA #IMPLIED>
-  <!ATTLIST property column CDATA #IMPLIED>
-  <!ATTLIST property length CDATA #IMPLIED>
-  <!ATTLIST property not-null (true|false) "false">
-  <!ATTLIST property unique (true|false) "false">
-  <!ATTLIST property update (true|false) "true">   <!-- only supported for properties of a class (not component) -->
-  <!ATTLIST property insert (true|false) "true">   <!-- only supported for properties of a class (not component) -->
-  <!ATTLIST property formula CDATA #IMPLIED>       <!-- only supported for properties of a class (not component) -->
-  <!ATTLIST property index CDATA #IMPLIED>         <!-- include the columns spanned by this property in an index -->
-
-<!-- Declares an association between two entities (Or from a component, component element,
-etc. to an entity). -->
-
-<!ELEMENT many-to-one (meta*,column*)>
-  <!ATTLIST many-to-one name CDATA #REQUIRED>
-  <!ATTLIST many-to-one access CDATA #IMPLIED>
-  <!ATTLIST many-to-one class CDATA #IMPLIED>
-  <!ATTLIST many-to-one column CDATA #IMPLIED>
-  <!ATTLIST many-to-one not-null (true|false) "false">
-  <!ATTLIST many-to-one unique (true|false) "false">
-  <!ATTLIST many-to-one cascade (none|all|save-update|delete) #IMPLIED>    <!-- default: none -->
-  <!ATTLIST many-to-one outer-join (true|false|auto) "auto">
-  <!ATTLIST many-to-one update (true|false) "true">   <!-- only supported for many-to-one of a class (not component) -->
-  <!ATTLIST many-to-one insert (true|false) "true">   <!-- only supported for many-to-one of a class (not component) -->
-  <!ATTLIST many-to-one foreign-key CDATA #IMPLIED>
-  <!ATTLIST many-to-one property-ref CDATA #IMPLIED>
-  <!ATTLIST many-to-one index CDATA #IMPLIED>         <!-- include the columns spanned by this association in an index -->
-    
-<!-- Declares a one-to-one association between two entities (Or from a component, 
-component element, etc. to an entity). -->
-
-<!ELEMENT one-to-one (meta*)>
-  <!ATTLIST one-to-one name CDATA #REQUIRED>
-  <!ATTLIST one-to-one access CDATA #IMPLIED>
-  <!ATTLIST one-to-one class CDATA #IMPLIED>
-  <!ATTLIST one-to-one cascade (none|all|save-update|delete) #IMPLIED>     <!-- default: none -->
-  <!ATTLIST one-to-one outer-join (true|false|auto) "auto">
-  <!ATTLIST one-to-one constrained (true|false) "false">
-  <!ATTLIST one-to-one foreign-key CDATA #IMPLIED>
-  <!ATTLIST one-to-one property-ref CDATA #IMPLIED>
-
-<!-- A property embedded in a composite identifier or map index (always not-null). -->
-
-<!ELEMENT key-property (meta*,column*)>
-  <!ATTLIST key-property name CDATA #REQUIRED>
-  <!ATTLIST key-property access CDATA #IMPLIED>
-  <!ATTLIST key-property type CDATA #IMPLIED>
-  <!ATTLIST key-property column CDATA #IMPLIED>
-  <!ATTLIST key-property length CDATA #IMPLIED>
-
-<!-- A many-to-one association embedded in a composite identifier or map index 
-(always not-null, never cascade). -->
-
-<!ELEMENT key-many-to-one (meta*,column*)>
-  <!ATTLIST key-many-to-one name CDATA #REQUIRED>
-  <!ATTLIST key-many-to-one access CDATA #IMPLIED>
-  <!ATTLIST key-many-to-one class CDATA #IMPLIED>
-  <!ATTLIST key-many-to-one column CDATA #IMPLIED>
-  <!ATTLIST key-many-to-one foreign-key CDATA #IMPLIED>
-
-<!-- An "any" association is a polymorphic association to any table with
-the given identifier type. The first listed column is a VARCHAR column 
-holding the name of the class (for that row). -->
-
-<!ELEMENT any (meta*,meta-value*,column,column+)>
-  <!ATTLIST any id-type CDATA #REQUIRED>
-  <!ATTLIST any meta-type CDATA #IMPLIED>       <!--- default: Hibernate.CLASS -->
-  <!ATTLIST any name CDATA #REQUIRED>
-  <!ATTLIST any access CDATA #IMPLIED>
-  <!ATTLIST any insert (true|false) "true">			<!-- only supported for many-to-one of a class (not component) -->
-  <!ATTLIST any update (true|false) "true">			<!-- only supported for many-to-one of a class (not component) -->
-  <!ATTLIST any cascade (none|save-update|all) "none">
-  <!ATTLIST any index CDATA #IMPLIED>          <!-- include the columns spanned by this association in an index -->
-
-<!ELEMENT meta-value EMPTY>
-  <!ATTLIST meta-value value CDATA #REQUIRED>
-  <!ATTLIST meta-value class CDATA #REQUIRED>
-
-<!-- A component is a user-defined class, persisted along with its containing entity
-to the table of the entity class. JavaBeans style properties of the component are
-mapped to columns of the table of the containing entity. A null component reference
-is mapped to null values in all columns and vice versa. Components do not support
-shared reference semantics. -->
-
-<!ELEMENT component (
-  meta*,
-  parent?,
-  (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
-)>
-  <!ATTLIST component class CDATA #IMPLIED>
-  <!ATTLIST component name CDATA #REQUIRED>
-  <!ATTLIST component access CDATA #IMPLIED>
-  <!ATTLIST component update (true|false) "true">
-  <!ATTLIST component insert (true|false) "true">
-
-<!ELEMENT dynamic-component (
-  (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
-)>
-  <!ATTLIST dynamic-component name CDATA #REQUIRED>
-  <!ATTLIST dynamic-component access CDATA #IMPLIED>
-  <!ATTLIST dynamic-component update (true|false) "true">
-  <!ATTLIST dynamic-component insert (true|false) "true">
-
-<!-- The parent element maps a property of the component class as a pointer back to
-the owning entity. -->
-
-<!ELEMENT parent EMPTY>
-  <!ATTLIST parent name CDATA #REQUIRED>
-
-<!-- Collection declarations nested inside a class declaration indicate a foreign key 
-relationship from the collection table to the enclosing class. -->
-
-<!ELEMENT map (
-	meta*,
-	(cache|jcs-cache)?,
-	key, 
-	(index|composite-index|index-many-to-many|index-many-to-any), 
-	(element|one-to-many|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST map name CDATA #REQUIRED>
-  <!ATTLIST map access CDATA #IMPLIED>
-  <!ATTLIST map table CDATA #IMPLIED>                              <!-- default: name -->
-  <!ATTLIST map schema CDATA #IMPLIED>                             <!-- default: none -->
-  <!ATTLIST map lazy (true|false) "false">
-  <!ATTLIST map inverse (true|false) "false">
-  <!ATTLIST map sort CDATA "unsorted">                             <!-- unsorted|natural|"comparator class", default: unsorted -->
-  <!ATTLIST map cascade (none|all|save-update|delete|all-delete-orphan|delete-orphan) #IMPLIED>    <!-- default: none -->
-  <!ATTLIST map order-by CDATA #IMPLIED>                           <!-- default: none -->
-  <!ATTLIST map where CDATA #IMPLIED>                              <!-- default: none -->
-  <!ATTLIST map batch-size CDATA "1">
-  <!ATTLIST map outer-join (true|false|auto) "auto">
-  <!ATTLIST map check CDATA #IMPLIED>                              <!-- default: none -->  
-  <!ATTLIST map persister CDATA #IMPLIED>                            
-  
-<!ELEMENT set (
-	meta*,
-	(cache|jcs-cache)?,
-	key, 
-	(element|one-to-many|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST set name CDATA #REQUIRED>
-  <!ATTLIST set access CDATA #IMPLIED>
-  <!ATTLIST set table CDATA #IMPLIED>                              <!-- default: name -->
-  <!ATTLIST set schema CDATA #IMPLIED>                             <!-- default: none -->
-  <!ATTLIST set lazy (true|false) "false">
-  <!ATTLIST set sort CDATA "unsorted">                             <!-- unsorted|natural|"comparator class" -->
-  <!ATTLIST set inverse (true|false) "false">
-  <!ATTLIST set cascade (none|all|save-update|delete|all-delete-orphan|delete-orphan) #IMPLIED>    <!-- default: none -->
-  <!ATTLIST set order-by CDATA #IMPLIED>                           <!-- default: none -->
-  <!ATTLIST set where CDATA #IMPLIED>                              <!-- default: none -->
-  <!ATTLIST set batch-size CDATA "1">
-  <!ATTLIST set outer-join (true|false|auto) "auto">
-  <!ATTLIST set persister CDATA #IMPLIED>                            
-  <!ATTLIST set check CDATA #IMPLIED>                              <!-- default: none -->
-
-<!ELEMENT bag (
-	meta*,
-	(cache|jcs-cache)?,
-	key, 
-	(element|one-to-many|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST bag name CDATA #REQUIRED>
-  <!ATTLIST bag access CDATA #IMPLIED>
-  <!ATTLIST bag table CDATA #IMPLIED>                              <!-- default: name -->
-  <!ATTLIST bag schema CDATA #IMPLIED>                             <!-- default: none -->
-  <!ATTLIST bag lazy (true|false) "false">
-  <!ATTLIST bag inverse (true|false) "false">
-  <!ATTLIST bag cascade (none|all|save-update|delete|all-delete-orphan|delete-orphan) #IMPLIED>    <!-- default: none -->
-  <!ATTLIST bag order-by CDATA #IMPLIED>                           <!-- default: none -->
-  <!ATTLIST bag where CDATA #IMPLIED>                              <!-- default: none -->
-  <!ATTLIST bag batch-size CDATA "1">
-  <!ATTLIST bag outer-join (true|false|auto) "auto">
-  <!ATTLIST bag persister CDATA #IMPLIED>                              
-  <!ATTLIST bag check CDATA #IMPLIED>                              <!-- default: none -->
-
-<!ELEMENT idbag (
-	meta*,
-	(cache|jcs-cache)?,
-	collection-id,
-	key, 
-	(element|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST idbag name CDATA #REQUIRED>
-  <!ATTLIST idbag access CDATA #IMPLIED>
-  <!ATTLIST idbag table CDATA #IMPLIED>                              <!-- default: name -->
-  <!ATTLIST idbag schema CDATA #IMPLIED>                             <!-- default: none -->
-  <!ATTLIST idbag lazy (true|false) "false">
-  <!ATTLIST idbag cascade (none|all|save-update|delete|all-delete-orphan|delete-orphan) #IMPLIED>    <!-- default: none -->
-  <!ATTLIST idbag order-by CDATA #IMPLIED>                           <!-- default: none -->
-  <!ATTLIST idbag where CDATA #IMPLIED>                              <!-- default: none -->
-  <!ATTLIST idbag batch-size CDATA "1">
-  <!ATTLIST idbag outer-join (true|false|auto) "auto">
-  <!ATTLIST idbag persister CDATA #IMPLIED>                              
-  <!ATTLIST idbag check CDATA #IMPLIED>                              <!-- default: none -->
-
-<!ELEMENT list (
-	meta*,
-	(cache|jcs-cache)?,
-	key, 
-	index, 
-	(element|one-to-many|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST list name CDATA #REQUIRED>
-  <!ATTLIST list access CDATA #IMPLIED>
-  <!ATTLIST list table CDATA #IMPLIED>                             <!-- default: name -->
-  <!ATTLIST list schema CDATA #IMPLIED>                            <!-- default: none -->
-  <!ATTLIST list lazy (true|false) "false">
-  <!ATTLIST list inverse (true|false) "false">
-  <!ATTLIST list cascade (none|all|save-update|delete|all-delete-orphan|delete-orphan) #IMPLIED>   <!-- default: none -->
-  <!ATTLIST list where CDATA #IMPLIED>                             <!-- default: none -->
-  <!ATTLIST list batch-size CDATA "1">
-  <!ATTLIST list outer-join (true|false|auto) "auto">
-  <!ATTLIST list persister CDATA #IMPLIED>                                
-  <!ATTLIST list check CDATA #IMPLIED>                             <!-- default: none -->
-
-<!ELEMENT array (
-	meta*,
-	(cache|jcs-cache)?,
-	key, 
-	index, 
-	(element|one-to-many|many-to-many|composite-element|many-to-any)
-)>
-  <!ATTLIST array name CDATA #REQUIRED>
-  <!ATTLIST array access CDATA #IMPLIED>
-  <!ATTLIST array table CDATA #IMPLIED>                            <!-- default: name -->
-  <!ATTLIST array schema CDATA #IMPLIED>                           <!-- default: none -->
-  <!ATTLIST array inverse (true|false) "false">
-  <!ATTLIST array element-class CDATA #IMPLIED>
-  <!ATTLIST array cascade (none|all|save-update|delete) #IMPLIED>  <!-- default: none -->
-  <!ATTLIST array where CDATA #IMPLIED>                            <!-- default: none -->
-  <!ATTLIST array batch-size CDATA "1">
-  <!ATTLIST array outer-join (true|false|auto) "auto">
-  <!ATTLIST array persister CDATA #IMPLIED>                              
-  <!ATTLIST array check CDATA #IMPLIED>                            <!-- default: none -->
-
-<!ELEMENT primitive-array (meta*, (cache|jcs-cache)?, key, index, element)>
-  <!ATTLIST primitive-array name CDATA #REQUIRED>
-  <!ATTLIST primitive-array access CDATA #IMPLIED>
-  <!ATTLIST primitive-array table CDATA #IMPLIED>                  <!-- default: name -->
-  <!ATTLIST primitive-array schema CDATA #IMPLIED>                 <!-- default: none -->
-  <!ATTLIST primitive-array where CDATA #IMPLIED>                  <!-- default: none -->
-  <!ATTLIST primitive-array batch-size CDATA "1">
-  <!ATTLIST primitive-array outer-join (true|false|auto) "auto">
-  <!ATTLIST primitive-array persister CDATA #IMPLIED>                                
-  <!ATTLIST primitive-array check CDATA #IMPLIED>                  <!-- default: none -->
-
-<!-- Declares the element type of a collection of basic type -->
-
-<!ELEMENT element (column*)>
-  <!ATTLIST element column CDATA #IMPLIED>
-  <!ATTLIST element type CDATA #REQUIRED>
-  <!ATTLIST element length CDATA #IMPLIED>
-  <!ATTLIST element not-null (true|false) "false">
-  <!ATTLIST element unique (true|false) "false">
-
-<!-- One to many association. This tag declares the entity-class
-element type of a collection and specifies a one-to-many relational model -->
-
-<!ELEMENT one-to-many EMPTY>
-  <!ATTLIST one-to-many class CDATA #REQUIRED>
-  <!-- No column declaration attributes required in this case. The primary
-  key column of the associated class is already mapped elsewhere.-->
-
-<!-- Many to many association. This tag declares the entity-class
-element type of a collection and specifies a many-to-many relational model -->
-
-<!ELEMENT many-to-many (meta*,column*)>
-  <!ATTLIST many-to-many class CDATA #REQUIRED>
-  <!ATTLIST many-to-many column CDATA #IMPLIED>
-  <!ATTLIST many-to-many outer-join (true|false|auto) "auto">
-  <!ATTLIST many-to-many foreign-key CDATA #IMPLIED>
-  <!-- unique makes no sense here since it would make the association one-to-many -->
-
-<!-- A composite element allows a collection to hold instances of an arbitrary 
-class, without the requirement of joining to an entity table. Composite elements
-have component semantics - no shared references and ad hoc null value semantics. 
-Composite elements may not hold nested collections. -->
-
-<!ELEMENT composite-element ( 
-  (meta*),
-  parent?,
-  (property|many-to-one|any|nested-composite-element)* 
-)>
-  <!ATTLIST composite-element class CDATA #REQUIRED>
-
-<!ELEMENT nested-composite-element ( 
-  (meta*),
-  parent?,
-  (property|many-to-one|any|nested-composite-element)* 
-)>
-  <!ATTLIST nested-composite-element class CDATA #REQUIRED>
-  <!ATTLIST nested-composite-element name CDATA #REQUIRED>
-  <!ATTLIST nested-composite-element access CDATA #IMPLIED>
-  
-<!-- Declares the column name of a foreign key. -->
-
-<!ELEMENT key (column*)>
-  <!ATTLIST key column CDATA #IMPLIED>
-  <!ATTLIST key foreign-key CDATA #IMPLIED>
-  
-<!-- Declares the type and column mapping for a collection index (array or
-list index, or key of a map). -->
-
-<!ELEMENT index (column*)>
-  <!ATTLIST index column CDATA #IMPLIED>
-  <!ATTLIST index type CDATA #IMPLIED>      <!-- required for maps -->
-  <!ATTLIST index length CDATA #IMPLIED>
-
-<!-- Many to many association mapped to the key of a map. ie. a map keyed
-on entities. -->
-
-<!ELEMENT index-many-to-many (column*)>
-  <!ATTLIST index-many-to-many class CDATA #REQUIRED>
-  <!ATTLIST index-many-to-many column CDATA #IMPLIED>
-  <!ATTLIST index-many-to-many foreign-key CDATA #IMPLIED>
-
-<!-- Composite index of a map ie. a map keyed on components. -->
-
-<!ELEMENT composite-index ( (key-property|key-many-to-one)+ )>
-  <!ATTLIST composite-index class CDATA #REQUIRED>
-
-<!-- A "many to any" defines a polymorphic association to any table 
-with the given identifier type. The first listed column is a VARCHAR column 
-holding the name of the class (for that row). -->
-
-<!ELEMENT many-to-any (meta-value*,column, column+)>
-  <!ATTLIST many-to-any id-type CDATA #REQUIRED>
-  <!ATTLIST many-to-any meta-type CDATA #IMPLIED>       <!--- default: Hibernate.CLASS -->
-
-<!ELEMENT index-many-to-any (column, column+)>
-  <!ATTLIST index-many-to-any id-type CDATA #REQUIRED>
-  <!ATTLIST index-many-to-any meta-type CDATA #IMPLIED>       <!--- default: Hibernate.CLASS -->
-
-<!ELEMENT collection-id (meta*, column*, generator)>
-  <!ATTLIST collection-id column CDATA #REQUIRED>
-  <!ATTLIST collection-id type CDATA #REQUIRED>
-  <!ATTLIST collection-id length CDATA #IMPLIED>
-  
-<!-- Generators generate unique identifiers. The class attribute specifies a Java 
-class implementing an id generation algorithm. -->
-
-<!ELEMENT generator (param*)>
-  <!ATTLIST generator class CDATA #REQUIRED>
-<!ELEMENT param (#PCDATA)>
-  <!ATTLIST param name CDATA #REQUIRED>
-
-<!-- The column element is an alternative to column attributes and required for 
-mapping associations to classes with composite ids. -->
-
-<!ELEMENT column EMPTY>
-  <!ATTLIST column name CDATA #REQUIRED>
-  <!ATTLIST column length CDATA #IMPLIED>              <!-- default: 255 -->
-  <!ATTLIST column not-null (true|false) #IMPLIED>     <!-- default: false (except for id properties) -->
-  <!ATTLIST column unique (true|false) #IMPLIED>       <!-- default: false (except for id properties) -->
-  <!ATTLIST column unique-key CDATA #IMPLIED>          <!-- default: no unique key -->
-  <!ATTLIST column sql-type CDATA #IMPLIED>            <!-- override default column type for hibernate type -->
-  <!ATTLIST column index CDATA #IMPLIED>
-  <!ATTLIST column check CDATA #IMPLIED>               <!-- default: none -->
-
-<!-- The cache or jcs-cache element enables caching of an entity class. -->
-<!ELEMENT cache EMPTY>
-  <!ATTLIST cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>        
-<!ELEMENT jcs-cache EMPTY>
-  <!ATTLIST jcs-cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>      <!-- deprecated -->  
-
-<!-- The query element declares a named Hibernate query string -->
-
-<!ELEMENT query (#PCDATA)>
-  <!ATTLIST query name CDATA #REQUIRED>
-
-<!-- The sql-query element declares a named SQL query string -->
-
-<!ELEMENT return EMPTY>
-  <!ATTLIST return alias CDATA #REQUIRED>
-  <!ATTLIST return class CDATA #REQUIRED>
-
-<!ELEMENT synchronize EMPTY>
-  <!ATTLIST synchronize table CDATA #REQUIRED>
-
-<!ELEMENT sql-query (#PCDATA|return|synchronize)*>
-  <!ATTLIST sql-query name CDATA #REQUIRED>
-
-  
-<!-- The meta element is used to assign meta-level attributes to a class or property.
- Is currently used by codegenerator as a placeholder for values that is not directly
- related to OR mappings. -->
-
-<!ELEMENT meta (#PCDATA)>
-  <!ATTLIST meta attribute CDATA #REQUIRED>
-  <!ATTLIST meta inherit (true|false) "true">
- 
diff --git a/groovy/modules/grails/test/persistence/hibernate.cfg.xml b/groovy/modules/grails/test/persistence/hibernate.cfg.xml
deleted file mode 100644
index 920d1f6..0000000
--- a/groovy/modules/grails/test/persistence/hibernate.cfg.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
-<hibernate-configuration>
-
-	<!-- a SessionFactory instance listed as /jndi/name -->
-	<session-factory>
-		<!-- mapping files -->
-		<mapping resource="org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.hbm.xml"/>
-	</session-factory>
-
-</hibernate-configuration>
diff --git a/groovy/modules/grails/test/persistence/log4j.properties b/groovy/modules/grails/test/persistence/log4j.properties
deleted file mode 100644
index 0619c5c..0000000
--- a/groovy/modules/grails/test/persistence/log4j.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-log4j.rootLogger=trace, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/DefaultGrailsDomainClassTest.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/DefaultGrailsDomainClassTest.java
deleted file mode 100644
index f805828..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/DefaultGrailsDomainClassTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.domain;
-
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.codehaus.groovy.grails.exceptions.InvalidPropertyException;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-
-/**
- * @author Graeme Rocher
- * @since 06-Jul-2005
- */
-public class DefaultGrailsDomainClassTest extends TestCase {
-	GroovyClassLoader cl = new GroovyClassLoader();
-	private Class relClass;
-	private Class manyToManyClass;
-	private Class oneToManyClass;
-	private Class oneToOneClass;
-	
-	
-
-	
-	protected void setUp() throws Exception {
-		Thread.currentThread().setContextClassLoader(cl);
-		
-		relClass = cl.loadClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" );
-		
-		Class[] loadedClasses = cl.getLoadedClasses();
-		
-		for (int i = 0; i < loadedClasses.length; i++) {
-			if(loadedClasses[i].getName().equals("org.codehaus.groovy.grails.domain.ManyToManyTest") ) {
-				manyToManyClass = loadedClasses[i];
-			}
-			else if(loadedClasses[i].getName().equals("org.codehaus.groovy.grails.domain.OneToManyTest2") ) {
-				oneToManyClass = loadedClasses[i];
-			}
-			else if(loadedClasses[i].getName().equals("org.codehaus.groovy.grails.domain.OneToOneTest") ) {
-				oneToOneClass = loadedClasses[i];
-			}			
-		}
-		
-		super.setUp();
-	}
-
-	public void testDefaultGrailsDomainClass()
-		throws Exception {
-	
-		Class clazz = cl.parseClass("class UserTest { @Property int id; @Property int version; @Property List transients = [ \"age\" ]; @Property List optionals  = [ \"lastName\" ]; @Property String firstName; @Property String lastName; @Property java.util.Date age; }");
-				
-		
-		GrailsDomainClass domainClass = new DefaultGrailsDomainClass(clazz);
-				
-		assertEquals("UserTest",domainClass.getName());
-		
-		assertNotNull(domainClass.getIdentifier());
-		assertNotNull(domainClass.getVersion());
-		assertTrue(domainClass.getIdentifier().isIdentity());
-		
-		try {
-			domainClass.getPropertyByName("rubbish");
-			fail("should throw exception");
-		}
-		catch(InvalidPropertyException ipe) {
-			// expected
-		}
-		
-		GrailsDomainClassProperty age = domainClass.getPropertyByName( "age" );
-		assertNotNull(age);
-		assertFalse(age.isPersistant());
-		
-		GrailsDomainClassProperty lastName = domainClass.getPropertyByName( "lastName" );
-		assertNotNull(lastName);
-		assertTrue(lastName.isOptional());
-		
-		GrailsDomainClassProperty firstName = domainClass.getPropertyByName( "firstName" );
-		assertNotNull(firstName);
-		assertFalse(firstName.isOptional());
-		assertTrue(firstName.isPersistant());
-		
-
-		GrailsDomainClassProperty[] persistantProperties = domainClass.getPersistantProperties();
-		for(int i = 0; i < persistantProperties.length;i++) {
-			assertTrue(persistantProperties[i].isPersistant());
-		}
-	}
-
-	public void testOneToManyRelationships()
-		throws Exception {		
-						
-										
-		GrailsApplication grailsApplication = new DefaultGrailsApplication(new Class[]{ relClass,oneToManyClass,oneToOneClass,manyToManyClass },cl);
-		
-		GrailsDomainClass c1dc = grailsApplication.getGrailsDomainClass(relClass.getName());
-		GrailsDomainClass c2dc = grailsApplication.getGrailsDomainClass(oneToManyClass.getName());
-		
-		// test relationship property
-		assertEquals( c1dc.getPropertyByName("ones").getOtherSide(), c2dc.getPropertyByName("other") );
-		assertTrue( c1dc.getPropertyByName( "ones" ).isOneToMany() );
-		assertTrue( c1dc.getPropertyByName( "ones" ).isPersistant() );
-		assertFalse( c1dc.getPropertyByName( "ones" ).isManyToMany() );
-		assertFalse( c1dc.getPropertyByName( "ones" ).isManyToOne() );
-		assertFalse( c1dc.getPropertyByName( "ones" ).isOneToOne() );		
-		
-		assertEquals( c2dc.getPropertyByName("other").getOtherSide(), c1dc.getPropertyByName("ones") );
-		assertTrue( c2dc.getPropertyByName( "other" ).isPersistant() );
-		assertTrue( c2dc.getPropertyByName( "other" ).isManyToOne() );	
-		assertFalse( c2dc.getPropertyByName( "other" ).isManyToMany() );
-		assertFalse( c2dc.getPropertyByName( "other" ).isOneToOne() );
-		assertFalse( c2dc.getPropertyByName( "other" ).isOneToMany() );				
-	}
-	
-	public void testManyToManyRelationships()
-		throws Exception {
-		
-
-		
-		GrailsDomainClass c1dc = new DefaultGrailsDomainClass(relClass);
-		GrailsDomainClass c2dc = new DefaultGrailsDomainClass(manyToManyClass);
-		
-		// test relationships
-		assertTrue( c1dc.getPropertyByName( "manys" ).isPersistant() );
-		assertTrue( c1dc.getPropertyByName( "manys" ).isManyToMany() );		
-		assertFalse( c1dc.getPropertyByName( "manys" ).isOneToMany() );
-		assertFalse( c1dc.getPropertyByName( "manys" ).isManyToOne() );
-		assertFalse( c1dc.getPropertyByName( "manys" ).isOneToOne() );			
-		
-		assertTrue( c2dc.getPropertyByName( "manys" ).isPersistant() );
-		assertTrue( c2dc.getPropertyByName( "manys" ).isManyToMany() );
-		assertFalse( c2dc.getPropertyByName( "manys" ).isManyToOne() );
-		assertFalse( c2dc.getPropertyByName( "manys" ).isOneToOne() );
-		assertFalse( c2dc.getPropertyByName( "manys" ).isOneToMany() );		
-	}
-	
-	public void testOneToOneRelationships() 
-		throws Exception {
-		GrailsDomainClass c1dc = new DefaultGrailsDomainClass(relClass);
-		GrailsDomainClass c2dc = new DefaultGrailsDomainClass(oneToOneClass);		
-		
-		// test relationships
-		assertTrue( c1dc.getPropertyByName( "one" ).isPersistant() );		
-		assertTrue( c1dc.getPropertyByName( "one" ).isOneToOne() );	
-		assertFalse( c1dc.getPropertyByName( "one" ).isManyToMany() );
-		assertFalse( c1dc.getPropertyByName( "one" ).isManyToOne() );
-		assertFalse( c1dc.getPropertyByName( "one" ).isOneToMany() );
-		
-		assertTrue( c2dc.getPropertyByName( "other" ).isPersistant() );		
-		assertTrue( c2dc.getPropertyByName( "other" ).isOneToOne() );
-		assertFalse( c2dc.getPropertyByName( "other" ).isManyToMany() );
-		assertFalse( c2dc.getPropertyByName( "other" ).isManyToOne() );
-		assertFalse( c2dc.getPropertyByName( "other" ).isOneToMany() );		
-	}
-
-}
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/ManyToManyTest.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/ManyToManyTest.groovy
deleted file mode 100644
index 95f3335..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/ManyToManyTest.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class ManyToManyTest {
-//   @Property Map relationships = [ "manys" : RelationshipsTest.class ];
-   @Property Long id;
-   @Property Long version;
-   //@Property Set manys; 
-   // many-to-many relationship 
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToManyTest2.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToManyTest2.groovy
deleted file mode 100644
index 873ebe7..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToManyTest2.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class OneToManyTest2 {
-
-   @Property int id;
-   @Property int version;
-   @Property RelationshipsTest other; // many-to-one relationship
-
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToOneTest.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToOneTest.groovy
deleted file mode 100644
index 3203403..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/OneToOneTest.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class OneToOneTest {
-	
-   @Property Long id;
-   @Property Long version;
-   
-   @Property RelationshipsTest other
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/RelationshipsTest.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/RelationshipsTest.groovy
deleted file mode 100644
index 7ff5118..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/RelationshipsTest.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class RelationshipsTest {
-  @Property relationships = [ 	"ones" : OneToManyTest2.class,
-  								"manys" : ManyToManyTest.class,
-  								"uniones" : UniOneToManyTest.class ];
-
-  @Property optionals = [ "ones","uniones" ]
-   
-   @Property Long id;
-   @Property Long version;
-
-   @Property Set manys; // many-to-many relationship
-   @Property OneToOneTest one; // uni-directional one-to-one
-   @Property Set ones; // bi-directional one-to-many relationship    
-   @Property Set uniones; // uni-directional one-to-many relationship       
-}
-
-
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test1.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test1.groovy
deleted file mode 100644
index c2cf09f..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test1.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class Test1 { 
-	@Property Long id; 
-	@Property Long version; 
-	//@Property List transient = [ "age" ]; 
-	//@Property List optional  = [ "lastName" ]; 
-	@Property String firstName; 
-	//@Property String lastName; 
-	//@Property java.util.Date age;
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test2.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test2.groovy
deleted file mode 100644
index 62e51ff..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/Test2.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class Test2 { 
-	@Property Long id; 
-	@Property Long version; 
-	@Property String firstName; 
-	@Property String lastName; 
-	@Property java.util.Date age;
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/UniOneToManyTest.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/UniOneToManyTest.groovy
deleted file mode 100644
index dc2c051..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/domain/UniOneToManyTest.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.codehaus.groovy.grails.domain;
-
-class UniOneToManyTest {
-
-   @Property int id;
-   @Property int version;
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateConfigurationTests.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateConfigurationTests.java
deleted file mode 100644
index c6d4ea3..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/GrailsHibernateConfigurationTests.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.orm.hibernate;
-
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-
-import java.sql.SQLException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration;
-import org.hibernate.HibernateException;
-import org.hibernate.Session;
-import org.hibernate.SessionFactory;
-import org.springframework.orm.hibernate3.HibernateCallback;
-import org.springframework.orm.hibernate3.HibernateTemplate;
-import org.springframework.orm.hibernate3.SessionFactoryUtils;
-import org.springframework.orm.hibernate3.SessionHolder;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-import org.springframework.transaction.support.TransactionSynchronizationManager;
-
-/**
- * @author Graeme Rocher
- * @since 08-Jul-2005
- */
-public class GrailsHibernateConfigurationTests extends AbstractDependencyInjectionSpringContextTests  {
-	GroovyClassLoader cl = new GroovyClassLoader();
-	
-	
-	protected GrailsApplication grailsApplication = null;
-	protected SessionFactory sessionFactory = null;
-	
-
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/orm/hibernate/grails-hibernate-configuration-tests.xml" };
-	}
-	
-	
-	protected void onSetUp() throws Exception {
-		Thread.currentThread().setContextClassLoader(cl);
-		
-		cl.loadClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" );
-		cl.loadClass( "org.codehaus.groovy.grails.domain.Test1" );
-		cl.loadClass( "org.codehaus.groovy.grails.domain.Test2" );
-		
-		Class[] loadedClasses = cl.getLoadedClasses();
-		grailsApplication = new DefaultGrailsApplication(loadedClasses,cl);
-		
-
-		DefaultGrailsDomainConfiguration config = new DefaultGrailsDomainConfiguration();
-		config.setGrailsApplication(this.grailsApplication);
-		Properties props = new Properties();
-		props.put("hibernate.connection.username","sa");
-		props.put("hibernate.connection.password","");
-		props.put("hibernate.connection.url","jdbc:hsqldb:mem:grailsDB");
-		props.put("hibernate.connection.driver_class","org.hsqldb.jdbcDriver");
-		props.put("hibernate.dialect","org.hibernate.dialect.HSQLDialect");
-		props.put("hibernate.hbm2ddl.auto","create-drop");
-		
-		//props.put("hibernate.hbm2ddl.auto","update");		
-		config.setProperties(props);
-		//originalClassLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(this.cl);		
-		this.sessionFactory = config.buildSessionFactory();
-		
-		
-			
-		if(!TransactionSynchronizationManager.hasResource(this.sessionFactory)) {
-			Session hibSession = this.sessionFactory.openSession();
-		    TransactionSynchronizationManager.bindResource(this.sessionFactory, new SessionHolder(hibSession));
-		}		
-		
-	}	
-
-
-	/* (non-Javadoc)
-	 * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#onTearDown()
-	 */
-	protected void onTearDown() throws Exception {
-		if(TransactionSynchronizationManager.hasResource(this.sessionFactory)) {
-		    SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(this.sessionFactory);
-		    Session s = holder.getSession(); 
-		    s.flush();
-		    TransactionSynchronizationManager.unbindResource(this.sessionFactory);
-		    SessionFactoryUtils.releaseSession(s, this.sessionFactory);				
-		}
-	}
-
-
-	public void testGrailsDomain() throws Exception {
-		GrailsDomainClass[] domainClasses = grailsApplication.getGrailsDomainClasses();
-		assertEquals(7,domainClasses.length);
-	}
-	
-	public void testHibernateSave() throws Exception {		
-		assertNotNull(this.sessionFactory);
-		
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		GroovyObject obj = (GroovyObject)grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.domain.Test1").newInstance();
-		assertNotNull(obj);
-		
-		obj.setProperty("firstName", "Joe");
-		obj.setProperty("id",new Long(1));
-		//obj.setProperty("lastName", "Bloggs");
-		template.save( obj );
-	}
-	
-	public void testHibernateLoad() throws Exception {
-		
-		
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		
-		GroovyObject obj = (GroovyObject)grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.domain.Test1").newInstance();
-		assertNotNull(obj);
-		
-		obj.setProperty("firstName", "Joe");
-		obj.setProperty("id",new Long(1));
-		//obj.setProperty("lastName", "Bloggs");
-		template.save( obj );
-		
-		obj = (GroovyObject)template.execute(new HibernateCallback() {
-
-			public Object doInHibernate(Session session) throws HibernateException, SQLException {
-				// create query based on cid and list results
-				List results = session.createQuery("from org.codehaus.groovy.grails.domain.Test1 where id = '1'").list();
-				// if there are results return otherwise return null
-				if(results.size() > 0) {
-					return results.get(0);
-				}
-				return null;
-			}
-			
-		});
-
-		
-		assertNotNull(obj);
-		assertEquals("Joe",obj.getProperty("firstName"));
-	}
-	
-	
-	public void testHibernateOneToOne() {
-
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		GroovyObject parent = (GroovyObject)grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" ).newInstance();
-		GroovyObject child = (GroovyObject)grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.OneToOneTest" ).newInstance();
-		
-		assertNotNull(child);
-		
-		parent.setProperty("one", child);
-		
-		template.save(parent);		
-		// TODO Test loading the relationship back from hibernate
-	}
-	
-	public void testHibernateUniOneToMany() {
-		GrailsDomainClass one2ManyDomain = grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" );
-		GroovyObject one2many = (GroovyObject)one2ManyDomain.newInstance();
-
-		
-		GroovyObject child = (GroovyObject)grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.UniOneToManyTest" ).newInstance();
-		
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		
-		
-		assertNotNull(child);
-									
-		// create one-to-many relationship
-		Set set = new HashSet();		
-		one2many.setProperty("uniones", set);		
-		((Set)one2many.getProperty("uniones")).add( child );
-		
-		// persist
-		template.save(one2many);
-		template.evict(one2many);
-		
-		one2many = null;
-		// now get it back and check it works as expected
-		one2many = (GroovyObject) template.get(one2ManyDomain.getClazz(),new Long(1));
-		assertNotNull(one2many);
-		
-		set = (Set)one2many.getProperty("uniones");
-		assertNotNull(set);
-		assertEquals(1, set.size());
-		
-	}
-	
-	public void testHibernateOneToMany() {
-		GrailsDomainClass one2ManyDomain = grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" );
-		GroovyObject one2many = (GroovyObject)one2ManyDomain.newInstance();
-
-		
-		GroovyObject child = (GroovyObject)grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.OneToManyTest2" ).newInstance();
-		
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		
-		
-		assertNotNull(child);
-		template.save(one2many);
-		
-		// create one-to-many relationship
-		child.setProperty("other",one2many);
-		
-		// persist
-		template.save(child);
-		
-		template.evict(one2many);		
-		one2many = null;
-		// now get it back and check it works as expected
-		one2many = (GroovyObject) template.get(one2ManyDomain.getClazz(),new Long(1));
-		assertNotNull(one2many);
-		
-		Set set = (Set)one2many.getProperty("ones");
-		assertNotNull(set);
-		assertEquals(1, set.size());
-		
-	}
-	
-	public void testHibernateManyToOne() {
-		GrailsDomainClass one2ManyDomain = grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.RelationshipsTest" );
-		GroovyObject one2many = (GroovyObject)one2ManyDomain.newInstance();
-
-		
-		GroovyObject many2one = (GroovyObject)grailsApplication.getGrailsDomainClass( "org.codehaus.groovy.grails.domain.OneToManyTest2" ).newInstance();
-		
-		HibernateTemplate template = new HibernateTemplate(this.sessionFactory);
-		
-		assertNotNull(many2one);
-		Set set = new HashSet();
-		one2many.setProperty("ones", set);
-		//template.save(one2many);
-									
-		// create many-to-one relationship
-				
-		many2one.setProperty("other", one2many);
-		
-		template.save(many2one);
-		
-		// now get it back and check it works as expected
-		template.refresh(one2many);
-		//one2many = (GroovyObject) template.get(one2ManyDomain.getClazz(),new Long(1));
-		assertNotNull(one2many);
-		
-		set = (Set)one2many.getProperty("ones");
-		assertNotNull(set);
-		assertEquals(1, set.size());
-	}
-
-}
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateCriteriaBuilderTests.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateCriteriaBuilderTests.java
deleted file mode 100644
index 81cf5ae..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateCriteriaBuilderTests.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import groovy.util.Proxy;
-
-import org.apache.commons.lang.ArrayUtils;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.hibernate.SessionFactory;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-public class HibernateCriteriaBuilderTests extends
-		AbstractDependencyInjectionSpringContextTests {
-	
-	protected GrailsApplication grailsApplication = null;
-    protected SessionFactory sessionFactory = null;
-
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/orm/hibernate/grails-persistent-method-tests.xml" };
-	}
-
-
-	public void setGrailsApplication(GrailsApplication grailsApplication) {
-		this.grailsApplication = grailsApplication;
-	}
-
-	
-	public void setSessionFactory(SessionFactory sessionFactory) {
-		this.sessionFactory = sessionFactory;
-	}
-
-
-	private Proxy parse(String groovy,String testClassName) throws Exception {
-	
-		
-		GroovyClassLoader cl = this.grailsApplication.getClassLoader();
-		Class clazz = 
-		 cl.parseClass( "package test;\n" +
-		 				"import grails.orm.*;\n" +
-		 				"import org.hibernate.*;\n" +
-		 				"class "+testClassName+" {\n" +
-		 					"@Property SessionFactory sf;\n" +
-		 					"@Property Class tc;\n" + 
-		 					"@Property Closure test = {\n" +
-		 						"def hcb = new HibernateCriteriaBuilder(tc,sf);\n" +
-		 						"return hcb" + groovy +";\n" +
-		 					"}\n" +
-		 				"}");
-		GroovyObject go = (GroovyObject)clazz.newInstance();
-		go.setProperty("sf", this.sessionFactory);
-		
-		Class tc = this.grailsApplication.getGrailsDomainClasses()[0].getClazz();
-		go.setProperty("tc", tc);
-		
-		Closure closure = (Closure)go.getProperty("test");
-		return (Proxy)closure.call();
-		
-		
-	}
-	
-	public void testHibernateCriteriaBuilder()
-		throws Exception {
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		//obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		obj.setProperty( "age", new Integer(45));
-		
-		obj.invokeMethod("save", null);
-		
-		GroovyObject obj2 = (GroovyObject)domainClass.newInstance();
-		//obj2.setProperty( "id", new Long(2) );
-		obj2.setProperty( "firstName", "wilma" );
-		obj2.setProperty( "lastName", "flintstone" );
-		obj2.setProperty( "age", new Integer(42));
-		obj2.invokeMethod("save", null);	
-		
-		GroovyObject obj3 = (GroovyObject)domainClass.newInstance();
-		//obj3.setProperty( "id", new Long(3) );
-		obj3.setProperty( "firstName", "dino" );
-		obj3.setProperty( "lastName", "dinosaur" );
-		obj3.setProperty( "age", new Integer(12));
-		obj3.invokeMethod("save", null);
-		
-		
-		Proxy p = null;
-		p = parse(	"{ " +
-					"and { " +
-						"eq('firstName','fred');" +
-						"eq('lastName', 'flintstone')" +
-					"}" +
-				"}", "Test1");
-		System.out.println("Criteria output = ");
-		System.out.println(ArrayUtils.toString(p.invokeMethod("toArray",null)));		
-		p = parse(	"{\n" +
-						"and {\n" +
-							"eq(\"firstName\",\"Fred\");\n" +
-							"and {\n" +
-								"eq(\"age\", 42)\n" +
-								"eq(\"lastName\", \"flintstone\")\n" +
-						     "}\n" +
-						"}\n" +
-					"}", "Test2");
-		System.out.println("Criteria output = ");
-		System.out.println(ArrayUtils.toString(p.invokeMethod("toArray",null)));
-		p = parse(	"{\n" +
-						"eq(\"firstName\",\"Fred\")\n" +
-						"order(\"firstName\")\n" +
-						"maxResults(10)\n" +
-					"}", "Test3");
-		System.out.println("Criteria output = ");
-		System.out.println(ArrayUtils.toString(p.invokeMethod("toArray",null)));		
-		
-		// now test out illegal arguments
-		try {
-			// and expression with only one argument
-			p = parse(	"{\n" +
-					"and {\n" +
-						"eq(\"firstName\",\"Fred\");\n" +
-						"and {\n" +
-							"eq(\"age\", 42)\n" +
-					     "}\n" +
-					"}\n" +
-				"}", "Test4");			
-			
-			fail("Should have thrown illegal argument exception");					
-		}
-		catch(InvokerInvocationException iie) {
-			// success!
-			assertEquals( IllegalArgumentException.class, iie.getCause().getClass() );
-		}
-		
-		try {
-			// rubbish argument
-			p = parse(	"{\n" +
-					"and {\n" +
-						"eq(\"firstName\",\"Fred\");\n" +
-						"not {\n" +
-							"eq(\"age\", 42)\n" +
-							"rubbish()\n" +
-					     "}\n" +
-					"}\n" +
-				"}", "Test5");			
-			
-			fail("Should have thrown illegal argument exception");					
-		}
-		catch(InvokerInvocationException iie) {
-			// success!
-			assertEquals( MissingMethodException.class, iie.getCause().getClass() );
-		}		
-	}
-	
-	protected void onSetUp() throws Exception {
-		SpringConfig springConfig = new SpringConfig(grailsApplication);
-		ConfigurableApplicationContext appCtx = (ConfigurableApplicationContext) 
-		new XmlApplicationContextDriver().getApplicationContext(
-				springConfig.getBeanReferences(), super.applicationContext);
-		
-		assertNotNull(appCtx);
-			
-		super.onSetUp();
-	}	
-}
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.hbm.xml b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.hbm.xml
deleted file mode 100644
index fcd599d..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.hbm.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!DOCTYPE hibernate-mapping PUBLIC
-    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
-    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
-<!--<!DOCTYPE hibernate-mapping PUBLIC
-    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
-    "test/persistence/hibernate-mapping-2.0.dtd">
---><hibernate-mapping
->
-    <class
-    	
-        name="org.codehaus.groovy.grails.orm.hibernate.HibernateMappedClass"
-        dynamic-update="false"
-        dynamic-insert="false"
-        select-before-update="false"
-        optimistic-lock="version"
-    >
-
-        <id
-            name="id"
-            column="id"
-            type="int"
-        >
-            <generator class="native">
-              <!--  
-                  To add non XDoclet generator parameters, create a file named 
-                  hibernate-generator-params-Administrator.xml 
-                  containing the additional parameters and place it in your merge dir. 
-              --> 
-            </generator>
-        </id>
-
-        <property
-            name="myProp"
-            type="java.lang.String"
-            update="true"
-            insert="true"
-            access="property"
-            column="my_prop"
-        />
-
-        <!--
-            To add non XDoclet property mappings, create a file named
-                hibernate-properties-Administrator.xml
-            containing the additional properties and place it in your merge dir.
-        -->
-
-    </class>
-
-</hibernate-mapping>
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.java
deleted file mode 100644
index 6d1fd3a..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClass.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate;
-class HibernateMappedClass {
-	
-	private Integer id;
-	private String myProp;
-	
-	public void setId(Integer id) {
-		this.id = id;		
-	}
-	
-	public Integer getId() {
-		return this.id;
-	}
-	
-	public void setMyProp(String myProp) {
-		this.myProp = myProp;
-	}
-	
-	public String getMyProp() {
-		return this.myProp;
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClassTests.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClassTests.java
deleted file mode 100644
index 82f2083..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/HibernateMappedClassTests.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate;
-
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-
-/**
-
- */
-public class HibernateMappedClassTests extends
-		AbstractDependencyInjectionSpringContextTests {
-
-	/* (non-Javadoc)
-	 * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
-	 */
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/orm/hibernate/hibernate-mapped-class-tests.xml" };
-	}
-
-	public void testDynamicMethods() {
-		HibernateMappedClass hmc = new HibernateMappedClass();
-		hmc.setMyProp("somevalue");
-		InvokerHelper.invokeMethod(hmc, "save", new Object[0]);
-		String className = hmc.getClass().getName();
-		hmc = null;
-		
-		hmc = (HibernateMappedClass)InvokerHelper.invokeStaticMethod(className, "get", new Object[] { new Integer(1) });
-		assertEquals("somevalue", hmc.getMyProp());
-	}
-}
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy
deleted file mode 100644
index 72ccb01..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate;
-
-public class PersistentMethodTestClass {
-
-	@Property List optionals = [ "age" ];
-	
-	@Property Long id; 
-	@Property Long version; 
-	
-	@Property String firstName; 
-	@Property String lastName; 
-	@Property Integer age;
-	
-	@Property constraints = {
-		firstName(length:4..15)
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTests.java b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTests.java
deleted file mode 100644
index 6946004..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTests.java
+++ /dev/null
@@ -1,315 +0,0 @@
-package org.codehaus.groovy.grails.orm.hibernate;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException;
-import org.codehaus.groovy.grails.orm.hibernate.metaclass.FindByPersistentMethod;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-public class PersistentMethodTests extends AbstractDependencyInjectionSpringContextTests {
-
-	protected GrailsApplication grailsApplication = null;
-
-
-	/**
-	 * @param grailsApplication The grailsApplication to set.
-	 */
-	public void setGrailsApplication(GrailsApplication grailsApplication) {
-		this.grailsApplication = grailsApplication;
-	}
-
-
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/orm/hibernate/grails-persistent-method-tests.xml" };
-	}
-
-	public void testMethodSignatures() {
-		
-		FindByPersistentMethod findBy = new FindByPersistentMethod( grailsApplication,null,new GroovyClassLoader());
-		assertTrue(findBy.isMethodMatch("findByFirstName"));
-		assertTrue(findBy.isMethodMatch("findByFirstNameAndLastName"));
-		assertFalse(findBy.isMethodMatch("rubbish"));
-	}
-	
-	
-	public void testSavePersistentMethod() {
-		// init spring config
-		
-		
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		
-		obj.invokeMethod("save", null);
-		
-	}
-	
-	public void testValidatePersistentMethod() {
-		// init spring config
-		
-		
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fr" );
-		obj.setProperty( "lastName", "flintstone" );
-		
-		obj.invokeMethod("validate", null);
-		
-		List errors = (List)obj.getProperty("errors");
-		assertNotNull(errors);
-		assertEquals(1, errors.size());
-		
-	}	
-
-	public void testFindByPersistentMethods() {
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		obj.setProperty( "age", new Integer(45));
-		
-		obj.invokeMethod("save", null);
-		
-		GroovyObject obj2 = (GroovyObject)domainClass.newInstance();
-		obj2.setProperty( "id", new Long(2) );
-		obj2.setProperty( "firstName", "wilma" );
-		obj2.setProperty( "lastName", "flintstone" );
-		obj2.setProperty( "age", new Integer(42));
-		obj2.invokeMethod("save", null);	
-		
-		GroovyObject obj3 = (GroovyObject)domainClass.newInstance();
-		obj3.setProperty( "id", new Long(3) );
-		obj3.setProperty( "firstName", "dino" );
-		obj3.setProperty( "lastName", "dinosaur" );
-		obj3.setProperty( "age", new Integer(12));
-		obj3.invokeMethod("save", null);			
-		
-		Object returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAllByFirstName", new Object[] { "fred", new Integer(10) });
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		List returnList = (List)returnValue;
-		assertEquals(1, returnList.size());
-		
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAllByFirstNameAndLastName", new Object[] { "fred", "flintstone" });
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		returnList = (List)returnValue;
-		assertEquals(1, returnList.size());
-		
-		/*returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findByFirstNameOrLastName", new Object[] { "fred", "flintstone" });
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		returnList = (List)returnValue;
-		assertEquals(2, returnList.size());*/			
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByFirstNameNotEqual", new Object[] { "fred" });
-		assertEquals(2, returnList.size());
-		obj = (GroovyObject)returnList.get(0);
-		obj2 = (GroovyObject)returnList.get(1);
-		assertFalse("fred".equals( obj.getProperty("firstName")));
-		assertFalse("fred".equals( obj2.getProperty("firstName")));
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByAgeLessThan", new Object[] { new Integer(20) });
-		assertEquals(1, returnList.size());
-		obj = (GroovyObject)returnList.get(0);
-		assertEquals("dino", obj.getProperty("firstName"));
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByAgeGreaterThan", new Object[] { new Integer(20) });
-		assertEquals(2, returnList.size());
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByAgeGreaterThanAndLastName", new Object[] { new Integer(20), "flintstone" });
-		assertEquals(2, returnList.size());
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByLastNameLike", new Object[] { "flint%" });
-		assertEquals(2, returnList.size());
-		
-		returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByAgeBetween", new Object[] { new Integer(10), new Integer(43) });
-		assertEquals(2, returnList.size());		
-		
-		Map queryMap = new HashMap();
-		queryMap.put("firstName", "wilma");
-		queryMap.put("lastName", "flintstone");
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findWhere", new Object[] { queryMap });
-		assertNotNull(returnValue);
-		// now lets test out some junk and make sure we get errors!
-		try {
-			returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByLastNameLike", new Object[] { new Boolean(false) });
-			fail("Should have thrown an exception for invalid arguments");
-		}
-		catch(MissingMethodException mme) {
-			//great!
-		}
-		// and the wrong number of arguments!
-		try {
-			returnList = (List)obj.getMetaClass().invokeStaticMethod(obj, "findAllByAgeBetween", new Object[] { new Integer(10) });
-			fail("Should have thrown an exception for invalid argument count");
-		}
-		catch(MissingMethodException mme) {
-			//great!
-		}		
-	}
-	
-	public void testGetPersistentMethod() {
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		
-		obj.invokeMethod("save", null);
-		
-		GroovyObject obj2 = (GroovyObject)domainClass.newInstance();
-		obj2.setProperty( "id", new Long(2) );
-		obj2.setProperty( "firstName", "wilma" );
-		obj2.setProperty( "lastName", "flintstone" );
-		
-		obj2.invokeMethod("save", null);	
-		
-		// get wilma by id
-		Object returnValue = obj.getMetaClass().invokeStaticMethod(obj, "get", new Object[] { new Long(2) });
-		assertNotNull(returnValue);
-		assertEquals(returnValue.getClass(),domainClass.getClazz());	
-	}
-	
-	public void testFindAllPersistentMethod() {
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		
-		obj.invokeMethod("save", null);
-		
-		GroovyObject obj2 = (GroovyObject)domainClass.newInstance();
-		obj2.setProperty( "id", new Long(2) );
-		obj2.setProperty( "firstName", "wilma" );
-		obj2.setProperty( "lastName", "flintstone" );
-		
-		obj2.invokeMethod("save", null);	
-		
-		// test find with a query
-		Object returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAll", new Object[] { "from org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass" });
-		assertNotNull(returnValue);
-		assertEquals(ArrayList.class,returnValue.getClass());
-		List listResult = (List)returnValue;
-		assertEquals(2, listResult.size());
-		
-		// test find with query and args
-		List args = new ArrayList();
-		args.add( "wilma" );
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAll", new Object[] { "from org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass as p where p.firstName = ?", args });
-		assertNotNull(returnValue);
-		assertEquals(ArrayList.class,returnValue.getClass());
-		listResult = (List)returnValue;
-		assertEquals(1, listResult.size());	
-		
-		// test find by example
-		GroovyObject example = (GroovyObject)domainClass.newInstance();
-		example.setProperty( "firstName", "fred" );
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAll", new Object[] { example });
-		assertNotNull(returnValue);
-		assertEquals(ArrayList.class,returnValue.getClass());
-		listResult = (List)returnValue;
-		assertEquals(1, listResult.size());	
-		
-		// test invalid query
-		try {
-			returnValue = obj.getMetaClass().invokeStaticMethod(obj, "findAll", new Object[] { "from RubbishClass"});
-			fail("Should have thrown grails query exception");
-		}
-		catch(GrailsQueryException gqe) {
-			//expected
-		}
-	}
-
-	public void testListPersistentMethods() {
-		GrailsDomainClass domainClass = this.grailsApplication.getGrailsDomainClass("org.codehaus.groovy.grails.orm.hibernate.PersistentMethodTestClass");
-		
-		GroovyObject obj = (GroovyObject)domainClass.newInstance();
-		obj.setProperty( "id", new Long(1) );
-		obj.setProperty( "firstName", "fred" );
-		obj.setProperty( "lastName", "flintstone" );
-		
-		obj.invokeMethod("save", null);
-		
-		GroovyObject obj2 = (GroovyObject)domainClass.newInstance();
-		obj2.setProperty( "id", new Long(2) );
-		obj2.setProperty( "firstName", "wilma" );
-		obj2.setProperty( "lastName", "flintstone" );
-		
-		obj2.invokeMethod("save", null);	
-		
-		GroovyObject obj3 = (GroovyObject)domainClass.newInstance();
-		obj3.setProperty( "id", new Long(3) );
-		obj3.setProperty( "firstName", "dino" );
-		obj3.setProperty( "lastName", "dinosaur" );
-		
-		obj3.invokeMethod("save", null);		
-		
-		// test plain list
-		Object returnValue = obj.getMetaClass().invokeStaticMethod(obj,"list", null);
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		List returnList = (List)returnValue;
-		assertEquals(3, returnList.size());
-		// test list with max value
-		Map argsMap = new HashMap();
-		argsMap.put("max",new Integer(1));
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj,"list", new Object[]{ argsMap });
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		returnList = (List)returnValue;
-		assertEquals(1, returnList.size());	
-		
-		// test list with order by
-		returnValue = obj.getMetaClass().invokeStaticMethod(obj,"listOrderByFirstName", new Object[]{});
-		assertNotNull(returnValue);
-		assertTrue(returnValue instanceof List);
-		
-		returnList = (List)returnValue;
-		obj = (GroovyObject)returnList.get(0);
-		obj2 = (GroovyObject)returnList.get(1);
-		
-		assertEquals("dino", obj.getProperty("firstName"));
-		assertEquals("fred", obj2.getProperty("firstName"));
-		
-	}
-	
-	
-	protected void onSetUp() throws Exception {
-		SpringConfig springConfig = new SpringConfig(grailsApplication);
-		ConfigurableApplicationContext appCtx = (ConfigurableApplicationContext)		
-		new XmlApplicationContextDriver().getApplicationContext(
-				springConfig.getBeanReferences(), super.applicationContext);
-		
-		System.out.println("Loaded app context: " + appCtx.getDisplayName()); 
-		super.onSetUp();
-	}
-	
-}
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-hibernate-configuration-tests.xml b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-hibernate-configuration-tests.xml
deleted file mode 100644
index 857ea5f..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-hibernate-configuration-tests.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-	    <property name="driverClassName">
-	        <value>org.hsqldb.jdbcDriver</value>
-	    </property>
-	    <property name="url">
-	        <value>jdbc:hsqldb:mem:grailsDB</value>
-	    </property>
-	    <property name="username">
-	        <value>sa</value>
-	    </property>
-	    <property name="password">
-	        <value></value>
-	    </property>					
-	</bean>
-	
-	
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy</value>
-		</property>
-	</bean>
-	
-	
-	
-	<bean id="sessionFactory" class="org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean">
-		<property name="grailsApplication">
-			<ref bean="grailsApplication" />
-		</property>
-		<property name="configurationClass">
-			<value>org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration</value>
-		</property> 
-		<property name="hibernateProperties">
-			<props>
-				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
-				<prop key="hibernate.hbm2ddl.auto">create-drop</prop>				
-			</props>
-		</property>
-		<property name="dataSource">
-			<ref bean="dataSource" />
-		</property>		
-	</bean>		
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-persistent-method-tests.xml b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-persistent-method-tests.xml
deleted file mode 100644
index 857ea5f..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/grails-persistent-method-tests.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-	    <property name="driverClassName">
-	        <value>org.hsqldb.jdbcDriver</value>
-	    </property>
-	    <property name="url">
-	        <value>jdbc:hsqldb:mem:grailsDB</value>
-	    </property>
-	    <property name="username">
-	        <value>sa</value>
-	    </property>
-	    <property name="password">
-	        <value></value>
-	    </property>					
-	</bean>
-	
-	
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy</value>
-		</property>
-	</bean>
-	
-	
-	
-	<bean id="sessionFactory" class="org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean">
-		<property name="grailsApplication">
-			<ref bean="grailsApplication" />
-		</property>
-		<property name="configurationClass">
-			<value>org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration</value>
-		</property> 
-		<property name="hibernateProperties">
-			<props>
-				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
-				<prop key="hibernate.hbm2ddl.auto">create-drop</prop>				
-			</props>
-		</property>
-		<property name="dataSource">
-			<ref bean="dataSource" />
-		</property>		
-	</bean>		
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/hibernate-mapped-class-tests.xml b/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/hibernate-mapped-class-tests.xml
deleted file mode 100644
index 8965b27..0000000
--- a/groovy/modules/grails/test/persistence/org/codehaus/groovy/grails/orm/hibernate/hibernate-mapped-class-tests.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-	    <property name="driverClassName">
-	        <value>org.hsqldb.jdbcDriver</value>
-	    </property>
-	    <property name="url">
-	        <value>jdbc:hsqldb:mem:grailsDB</value>
-	    </property>
-	    <property name="username">
-	        <value>sa</value>
-	    </property>
-	    <property name="password">
-	        <value></value>
-	    </property>					
-	</bean>
-	
-	
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>org/codehaus/groovy/grails/orm/hibernate/PersistentMethodTestClass.groovy</value>
-		</property>
-	</bean>
-	
-	
-	
-	<bean id="sessionFactory" class="org.codehaus.groovy.grails.orm.hibernate.ConfigurableLocalSessionFactoryBean">
-		<property name="grailsApplication">
-			<ref bean="grailsApplication" />
-		</property>
-		<property name="configLocation">
-			<value>hibernate.cfg.xml</value>
-		</property> 				
-		<property name="configurationClass">
-			<value>org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration</value>
-		</property> 
-		<property name="hibernateProperties">
-			<props>
-				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
-				<prop key="hibernate.hbm2ddl.auto">create-drop</prop>				
-			</props>
-		</property>
-		<property name="dataSource">
-			<ref bean="dataSource" />
-		</property>		
-	</bean>		
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ControllerScaffoldingTests.java b/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ControllerScaffoldingTests.java
deleted file mode 100644
index d56e141..0000000
--- a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ControllerScaffoldingTests.java
+++ /dev/null
@@ -1,322 +0,0 @@
-package org.codehaus.groovy.grails.scaffolding;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.MissingMethodException;
-import groovy.lang.MissingPropertyException;
-import groovy.lang.ProxyMetaClass;
-
-import java.util.Properties;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.metaclass.PropertyAccessProxyMetaClass;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.codehaus.groovy.grails.orm.hibernate.cfg.DefaultGrailsDomainConfiguration;
-import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper;
-import org.hibernate.SessionFactory;
-import org.springframework.beans.MutablePropertyValues;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.ConstructorArgumentValues;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-import org.springframework.web.servlet.ModelAndView;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-public class ControllerScaffoldingTests extends
-AbstractDependencyInjectionSpringContextTests {
-
-	private GenericApplicationContext localContext;
-	private ConfigurableApplicationContext appCtx; 
-	private GrailsApplication grailsApplication;
-	private SessionFactory sessionFactory;
-	private Class domainClass;
-	private Class controllerClass;
-
-	protected void onSetUp() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		Thread.currentThread().setContextClassLoader(cl);
-		
-		
-		Class tmpClass = cl.parseClass( "class ScaffoldController {\n" +
-				"@Property boolean scaffold = true" +
-		"}" );
-		
-		
-		Class tmpClass2 = cl.parseClass( "class Scaffold {\n" +
-		"@Property Long id\n" +
-		"@Property Long version\n" +
-		"@Property String name\n" +
-		"}" );		
-		
-		this.controllerClass = tmpClass;
-		this.domainClass = tmpClass2;
-		
-		//grailsApplication = new DefaultGrailsApplication(,cl);
-		this.localContext = new GenericApplicationContext(super.applicationContext);
-		
-		
-		
-		ConstructorArgumentValues args = new ConstructorArgumentValues();
-		args.addGenericArgumentValue(new Class[]{ controllerClass, domainClass});
-		args.addGenericArgumentValue(cl);
-		MutablePropertyValues propValues = new MutablePropertyValues();
-		
-		BeanDefinition grailsApplicationBean = new RootBeanDefinition(DefaultGrailsApplication.class,args,propValues);
-		
-		localContext.registerBeanDefinition( "grailsApplication", grailsApplicationBean );
-		this.localContext.refresh();
-		
-		/*BeanDefinition applicationEventMulticaster = new RootBeanDefinition(SimpleApplicationEventMulticaster.class);
-		context.registerBeanDefinition( "applicationEventMulticaster ", applicationEventMulticaster);*/
-		
-		this.grailsApplication = (GrailsApplication)localContext.getBean("grailsApplication");
-		DefaultGrailsDomainConfiguration config = new DefaultGrailsDomainConfiguration();
-		config.setGrailsApplication(this.grailsApplication);
-		Properties props = new Properties();
-		props.put("hibernate.connection.username","sa");
-		props.put("hibernate.connection.password","");
-		props.put("hibernate.connection.url","jdbc:hsqldb:mem:grailsDB");
-		props.put("hibernate.connection.driver_class","org.hsqldb.jdbcDriver");
-		props.put("hibernate.dialect","org.hibernate.dialect.HSQLDialect");
-		props.put("hibernate.hbm2ddl.auto","create-drop");
-		config.setProperties(props);
-		//originalClassLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(cl);		
-		this.sessionFactory = config.buildSessionFactory();
-		assertNotNull(this.sessionFactory);
-		
-		
-		
-		SpringConfig springConfig = new SpringConfig(grailsApplication);
-		this.appCtx = (ConfigurableApplicationContext) 
-		new XmlApplicationContextDriver().getApplicationContext(
-				springConfig.getBeanReferences(), this.localContext);
-		
-		assertNotNull(appCtx);
-		
-		GroovyObject domainObject = (GroovyObject)domainClass.newInstance();
-		domainObject.setProperty("name", "fred");
-		domainObject.invokeMethod("save", new Object[0]);
-		
-		GroovyObject domainObject2 = (GroovyObject)domainClass.newInstance();
-		domainObject2.setProperty("name", "wilma");
-		domainObject2.invokeMethod("save", new Object[0]);		
-			
-		super.onSetUp();
-	}	
-	
-	public void testScaffoldList() throws Exception {
-
-		MockHttpServletRequest request = new MockHttpServletRequest();
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		request.setRequestURI("/scaffold/list");
-		
-		GroovyObject go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-		
-		// first test redirection within the same controller		
-		try {
-			Closure closure = (Closure)go.getProperty("list");
-			Object returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			ModelAndView mv = (ModelAndView)returnValue;
-			assertEquals("/scaffold/list",mv.getViewName());
-			assertTrue(mv.getModel().containsKey("scaffoldList"));
-		}
-		catch(MissingMethodException mme) {
-			fail("Missing method exception should not have been thrown!");
-		}	
-		catch(MissingPropertyException mpex) {
-			fail("Missing property exception should not have been thrown!");
-		}	
-	}	
-	
-	public void testScaffoldDelete() throws Exception {
-
-		MockHttpServletRequest request = new MockHttpServletRequest();
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		request.setRequestURI("/scaffold/delete");
-		request.addParameter("id", "1");
-		
-		GroovyObject go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-		
-		// first test redirection within the same controller		
-		try {
-			Closure closure = (Closure)go.getProperty("delete");
-			Object returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			ModelAndView mv = (ModelAndView)returnValue;
-			// should delegate to list 
-			assertEquals("/scaffold/list",mv.getViewName());
-			assertTrue(mv.getModel().containsKey("scaffoldList"));
-			assertNull(mv.getModel().get("scaffold"));
-		}
-		catch(MissingMethodException mme) {
-			fail("Missing method exception should not have been thrown!");
-		}	
-		catch(MissingPropertyException mpex) {
-			fail("Missing property exception should not have been thrown!");
-		}	
-	}		
-	
-	public void testScaffoldSave() throws Exception {
-
-		MockHttpServletRequest request = new MockHttpServletRequest();
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		request.setRequestURI("/scaffold/save");
-		request.addParameter("name", "dino");
-		
-		GroovyObject go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-		
-		// first test redirection within the same controller		
-		try {
-			Closure closure = (Closure)go.getProperty("save");
-			Object returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			ModelAndView mv = (ModelAndView)returnValue;
-			// should end up at the show view
-			assertEquals("/scaffold/show",mv.getViewName());
-			// and contain the appropriate model
-			assertTrue(mv.getModel().containsKey("scaffold"));
-			GroovyObject domainObject = (GroovyObject)mv.getModel().get("scaffold");
-			assertNotNull(domainObject);
-			assertEquals("dino", domainObject.getProperty("name"));
-		}
-		catch(MissingMethodException mme) {
-			fail("Missing method exception should not have been thrown!");
-		}	
-		catch(MissingPropertyException mpex) {
-			fail("Missing property exception should not have been thrown!");
-		}	
-	}	
-	
-	public void testScaffoldUpdate() throws Exception {
-
-		MockHttpServletRequest request = new MockHttpServletRequest();
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		request.setRequestURI("/scaffold/update");
-		request.addParameter("id", "1");
-		request.addParameter("name", "fredjnr");
-		
-		GroovyObject go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-		
-		// first test redirection within the same controller		
-		try {
-			Closure closure = (Closure)go.getProperty("update");
-			Object returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			ModelAndView mv = (ModelAndView)returnValue;
-			// should end up at the show view
-			assertEquals("/scaffold/show",mv.getViewName());
-			// and contain the appropriate model
-			assertTrue(mv.getModel().containsKey("scaffold"));
-			GroovyObject domainObject = (GroovyObject)mv.getModel().get("scaffold");
-			assertNotNull(domainObject);
-			assertEquals("fredjnr", domainObject.getProperty("name"));
-		}
-		catch(MissingMethodException mme) {
-			fail("Missing method exception should not have been thrown!");
-		}	
-		catch(MissingPropertyException mpex) {
-			fail("Missing property exception should not have been thrown!");
-		}	
-	}		
-	
-	public void testScaffoldShow() throws Exception {
-
-		MockHttpServletRequest request = new MockHttpServletRequest();
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		request.setRequestURI("/scaffold/show");
-		request.addParameter("id", "1");
-		
-		GroovyObject go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-		
-		// first test redirection within the same controller		
-		try {
-			Closure closure = (Closure)go.getProperty("show");
-			Object returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			ModelAndView mv = (ModelAndView)returnValue;
-			assertEquals("/scaffold/show",mv.getViewName());
-			assertTrue(mv.getModel().containsKey("scaffold"));
-			
-			//	now try a rubish id
-			request = new MockHttpServletRequest();
-			request.setRequestURI("/scaffold/show");
-			request.addParameter("id", "13423");			
-			go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-			
-			closure = (Closure)go.getProperty("show");
-			returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			mv = (ModelAndView)returnValue;
-			assertEquals("/scaffold/show",mv.getViewName());
-			assertTrue(mv.getModel().containsKey("scaffold"));
-			
-			// now try a different action name that uses the same class
-			// to implement scaffolding
-			request = new MockHttpServletRequest();
-			request.setRequestURI("/scaffold/edit");
-			request.addParameter("id", "1");			
-			go = configureDynamicGO(controllerClass, grailsApplication,request,response);
-			
-			closure = (Closure)go.getProperty("edit");
-			returnValue = closure.call();
-			assertNotNull(returnValue);
-			assertTrue(returnValue instanceof ModelAndView);
-			mv = (ModelAndView)returnValue;
-			assertEquals("/scaffold/edit",mv.getViewName());
-			assertTrue(mv.getModel().containsKey("scaffold"));			
-			
-		}
-		catch(MissingMethodException mme) {
-			fail("Missing method exception should not have been thrown!");
-		}	
-		catch(MissingPropertyException mpex) {
-			fail("Missing property exception should not have been thrown!");
-		}							
-	}		
-	
-	
-
-	private GroovyObject configureDynamicGO(Class groovyClass,GrailsApplication application, HttpServletRequest request, HttpServletResponse response)
-	throws Exception {
-	ProxyMetaClass pmc = PropertyAccessProxyMetaClass.getInstance(groovyClass);
-	// proof of concept to try out proxy meta class
-	
-	BeanDefinition bd = new RootBeanDefinition(groovyClass,false);
-	localContext.registerBeanDefinition( groovyClass.getName(), bd );
-			
-	
-	GrailsControllerHelper helper = new SimpleGrailsControllerHelper(application,this.appCtx, new MockServletContext());
-	GroovyObject go = (GroovyObject)groovyClass.newInstance();
-	pmc.setInterceptor( new ControllerDynamicMethods(go,helper,request,response) );
-	
-	
-	go.setMetaClass( pmc );
-	return go;
-}
-
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/scaffolding/grails-scaffolding-tests.xml" };
-	}	
-	
-	
-}
diff --git a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparatorTests.java b/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparatorTests.java
deleted file mode 100644
index b84218a..0000000
--- a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/DomainClassPropertyComparatorTests.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import groovy.lang.GroovyClassLoader;
-import junit.framework.TestCase;
-import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty;
-import org.apache.commons.lang.ArrayUtils;
-
-import java.util.Arrays;
-
-/**
- * @author Graeme Rocher
- * @since 10-Feb-2006
- */
-public class DomainClassPropertyComparatorTests extends TestCase {
-
-    public void testPropertyComparator() throws Exception {
-        GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-
-        Class dc = gcl.parseClass("class Test { " +
-                                        "\n@Property Long id;" +
-                                        "\n@Property Long version;" +
-                                        "\n@Property String name;" +
-                                        "\n@Property Date age" +
-                                        "\n@Property String zip" +
-                                        "\n@Property String dob" +
-                                        "\n@Property constraints = {" +
-                                        "\n  name(length:5..15)" +
-                                        "\n  age()" +
-                                        "}  }");
-        GrailsDomainClass domainClass = new DefaultGrailsDomainClass(dc);
-
-        DomainClassPropertyComparator comp = new DomainClassPropertyComparator(domainClass);
-
-        GrailsDomainClassProperty[] props =domainClass.getProperties();
-        Arrays.sort(props,comp);
-        System.out.println(ArrayUtils.toString(props));
-        assertEquals("id",props[0].getName());
-        assertEquals("name",props[1].getName());
-        assertEquals("age",props[2].getName());
-        assertEquals("dob",props[3].getName());
-        assertEquals("version",props[4].getName());
-        assertEquals("zip",props[5].getName());
-    }
-}
diff --git a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGeneratorsTests.java b/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGeneratorsTests.java
deleted file mode 100644
index a3ce07b..0000000
--- a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/GrailsTemplateGeneratorsTests.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.scaffolding;
-
-import junit.framework.TestCase;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyShell;
-import org.codehaus.groovy.grails.commons.GrailsDomainClass;
-import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass;
-
-import java.io.File;
-
-/**
- * @author Graeme Rocher
- * @since 09-Feb-2006
- */
-public class GrailsTemplateGeneratorsTests extends TestCase {
-
-    public void testGenerateController() throws Exception {
-        GrailsTemplateGenerator generator;
-
-        GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-
-        generator = (GrailsTemplateGenerator)gcl.parseClass(gcl.getResourceAsStream("org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy"))
-                                                    .newInstance();
-
-
-        Class dc = gcl.parseClass("class Test { \n@Property Long id;\n @Property Long version;  }");
-        GrailsDomainClass domainClass = new DefaultGrailsDomainClass(dc);
-
-        generator.generateController(domainClass,"test");
-
-        File generatedFile = new File("test/TestController.groovy");
-        assertTrue(generatedFile.exists());
-
-        String text = (String)new GroovyShell().evaluate("new File('test/TestController.groovy').text");
-
-        assertTrue(text.indexOf("class TestController") > -1);
-        assertTrue(text.indexOf("@Property list") > -1);
-        assertTrue(text.indexOf("@Property update") > -1);
-        assertTrue(text.indexOf("@Property create") > -1);
-        assertTrue(text.indexOf("@Property show") > -1);
-        assertTrue(text.indexOf("@Property edit") > -1);
-        assertTrue(text.indexOf("@Property delete") > -1);
-    }
-
-    public void testGenerateViews() throws Exception {
-        GrailsTemplateGenerator generator;
-
-        GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
-
-        generator = (GrailsTemplateGenerator)gcl.parseClass(gcl.getResourceAsStream("org/codehaus/groovy/grails/scaffolding/DefaultGrailsTemplateGenerator.groovy"))
-                                                    .newInstance();
-
-
-        Class dc = gcl.parseClass("class Test { " +
-                                        "\n@Property Long id;" +
-                                        "\n@Property Long version;" +
-                                        "\n@Property String name;" +
-                                        "\n@Property TimeZone tz;" +
-                                        "\n@Property Locale locale;" +
-                                        "\n@Property Currency currency;" +
-                                        "\n@Property Boolean active;" +
-                                        "\n@Property Date age  }");
-        GrailsDomainClass domainClass = new DefaultGrailsDomainClass(dc);
-
-        generator.generateViews(domainClass,"test");
-
-        File showFile = new File("test/grails-app/views/test/show.gsp");
-        assertTrue(showFile.exists());
-        File listFile = new File("test/grails-app/views/test/list.gsp");
-        assertTrue(listFile.exists());
-        File editFile = new File("test/grails-app/views/test/edit.gsp");
-        assertTrue(editFile.exists());        
-    }
-}
diff --git a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldTemplateTests.java b/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldTemplateTests.java
deleted file mode 100644
index 9a4851a..0000000
--- a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/ScaffoldTemplateTests.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package org.codehaus.groovy.grails.scaffolding;
-
-import groovy.text.SimpleTemplateEngine;
-import groovy.text.Template;
-import groovy.lang.IntRange;
-import junit.framework.TestCase;
-import org.codehaus.groovy.grails.validation.ConstrainedProperty;
-import org.dom4j.Document;
-import org.dom4j.DocumentHelper;
-
-import java.io.File;
-import java.util.*;
-
-public class ScaffoldTemplateTests  extends TestCase {
-
-    public void testStringTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.lang.String.template"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testName");
-        binding.put("value", "testValue");
-        binding.put("constraints", null);
-
-        Document xml = DocumentHelper.parseText(template.make(binding).toString());
-
-
-        assertEquals("textarea",xml.getRootElement().getName());
-        assertEquals("testName",xml.getRootElement().attributeValue("name"));
-        assertEquals("testValue",xml.getRootElement().getText());
-
-        // test with a length restriction hence becoming an input field
-        ConstrainedProperty cp = new ConstrainedProperty(Object.class,"testName",String.class);
-        cp.setMaxLength(50);
-        cp.setEditable(false);
-        // test with a custom attribute
-        Map attributes = new HashMap() ;
-        attributes.put("class", "MyClass");
-        cp.setAttributes(attributes );
-        binding.put("constraints",cp);
-
-        System.out.println(template.make(binding).toString());
-        xml = DocumentHelper.parseText(template.make(binding).toString());
-
-        assertEquals("input",xml.getRootElement().getName());
-        assertEquals("text",xml.getRootElement().attributeValue("type"));
-        assertEquals("50",xml.getRootElement().attributeValue("maxlength"));
-        assertEquals("testName",xml.getRootElement().attributeValue("name"));
-        assertEquals("testValue",xml.getRootElement().attributeValue("value"));
-        assertEquals("MyClass",xml.getRootElement().attributeValue("class"));
-        assertEquals("readonly",xml.getRootElement().attributeValue("readonly"));
-    }
-
-    public void testBooleanTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.lang.Boolean.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testBoolean");
-        binding.put("value", new Boolean(true));
-        binding.put("constraints", null);
-
-        Document xml = DocumentHelper.parseText(template.make(binding).toString());
-
-        assertEquals("input",xml.getRootElement().getName());
-        assertEquals("checkbox",xml.getRootElement().attributeValue("type"));
-        assertEquals("testBoolean",xml.getRootElement().attributeValue("name"));
-        assertEquals("true",xml.getRootElement().attributeValue("value"));
-        assertEquals("checked",xml.getRootElement().attributeValue("checked"));
-
-        binding.put("value", new Boolean(false));
-        xml = DocumentHelper.parseText(template.make(binding).toString());
-
-        assertEquals("input",xml.getRootElement().getName());
-        assertEquals("checkbox",xml.getRootElement().attributeValue("type"));
-        assertEquals("testBoolean",xml.getRootElement().attributeValue("name"));
-        assertEquals("false",xml.getRootElement().attributeValue("value"));
-        assertEquals(null,xml.getRootElement().attributeValue("checked"));
-    }
-
-    public void testDateTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.util.Date.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testDate");
-        binding.put("year", new Integer(2006));
-        binding.put("month", new Integer(2));
-        binding.put("day", new Integer(5));
-        binding.put("hour", "12");
-        binding.put("minute", "45");
-        binding.put("constraints", null);
-
-
-        Document xml = DocumentHelper.parseText(template.make(binding).toString());
-    }
-
-    public void testLocaleTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.util.Locale.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testLocale");
-        binding.put("value", Locale.getDefault());
-        binding.put("constraints", null);
-
-        System.out.println(template.make(binding).toString());
-        Document xml = DocumentHelper.parseText(template.make(binding).toString());
-    }
-
-    public void testTimeZoneTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.util.TimeZone.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testTimeZone");
-        binding.put("value", TimeZone.getDefault());
-        binding.put("constraints", null);
-
-        System.out.println(template.make(binding).toString());
-    }
-
-    public void testCurrencyTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.util.Currency.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testCurrency");
-        binding.put("value", Currency.getInstance(Locale.getDefault()));
-        binding.put("constraints", null);
-
-        System.out.println(template.make(binding).toString());
-    }
-
-    public void testNumberTemplate() throws Exception {
-        SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
-
-        Template template = templateEngine.createTemplate(new File("src/grails/templates/grails-app/views/scaffolding/java.lang.Number.gsp"));
-        Map binding = new HashMap();
-
-        binding.put("name", "testNumber");
-        binding.put("value", new Integer(50));
-        binding.put("constraints", null);
-        System.out.println(template.make(binding).toString());
-        Document xml = DocumentHelper.parseText(template.make(binding).toString());
-        assertEquals("input",xml.getRootElement().getName());
-        ConstrainedProperty cp = new ConstrainedProperty(Object.class, "testNumber", Integer.class);
-        cp.setRange(new IntRange(25,125));
-        binding.put("constraints", cp);
-        
-        xml = DocumentHelper.parseText(template.make(binding).toString());
-        assertEquals("select",xml.getRootElement().getName());
-        System.out.println(template.make(binding).toString());
-    }
-}
diff --git a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/grails-scaffolding-tests.xml b/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/grails-scaffolding-tests.xml
deleted file mode 100644
index 8ce03ac..0000000
--- a/groovy/modules/grails/test/scaffolding/org/codehaus/groovy/grails/scaffolding/grails-scaffolding-tests.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans>
-	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-	    <property name="driverClassName">
-	        <value>org.hsqldb.jdbcDriver</value>
-	    </property>
-	    <property name="url">
-	        <value>jdbc:hsqldb:mem:grailsDB</value>
-	    </property>
-	    <property name="username">
-	        <value>sa</value>
-	    </property>
-	    <property name="password">
-	        <value></value>
-	    </property>					
-	</bean>
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinderTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinderTests.java
deleted file mode 100644
index 34284b6..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/binding/GrailsDataBinderTests.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.binding;
-
-import junit.framework.TestCase;
-import org.springframework.mock.web.MockHttpServletRequest;
-
-import java.util.Date;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
-/**
- * @author Graeme Rocher
- * @since 05-Jan-2006
- */
-public class GrailsDataBinderTests extends TestCase {
-
-    class TestBean {
-        private Date myDate;
-
-        public Date getMyDate() {
-            return myDate;
-        }
-
-        public void setMyDate(Date myDate) {
-            this.myDate = myDate;
-        }
-    }
-    public void testBindStructuredDate() throws Exception {
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        request.addParameter("myDate","struct");
-        request.addParameter("myDate_year","2006");
-        request.addParameter("myDate_month","1");
-        request.addParameter("myDate_day","31");
-        request.addParameter("myDate_hour","16");
-        request.addParameter("myDate_minute","45");
-
-        TestBean testBean = new TestBean();
-        GrailsDataBinder binder = new GrailsDataBinder(testBean,"testBean");
-        binder.bind(request);
-
-        assertNotNull(testBean.getMyDate());
-        System.out.println(testBean.getMyDate());
-        Calendar c = new GregorianCalendar();
-        c.setTime(testBean.getMyDate());
-
-        assertEquals(2006,c.get(Calendar.YEAR));
-        assertEquals(0,c.get(Calendar.MONTH));
-        assertEquals(31,c.get(Calendar.DAY_OF_MONTH));
-        assertEquals(16,c.get(Calendar.HOUR_OF_DAY));
-        assertEquals(45,c.get(Calendar.MINUTE));
-
-    }
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/metaclass/ControllerMetaClassTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/metaclass/ControllerMetaClassTests.java
deleted file mode 100644
index d03aeaf..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/metaclass/ControllerMetaClassTests.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.codehaus.groovy.grails.web.metaclass;
-
-import groovy.lang.*;
-import junit.framework.TestCase;
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.metaclass.PropertyAccessProxyMetaClass;
-import org.codehaus.groovy.grails.web.servlet.mvc.GrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper;
-import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.mock.web.MockServletContext;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
-
-public class ControllerMetaClassTests extends TestCase {
-
-
-    private GenericApplicationContext context;
-
-    public void testMetaClassProxy()
-        throws Exception {
-
-        GroovyClassLoader gcl = new GroovyClassLoader();
-
-        Class groovyClass = gcl.parseClass( "class TestClass {\n" +
-                        "def testMethod() {\n" +
-                        "}\n" +
-                        "}" );
-
-        ProxyMetaClass pmc = ProxyMetaClass.getInstance(groovyClass);
-        // proof of concept to try out proxy meta class
-        pmc.setInterceptor( new TracingInterceptor() {
-            public boolean doInvoke() {
-                return false;
-            }
-        });
-
-        GroovyObject go = (GroovyObject)groovyClass.newInstance();
-
-        go.setMetaClass( pmc );
-        try {
-            // invoke real method
-            go.invokeMethod("testMethod", new Object[]{});
-            // invoke fake method
-            go.invokeMethod("fakeMethod", new Object[]{});
-        }
-        catch(MissingMethodException mme) {
-            fail("Missing method exception should not have been thrown!");
-        }
-    }
-
-    public void testParamsDynamicProperty() throws Exception {
-
-         GroovyClassLoader gcl = new GroovyClassLoader();
-         MockHttpServletRequest request = new MockHttpServletRequest();
-         MockHttpServletResponse response = new MockHttpServletResponse();
-
-         request.addParameter("testParam", "testValue");
-
-         Class groovyClass = gcl.parseClass( "class TestController {\n" +
-                         "@Property list = {\n" +
-                         "}\n" +
-                         "}" );
-
-
-         GrailsApplication application = new DefaultGrailsApplication(new Class[] { groovyClass },gcl);
-         registerBeanDefinition(groovyClass,application, request,response);
-         GrailsControllerHelper helper1 = new SimpleGrailsControllerHelper(application,context,new MockServletContext());
-         try {
-             helper1.handleURI("/test/list",request,response);
-             GroovyObject go = (GroovyObject)request.getAttribute(GrailsApplicationAttributes.CONTROLLER);
-             Object params = go.getProperty( "params" );
-
-             assertNotNull(params);
-             assertTrue(params instanceof Map);
-
-             Map paramsMap = (Map)params;
-             assertTrue(paramsMap.containsKey("testParam"));
-             assertEquals("testValue",paramsMap.get("testParam"));
-         }
-         catch(MissingMethodException mme) {
-             fail("Missing method exception should not have been thrown!");
-         }
-         catch(MissingPropertyException mpex) {
-             fail("Missing property exception should not have been thrown!");
-         }
-     }
-
-    public void testRedirectDynamicMethod() throws Exception {
-
-        GroovyClassLoader gcl = new GroovyClassLoader();
-        MockHttpServletRequest request = new MockHttpServletRequest();
-        MockHttpServletResponse response = new MockHttpServletResponse();
-
-
-        request.addParameter("testParam", "testValue");
-
-        Class groovyClass = gcl.parseClass( "class TestController {\n" +
-                        "@Property next = {\n" +
-                            "return ['success':this.params['testParam2']]" +
-                        "}\n" +
-                        "@Property list = {\n" +
-                            "redirect(action:next,params:['testParam2':'testValue2'])\n" +
-                        "}\n" +
-                        "}" );
-        Class secondController = gcl.parseClass( "class SecondController {\n" +
-                "@Property list = {\n" +
-                    "return redirect(action:'test/list',params:['testParam2':'testValue2'])\n" +
-                "}\n" +
-                "}" );
-
-        GrailsApplication application = new DefaultGrailsApplication(new Class[] { groovyClass,secondController },gcl);
-        registerBeanDefinition(groovyClass, application,request,response);
-        registerBeanDefinition(secondController, application,request,response);
-
-        GrailsControllerHelper helper1 = new SimpleGrailsControllerHelper(application,context,new MockServletContext());
-        GrailsControllerHelper helper2 = new SimpleGrailsControllerHelper(application,context,new MockServletContext());
-
-        // first test redirection within the same controller
-        try {
-            helper1.handleURI("/test/list",request,response);
-        }
-        catch(MissingMethodException mme) {
-            fail("Missing method exception should not have been thrown!");
-        }
-        catch(MissingPropertyException mpex) {
-            fail("Missing property exception should not have been thrown!");
-        }
-        // now redirection to another controller
-        try {
-            request = new MockHttpServletRequest();
-            response = new MockHttpServletResponse();
-            helper2.handleURI("/second/list",request,response);
-        }
-        catch(MissingMethodException mme) {
-            fail("Missing method exception should not have been thrown!");
-        }
-        catch(MissingPropertyException mpex) {
-            fail("Missing property exception should not have been thrown!");
-        }
-    }
-
-    /*public void testChainDynamicMethod() throws Exception {
-
-         GroovyClassLoader gcl = new GroovyClassLoader();
-         MockHttpServletRequest request = new MockHttpServletRequest();
-         MockHttpServletResponse response = new MockHttpServletResponse();
-		
-         request.addParameter("testParam", "testValue");
-		
-         Class groovyClass = gcl.parseClass( "class TestController {\n" +
-                         "@Property next = {\n" +
-                             "chain(action:this.next2,model:['mymodel2':'myvalue2'],params:['testParam2':this.params['testParam2']])\n" +
-                         "}\n" +
-                         "@Property next2 = {\n" +
-                             "return ['success':this.params['testParam2']]" +
-                         "}\n" +
-                         "@Property list = {\n" +
-                             "chain(action:this.next,model:['mymodel':'myvalue'],params:['testParam2':'testValue2'])\n" +
-                         "}\n" +
-                         "}" );
-         Class secondController = gcl.parseClass( "class SecondController {\n" +
-                 "@Property list = {\n" +
-                     "return chain(action:'test/list',model:['mymodel':'myvalue'],params:['testParam2':'testValue2'])\n" +
-                 "}\n" +
-                 "}" );
-		
-         GrailsApplication application = new DefaultGrailsApplication(new Class[] { groovyClass,secondController },gcl);
-         GroovyObject go = registerBeanDefinition(groovyClass, application,request,response);
-         GroovyObject go2 = registerBeanDefinition(secondController, application,request,response);
-		
-         // first test redirection within the same controller
-         try {
-             Closure closure = (Closure)go.getProperty("list");
-             Object returnValue = closure.call();
-             assertNotNull(returnValue);
-             assertTrue(returnValue instanceof ModelAndView);
-             Map model = ((ModelAndView)returnValue).getModel();
-			
-             assertEquals("myvalue", model.get("mymodel"));
-             assertEquals("myvalue2", model.get("mymodel2"));
-             assertEquals("testValue2", model.get("success"));
-         }
-         catch(MissingMethodException mme) {
-             fail("Missing method exception should not have been thrown!");
-         }
-         catch(MissingPropertyException mpex) {
-             fail("Missing property exception should not have been thrown!");
-         }
-         // now redirection to another controller
-         try {
-             Closure closure = (Closure)go2.getProperty("list");
-             Object returnValue = closure.call();
-             assertNotNull(returnValue);
-             assertTrue(returnValue instanceof ModelAndView);
-             Map model = ((ModelAndView)returnValue).getModel();
-			
-             assertEquals("myvalue", model.get("mymodel"));
-             assertEquals("testValue2", model.get("success"));
-         }
-         catch(MissingMethodException mme) {
-             fail("Missing method exception should not have been thrown!");
-         }
-         catch(MissingPropertyException mpex) {
-             fail("Missing property exception should not have been thrown!");
-         }
-     } */
-
-    private void registerBeanDefinition(Class groovyClass,GrailsApplication application, HttpServletRequest request, HttpServletResponse response)
-        throws Exception {
-        ProxyMetaClass pmc = PropertyAccessProxyMetaClass.getInstance(groovyClass);
-        // proof of concept to try out proxy meta class
-        if(context == null)
-            this.context = new GenericApplicationContext();
-
-        BeanDefinition bd = new RootBeanDefinition(groovyClass,false);
-        context.registerBeanDefinition( groovyClass.getName(), bd );
-    }
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.groovy
deleted file mode 100644
index 409fa49..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-import grails.pageflow.*;
-
-class TestPageFlow {
-    @Property Flow flow = new PageFlowBuilder().flow {
-        firstStage(view:"someView")
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.java
deleted file mode 100644
index 9e54a2c..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/PageFlowTests.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.pageflow;
-
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
-import org.springframework.webflow.mvc.FlowController;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 9, 2005
- */
-public class PageFlowTests extends AbstractDependencyInjectionSpringContextTests {
-
-	protected FlowController testPageFlowController = null;
-	protected GrailsApplication grailsApplication = null;
-	
-	public PageFlowTests() {
-		super();
-		setPopulateProtectedVariables(true);
-	}
-
-
-	protected String[] getConfigLocations() {
-		return new String[] { "org/codehaus/groovy/grails/web/pageflow/page-flow-tests.xml" };
-	}
-	
-	public void testFlowControllerFirstStage() throws Exception {
-		SpringConfig springConfig = new SpringConfig(grailsApplication);
-		springConfig.getBeanReferences();
-	}
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/page-flow-tests.xml b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/page-flow-tests.xml
deleted file mode 100644
index db283f8..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/pageflow/page-flow-tests.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans default-autowire="byType">
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>file:test/web/org/codehaus/groovy/grails/web/pageflow/*.groovy</value>
-		</property>
-	</bean>
-	<bean id="TestPageFlowClass" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-		<property name="targetObject">
-			<ref bean="grailsApplication"/>
-		</property>
-		<property name="targetMethod">
-			<value>getPageFlow</value>
-		</property>
-		<property name="arguments">
-			<value>TestPageFlow</value>
-		</property>
-	</bean>
-	<bean id="TestPageFlow" factory-bean="TestPageFlowClass" factory-method="newInstance"/>
-	<bean id="testPageFlowController" class="org.springframework.webflow.mvc.FlowController">
-		<property name="flow">
-			<bean class="org.springframework.webflow.config.FlowFactoryBean">
-				<property name="flowBuilder">
-					<bean class="org.codehaus.groovy.grails.web.pageflow.GrailsFlowBuilder">
-						<property name="pageFlowClass">
-							<ref bean="TestPageFlowClass"/>
-						</property>
-					</bean>
-				</property>
-			</bean>
-		</property>
-	</bean>
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScopeTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScopeTests.java
deleted file mode 100644
index 2469388..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/GrailsFlashScopeTests.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet;
-
-import junit.framework.TestCase;
-
-/**
- * @author Graeme Rocher
- * @since 07-Feb-2006
- */
-public class GrailsFlashScopeTests extends TestCase {
-
-    public void testNextState() {
-        FlashScope fs = new GrailsFlashScope();
-        fs.put("test","value");
-        fs.put("fred","flintstone");
-
-        assertFalse(fs.isEmpty());
-        assertEquals("flintstone",fs.get("fred"));
-        assertEquals(2, fs.size());
-        assertTrue(fs.containsKey("test"));
-        assertTrue(fs.containsValue("value"));
-        assertFalse(fs.containsKey("wilma"));
-
-        // the state immediately following this one the map should still contain the previous
-        // entries
-        fs.next();
-
-        assertFalse(fs.isEmpty());
-        assertEquals("flintstone",fs.get("fred"));
-        assertEquals(2, fs.size());
-        assertTrue(fs.containsKey("test"));
-        assertTrue(fs.containsValue("value"));
-        assertFalse(fs.containsKey("wilma"));
-
-        // the next state it should be empty
-        fs.next();
-
-        assertTrue(fs.isEmpty());
-        assertEquals(0,fs.size());
-
-    }
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/ReturnModelAndViewController.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/ReturnModelAndViewController.groovy
deleted file mode 100644
index de9bae8..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/ReturnModelAndViewController.groovy
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.codehaus.groovy.grails.web.servlet.mvc
-
-import org.springframework.web.servlet.ModelAndView;
-
-class ReturnModelAndViewController {
-	@Property Closure withView = {
-		return new ModelAndView("someView");
-	}
-	
-	@Property Closure withoutView = {
-		return new ModelAndView();
-	}
-	
-	@Property String viewConfiguredView = "someOtherView";
-	@Property Closure viewConfigured = {
-		return new ModelAndView();
-	}
-	
-	@Property String defaultClosure = "withView";
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerTests.java
deleted file mode 100644
index cf0db6c..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerTests.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2004-2005 the original author or authors.
- * 
- * 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.codehaus.groovy.grails.web.servlet.mvc;
-
-import groovy.lang.GroovyClassLoader;
-
-import java.util.Iterator;
-import java.util.Properties;
-
-import junit.framework.TestCase;
-
-import org.codehaus.groovy.grails.commons.DefaultGrailsApplication;
-import org.codehaus.groovy.grails.commons.GrailsApplication;
-import org.codehaus.groovy.grails.commons.spring.SpringConfig;
-import org.springframework.beans.MutablePropertyValues;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.ConstructorArgumentValues;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.support.GenericApplicationContext;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-import org.springframework.web.servlet.ModelAndView;
-import org.springmodules.beans.factory.drivers.xml.XmlApplicationContextDriver;
-
-/**
- * 
- * 
- * @author Steven Devijver
- * @since Jul 2, 2005
- */
-public class SimpleGrailsControllerTests extends TestCase {
-
-	public SimpleGrailsControllerTests() {
-		super();
-	}
-
-	protected GrailsApplication grailsApplication = null;
-	protected SimpleGrailsController controller = null;
-	private GenericApplicationContext localContext;
-	private ConfigurableApplicationContext appCtx;
-	
-	
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		GroovyClassLoader cl = new GroovyClassLoader();
-		
-		Class c1 = cl.parseClass("class TestController {\n"+
-							"@Property Closure test = {\n"+
-								"return [ \"test\" : \"123\" ]\n"+
-						     "}\n" +
-						"}");	
-		
-		Class c2 = cl.parseClass("class SimpleController {\n"+
-				"@Property Closure test = {\n"+
-			     "}\n" +
-			"}");
-		
-		Class c3 = cl.parseClass("class NoViewController {\n"+
-				"@Property Closure test = {\n"+
-			      "request, response ->\n" +
-			      "new grails.util.OpenRicoBuilder(response).ajax { element(id:\"test\") { } };\n" +
-			      "return null;\n" +				
-			     "}\n" +
-			"}");		
-		
-//		this.grailsApplication = new DefaultGrailsApplication(new Class[]{c1,c2,c3},cl);
-//		this.controller = new SimpleGrailsController();
-//		this.controller.setGrailsApplication(grailsApplication);
-		
-		Thread.currentThread().setContextClassLoader(cl);
-		
-		//grailsApplication = new DefaultGrailsApplication(,cl);
-		this.localContext = new GenericApplicationContext();
-		
-		ConstructorArgumentValues args = new ConstructorArgumentValues();
-		args.addGenericArgumentValue(new Class[]{c1,c2,c3});
-		args.addGenericArgumentValue(cl);
-		MutablePropertyValues propValues = new MutablePropertyValues();
-		
-		BeanDefinition grailsApplicationBean = new RootBeanDefinition(DefaultGrailsApplication.class,args,propValues);		
-		localContext.registerBeanDefinition( "grailsApplication", grailsApplicationBean );
-		this.localContext.refresh();
-		
-		this.grailsApplication = (GrailsApplication)localContext.getBean("grailsApplication");
-		
-		/*BeanDefinition applicationEventMulticaster = new RootBeanDefinition(SimpleApplicationEventMulticaster.class);
-		context.registerBeanDefinition( "applicationEventMulticaster ", applicationEventMulticaster);*/
-		SpringConfig springConfig = new SpringConfig(grailsApplication);
-		this.appCtx = (ConfigurableApplicationContext) 
-		new XmlApplicationContextDriver().getApplicationContext(
-				springConfig.getBeanReferences(), this.localContext);
-		
-		this.controller = (SimpleGrailsController)appCtx.getBean("simpleGrailsController");
-		
-		
-		assertNotNull(appCtx);		
-		super.setUp();
-	}
-
-
-	private ModelAndView execute(String uri, Properties parameters) throws Exception {
-		MockHttpServletRequest request = new MockHttpServletRequest("GET", uri);
-		request.setContextPath("/simple");
-		
-		if (parameters != null) {
-			for (Iterator iter = parameters.keySet().iterator(); iter.hasNext();) {
-				String paramName = (String)iter.next();
-				String paramValue = parameters.getProperty(paramName);
-				request.addParameter(paramName, paramValue);
-			}
-		}
-		MockHttpServletResponse response = new MockHttpServletResponse();
-		return controller.handleRequest(request, response);
-	}
-	
-	
-	public void testSimpleControllerSuccess() throws Exception {
-		ModelAndView modelAndView = execute("/test", null);
-		assertNotNull(modelAndView);
-	}
-		
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller1.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller1.groovy
deleted file mode 100644
index 18a9d37..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller1.groovy
+++ /dev/null
@@ -1,7 +0,0 @@
-
-class TestController {
-	@Property Closure test = {
-		return [ "test" : "123" ]
-	}
-}
-
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller2.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller2.groovy
deleted file mode 100644
index 0170064..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller2.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-class SimpleController {
-	@Property Closure test = {
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller4.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller4.groovy
deleted file mode 100644
index 7ad5c80..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller4.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-class ParameterController {
-	@Property String twoParametersView = "someView"
-	@Property Map twoParametersTypedViews = [ "rss" : "someRssView" ]
-	@Property Closure twoParameters = {
-		request, response -> return [ "request" : request, "response" : response ]
-	}
-	@Property String defaultClosure = "twoParameters"
-	
-	@Property String oneParameterView = "someOtherView"
-	@Property Map oneParameterTypedViews = [ "rss" : "someOtherRssView" ]
-	@Property Closure oneParameter = {
-		request -> return [ "request" : request ]
-	}
-}
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller5.groovy b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller5.groovy
deleted file mode 100644
index f68f33d..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/controller5.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-class NoViewController {
-   @Property Closure list = {
-      request, response ->
-
-      new grails.util.OpenRicoBuilder(response).ajax { element(id:"test") { } };
-      return null;
-   }
-}
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/simple-grails-controller-tests.xml b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/simple-grails-controller-tests.xml
deleted file mode 100644
index 4e84708..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/servlet/mvc/simple-grails-controller-tests.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
-
-<beans default-autowire="byType">
-	<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
-		<description>Grails application factory bean</description>
-		<property name="groovyFiles">
-			<value>file:test/web/org/codehaus/groovy/grails/web/servlet/mvc/*.groovy</value>
-		</property>
-	</bean>
-	<bean id="controller" class="org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController">
-		<description>Grails controller to handle simple or plain old controllers</description>
-	</bean>
-	<bean id="controllerClass" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" abstract="true">
-		<property name="targetObject">
-			<ref bean="grailsApplication"/>
-		</property>
-		<property name="targetMethod">
-			<value>getController</value>
-		</property>
-	</bean>
-	<bean id="testControllerClass" parent="controllerClass">
-		<property name="arguments">
-			<value>TestController</value>
-		</property>
-	</bean>
-	<bean id="TestController" factory-bean="testControllerClass" factory-method="newInstance"/>
-	<bean id="simpleControllerClass" parent="controllerClass">
-		<property name="arguments">
-			<value>SimpleController</value>
-		</property>
-	</bean>
-	<bean id="SimpleController" factory-bean="simpleControllerClass" factory-method="newInstance"/>
-	<bean id="returnModelAndViewControllerClass" parent="controllerClass">
-		<property name="arguments">
-			<value>org.codehaus.groovy.grails.web.servlet.mvc.ReturnModelAndViewController</value>
-		</property>
-	</bean>
-	<bean id="org.codehaus.groovy.grails.web.servlet.mvc.ReturnModelAndViewController" 
-		factory-bean="returnModelAndViewControllerClass" factory-method="newInstance"/>
-	<bean id="parameterControllerClass" parent="controllerClass">
-		<property name="arguments">
-			<value>ParameterController</value>
-		</property>
-	</bean>
-	<bean id="ParameterController" factory-bean="parameterControllerClass" factory-method="newInstance"/>
-	<bean id="noViewControllerClass" parent="controllerClass">
-		<property name="arguments">
-			<value>NoViewController</value>
-		</property>
-	</bean>
-	<bean id="NoViewController" factory-bean="noViewControllerClass" factory-method="newInstance"/>
-</beans>
\ No newline at end of file
diff --git a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapperTests.java b/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapperTests.java
deleted file mode 100644
index d0cf129..0000000
--- a/groovy/modules/grails/test/web/org/codehaus/groovy/grails/web/sitemesh/GrailsLayoutDecoratorMapperTests.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.codehaus.groovy.grails.web.sitemesh;
-
-import java.io.StringReader;
-
-import junit.framework.TestCase;
-
-import org.springframework.mock.web.MockHttpServletRequest;
-
-import com.opensymphony.module.sitemesh.Decorator;
-import com.opensymphony.module.sitemesh.Page;
-import com.opensymphony.module.sitemesh.parser.FastPageParser;
-
-public class GrailsLayoutDecoratorMapperTests extends TestCase {
-
-	/*
-	 * Test method for 'org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper.getDecorator(HttpServletRequest, Page)'
-	 */
-	public void testGetDecoratorHttpServletRequestPage() {
-		MockHttpServletRequest request = new MockHttpServletRequest("GET", "orders/list");
-		GrailsLayoutDecoratorMapper m = new GrailsLayoutDecoratorMapper();
-		FastPageParser parser = new FastPageParser();
-		String html = "<html><head><title>Test title</title><meta name=\"layout\" content=\"test\"></meta></head><body>here is the body</body></html>";
-		
-		
-		Page page = parser.parse( new StringReader(html) ); 
-		Decorator d = m.getDecorator(request, page);
-		
-		assertEquals("/WEB-INF/grails-app/views/layouts/test.jsp", d.getPage());
-		assertEquals("test", d.getName());
-		
-	}
-
-}
diff --git a/groovy/modules/grails/tomcat.xml b/groovy/modules/grails/tomcat.xml
deleted file mode 100644
index 2b32464..0000000
--- a/groovy/modules/grails/tomcat.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<project name="My Application" default="compile" basedir=".">
-
-  <!-- Configure the directory into which the web application is built -->
-  <property name="build"    value="PATH_TO_DIR_THAT_CONTAINS_WAR"/>     <!-- OVERRIDE FROM OUTSIDE -->
-
-  <!-- Configure the context path for this application -->
-  <property name="path"     value="/grails-app"/>
-
-  <!-- Configure properties to access the Manager application -->
-  <property name="url"      value="http://localhost:8080/manager"/>
-  <property name="username" value="NO_USER_NAME"/>                      <!-- OVERRIDE FROM OUTSIDE -->
-  <property name="password" value="NO_PASSWORD"/>                       <!-- OVERRIDE FROM OUTSIDE -->
-
-  <!-- Configure the custom Ant tasks for the Manager application -->
-  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>
-  <taskdef name="list"      classname="org.apache.catalina.ant.ListTask"/>
-  <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask"/>
-  <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/>
-  <taskdef name="roles"     classname="org.apache.catalina.ant.RolesTask"/>
-  <taskdef name="start"     classname="org.apache.catalina.ant.StartTask"/>
-  <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask"/>
-  <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"/>
-
-  <target name="deploy" description="Install web application"  >
-    <deploy url="${url}" username="${username}" password="${password}"
-            path="${path}" war="${build}${path}.war"/>
-  </target>
-
-  <target name="reload" description="Reload web application">
-      <reload  url="${url}" username="${username}" password="${password}"
-            path="${path}"/>
-  </target>
-
-  <target name="undeploy" description="Remove web application">
-    <undeploy url="${url}" username="${username}" password="${password}"
-            path="${path}"/>
-  </target>
-
-</project>
\ No newline at end of file
diff --git a/groovy/modules/gram/.classpath b/groovy/modules/gram/.classpath
deleted file mode 100644
index 7ff5d38..0000000
--- a/groovy/modules/gram/.classpath
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main"/>
-	<classpathentry kind="src" path="src/test"/>
-	<classpathentry kind="lib" path="target/gram-1.1-SNAPSHOT.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="/Applications/eclipse webtool/plugins/org.codehaus.groovy.eclipse_0.9.2/lib/asm-2.0.jar"/>
-	<classpathentry kind="lib" path="/Applications/eclipse webtool/plugins/org.codehaus.groovy.eclipse_0.9.2/lib/groovy-1.0-jsr-03.jar"/>
-	<classpathentry kind="lib" path="/Applications/eclipse webtool/plugins/org.codehaus.groovy.eclipse_0.9.2/lib/antlr-2.7.5.jar"/>
-	<classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar"/>
-	<classpathentry kind="var" path="MAVEN_REPO/groovy/jars/groovy-all-1.0-beta-9.jar"/>
-	<classpathentry kind="var" path="MAVEN_REPO/ant/jars/ant-1.6.2.jar"/>
-	<classpathentry kind="var" path="MAVEN_REPO/annogen/jars/annogen-0.1.0.jar"/>
-	<classpathentry kind="output" path="target/test-classes"/>
-</classpath>
diff --git a/groovy/modules/gram/.cvsignore b/groovy/modules/gram/.cvsignore
deleted file mode 100644
index 283df68..0000000
--- a/groovy/modules/gram/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-gram.iml
-target
-.settings
diff --git a/groovy/modules/gram/.project b/groovy/modules/gram/.project
deleted file mode 100644
index 7dbd640..0000000
--- a/groovy/modules/gram/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>gram</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.codehaus.groovy.eclipse.groovyBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.codehaus.groovy.eclipse.groovyNature</nature>
-	</natures>
-</projectDescription>
diff --git a/groovy/modules/gram/project.properties b/groovy/modules/gram/project.properties
deleted file mode 100644
index e7e605b..0000000
--- a/groovy/modules/gram/project.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-maven.compile.source=1.4
-maven.compile.target=1.4
-maven.test.source=1.4
-maven.compile.deprecation=true
-maven.compile.debug=true
-maven.compile.optimize=true
-
-maven.javadoc.links=http://java.sun.com/j2se/1.4.1/docs/api/
-maven.javadoc.source=1.4
-
-maven.test.search.classdir = true
-
-maven.junit.fork=true
-maven.junit.usefile=true
-
-groovy.install.staging.dest=${maven.build.dir}/install/
-maven.html2xdoc.dir=${maven.build.dir}/html
-
-maven.xdoc.date = left
-
-#####################################################
-# codehaus theme
-#####################################################
-maven.xdoc.theme.url=http://codehaus.org/codehaus-style.css
-
-#####################################################
-# Where the jars are uploaded
-#####################################################
-maven.repo.central = dist.codehaus.org
-maven.repo.central.directory = /dist
-
-#maven.repo.remote=http://www.ibiblio.org/maven
-maven.repo.remote=http://dist.codehaus.org
-
-maven.remote.group = groovy
-
-#####################################################
-# swt platform
-# possible values, win32, linux-gtk, macosx
-# 
-# for linux-gtk enable gtk deps in project.xml
-#####################################################
-platform=win32
-#platform=linux-gtk
-#platform=macosx
-
-
diff --git a/groovy/modules/gram/project.xml b/groovy/modules/gram/project.xml
deleted file mode 100644
index 255ef8b..0000000
--- a/groovy/modules/gram/project.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<project>
-  <pomVersion>3</pomVersion>
-  <id>gram</id>
-  <groupId>groovy</groupId>
-  <artifactId>gram</artifactId>
-  <name>gram</name>
-  <currentVersion>1.2-SNAPSHOT</currentVersion>
-  <organization>
-    <name>The Codehaus</name>
-    <url>http://codehaus.org</url>
-    <logo>http://codehaus.org/codehaus-small.gif</logo>
-  </organization>
-  <inceptionYear>2004</inceptionYear>
-  <package>org.codehaus.gram</package>
-  <description>Gram is a metadata processing engine for Groovy</description>
-  <url>http://groovy.codehaus.org/</url>
-  <issueTrackingUrl>http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242&amp;report=roadmap</issueTrackingUrl>
-
-  <siteAddress>beaver.codehaus.org</siteAddress>
-  <siteDirectory>/home/projects/groovy/public_html/gram/maven</siteDirectory>
-  <distributionDirectory>/home/projects/groovy/dist</distributionDirectory>
-
-  <repository>
-    <connection>scm:cvs:pserver:anonymous@cvs.codehaus.org:/scm/cvspublic:groovy/modules/gram</connection>
-    <developerConnection>scm:cvs:ext:${maven.username}@cvs.codehaus.org:/scm/cvspublic:groovy/modules/gram</developerConnection>
-    <url>http://cvs.groovy.codehaus.org/viewcvs.cgi/groovy/modules/gram</url>
-  </repository>
-  <versions/>
-  <branches/>
-  <mailingLists/>
-  <developers>
-    <developer>
-      <id>jstrachan</id>
-      <name>James Strachan</name>
-      <roles>
-        <role>Developer</role>
-        <role>Founder</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <dependencies>
-    <dependency>
-      <groupId>groovy</groupId>
-      <artifactId>groovy-all</artifactId>
-      <version>1.0-jsr-03</version>
-      <type>jar</type>
-      <properties/>
-    </dependency>
-
-    <dependency>
-      <id>annogen</id>
-      <version>0.1.0</version>
-    </dependency>
-
-    <dependency>
-      <groupId>ant</groupId>
-      <artifactId>ant</artifactId>
-      <version>1.6.2</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <nagEmailAddress>scm@groovy.codehaus.org</nagEmailAddress>
-    <sourceDirectory>src/main</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.*</include>
-        <include>**/*Bug.*</include>
-      </includes>
-      <resources>
-        <resource>
-          <directory>src/test</directory>
-          <filtering>false</filtering>
-          <includes>
-            <include>**/*.properties</include>
-            <include>**/*.xml</include>
-          </includes>
-        </resource>
-      </resources>
-    </unitTest>
-    <resources>
-      <resource>
-        <directory>src/main</directory>
-        <filtering>false</filtering>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-      </resource>
-    </resources>
-  </build>
-  <reports>
-    <report>maven-license-plugin</report>
-    <report>maven-checkstyle-plugin</report>
-    <report>maven-pmd-plugin</report>
-    <report>maven-jdepend-plugin</report>
-    <report>maven-changelog-plugin</report>
-    <report>maven-file-activity-plugin</report>
-    <report>maven-developer-activity-plugin</report>
-    <report>maven-jxr-plugin</report>
-    <report>maven-javadoc-plugin</report>
-    <report>maven-junit-report-plugin</report>
-    <report>maven-faq-plugin</report>
-    <report>maven-clover-plugin</report>
-    <report>maven-changes-plugin</report>
-  </reports>
-</project>
\ No newline at end of file
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/.cvsignore b/groovy/modules/gram/src/main/org/codehaus/gram/.cvsignore
deleted file mode 100644
index e43b0f9..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-.DS_Store
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/Gram.java b/groovy/modules/gram/src/main/org/codehaus/gram/Gram.java
deleted file mode 100644
index a4a5d78..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/Gram.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.codehaus.gram;
-
-import groovy.lang.GroovyShell;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.jam.JamService;
-import org.codehaus.jam.JamServiceFactory;
-import org.codehaus.jam.JamServiceParams;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A helper service for invoking Groovy scripts based on a JAM service
- *
- * @version $Revision$
- */
-public class Gram {
-    private JamService jam;
-
-    public static void main(String[] args) {
-        if (args.length < 2) {
-            System.out.println("Usage: srcDir groovyScript");
-            return;
-        }
-        String srcDir = args[0];
-        System.out.println("Parsing source files in directory: " + srcDir);
-
-        try {
-            JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
-
-            JamServiceParams params = jamServiceFactory.createServiceParams();
-            params.includeSourcePattern(new File[]{new File(srcDir)}, "**/*.java");
-            JamService service = jamServiceFactory.createService(params);
-
-            Gram gram = new Gram(service);
-            for (int i = 1; i < args.length; i++) {
-                String script = args[i];
-                System.out.println("Evaluating Groovy script: " + script);
-                gram.execute(script);
-            }
-        }
-        catch (Exception e) {
-            System.out.println("Caught: " + e);
-            e.printStackTrace();
-        }
-    }
-
-    public Gram(JamService jam) {
-        this.jam = jam;
-    }
-
-    public void execute(String script) throws CompilationFailedException, IOException {
-        File file = new File(script);
-        if (file.isFile()) {
-            execute(file);
-        }
-        else {
-            // lets try load the script on the classpath
-            InputStream in = getClass().getClassLoader().getResourceAsStream(script);
-            if (in == null) {
-                in = Thread.currentThread().getContextClassLoader().getResourceAsStream(script);
-                if (in == null) {
-                    throw new IOException("No script called: " + script + " could be found on the classpath or the file system");
-                }
-            }
-            GroovyShell shell = createShell();
-            shell.evaluate(in, script);
-        }
-    }
-
-    public void execute(File script) throws IOException, CompilationFailedException {
-        GroovyShell shell = createShell();
-        shell.evaluate(script);
-    }
-
-    protected GroovyShell createShell() {
-        GroovyShell answer = new GroovyShell();
-        answer.setProperty("jam", jam);
-        answer.setProperty("classes", jam.getAllClasses());
-        return answer;
-    }
-}
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/GramModule.java b/groovy/modules/gram/src/main/org/codehaus/gram/GramModule.java
deleted file mode 100644
index 0dc382f..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/GramModule.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.codehaus.gram;
-
-import org.codehaus.jam.JamService;
-import org.codehaus.jam.JClass;
-import org.codehaus.jam.JProperty;
-import org.codehaus.jam.JElement;
-import org.codehaus.jam.JAnnotatedElement;
-
-import java.util.Map;
-import java.util.HashMap;
-
-/**
- * A set of helper methods for the JamService for use inside Gram
- *
- * @version $Revision$
- */
-public class GramModule {
-
-    public static Map getPropertyMap(JClass jclass) {
-        return getElementSimpleNameMap(jclass.getProperties());
-    }
-
-    public static Map getFieldMap(JClass jclass) {
-        return getElementSimpleNameMap(jclass.getFields());
-    }
-
-    public static Map getMethodMap(JClass jclass) {
-        return getElementSimpleNameMap(jclass.getMethods());
-    }
-
-    public static Map getElementSimpleNameMap(JElement[] elements) {
-        Map answer = new HashMap();
-        for (int i = 0; i < elements.length; i++) {
-            JElement element = elements[i];
-            answer.put(element.getSimpleName(), element);
-        }
-        return answer;
-    }
-
-    public static Map getAnnotationMap(JAnnotatedElement element) {
-        return getElementQualifiedNameMap(element.getAnnotations());
-    }
-
-    public static Map getElementQualifiedNameMap(JElement[] elements) {
-        Map answer = new HashMap();
-        for (int i = 0; i < elements.length; i++) {
-            JElement element = elements[i];
-            answer.put(element.getQualifiedName(), element);
-        }
-        return answer;
-    }
-}
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/GramSupport.java b/groovy/modules/gram/src/main/org/codehaus/gram/GramSupport.java
deleted file mode 100644
index 2fd7db0..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/GramSupport.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.codehaus.gram;
-
-import groovy.lang.Binding;
-import groovy.lang.Script;
-import org.codehaus.jam.JAnnotatedElement;
-import org.codehaus.jam.JAnnotation;
-import org.codehaus.jam.JAnnotationValue;
-
-/**
- * A useful base class for Gram scripts
- *
- * @version $Revision$
- */
-public abstract class GramSupport extends Script {
-
-    public GramSupport() {
-    }
-
-    public GramSupport(Binding binding) {
-        super(binding);
-    }
-
-    /**
-     * Returns the string value of the annotation or "" if the annotation is null
-     * or there is no value for the given name
-     */
-    public String stringValue(JAnnotation annotation, String name) {
-        return stringValue(annotation, name, "");
-    }
-
-    /**
-     * Returns the string value of the annotation or the defaultValue if the annotation is null
-     * or there is no value for the given name
-     */
-    public String stringValue(JAnnotation annotation, String name, String defaultValue) {
-        if (annotation != null) {
-            JAnnotationValue value = annotation.getValue(name);
-            if (value != null) {
-                return value.asString();
-            }
-        }
-        return defaultValue;
-    }
-
-    /**
-     * Returns the integer value of the annotation or 0 if the annotation is null
-     * or there is no value for the given name
-     */
-    public int intValue(JAnnotation annotation, String name) {
-        if (annotation != null) {
-            JAnnotationValue value = annotation.getValue(name);
-            if (value != null) {
-                return value.asInt();
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * Returns the boolean value of the annotation or false if the annotation is null
-     * or there is no value for the given name
-     */
-    public boolean booleanValue(JAnnotation annotation, String name) {
-        if (annotation != null) {
-            JAnnotationValue value = annotation.getValue(name);
-            if (value != null) {
-                return value.asBoolean();
-            }
-        }
-        return false;
-    }
-
-
-    /**
-     * Decaptalizes the first character of the given string; particularly useful for turning JAM property names
-     * into field names etc.
-     */
-    public String decapitalize(String text) {
-        if (text == null) {
-            return null;
-        }
-        return text.substring(0, 1).toLowerCase() + text.substring(1);
-    }
-
-    /**
-     * Captalizes the first character of the given string; particularly useful for turning JAM field names
-     * into property names etc.
-     */
-    public String capitalize(String text) {
-        if (text == null) {
-            return null;
-        }
-        return text.substring(0, 1).toUpperCase() + text.substring(1);
-    }
-
-    /**
-     * Returns the string value of the named annotation
-     */
-    public String annotationValue(JAnnotatedElement element, String annotationName, String valueName) {
-        return annotationValue(element, annotationName, valueName, "");
-    }
-
-    /**
-     * Returns the string value of the named annotation or the default value is returned if the element, annotation or value
-     * is null
-     */
-    public String annotationValue(JAnnotatedElement element, String annotationName, String valueName, String defaultValue) {
-        if (element != null) {
-            JAnnotation annotation = element.getAnnotation(annotationName);
-            return stringValue(annotation, valueName, defaultValue);
-        }
-        return defaultValue;
-    }
-}
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/GramTask.java b/groovy/modules/gram/src/main/org/codehaus/gram/GramTask.java
deleted file mode 100644
index edf71a8..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/GramTask.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.codehaus.gram;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.Path;
-import org.apache.tools.ant.types.Reference;
-import org.codehaus.jam.JamService;
-import org.codehaus.jam.JamServiceFactory;
-import org.codehaus.jam.JamServiceParams;
-
-import java.io.File;
-
-/**
- * An Ant task for executing Gram scripts, which are Groovy
- * scripts executed on the JAM context.
- *
- * @version $Revision$
- */
-public class GramTask extends MatchingTask {
-
-    private Path srcDir = null;
-    private Path mToolpath = null;
-    private Path mClasspath = null;
-    private String mIncludes = "**/*.java";
-    private File destDir;
-    private File scriptDir;
-
-    /**
-     * Sets the directory into which source files should be generated.
-     */
-    public void setDestDir(File destDir) {
-        this.destDir = destDir;
-    }
-
-    public void setScriptDir(File scriptDir) {
-        this.scriptDir = scriptDir;
-    }
-
-    public void setSrcDir(Path srcDir) {
-        this.srcDir = srcDir;
-    }
-
-    public void setToolpath(Path path) {
-        if (mToolpath == null) {
-            mToolpath = path;
-        }
-        else {
-            mToolpath.append(path);
-        }
-    }
-
-    public void setToolpathRef(Reference r) {
-        createToolpath().setRefid(r);
-    }
-
-
-    public Path createToolpath() {
-        if (mToolpath == null) {
-            mToolpath = new Path(getProject());
-        }
-        return mToolpath.createPath();
-    }
-
-    public void setClasspath(Path path) {
-        if (mClasspath == null) {
-            mClasspath = path;
-        }
-        else {
-            mClasspath.append(path);
-        }
-    }
-
-    public void setClasspathRef(Reference r) {
-        createClasspath().setRefid(r);
-    }
-
-
-    public Path createClasspath() {
-        if (mClasspath == null) {
-            mClasspath = new Path(getProject());
-        }
-        return mClasspath.createPath();
-    }
-
-
-    public void execute() throws BuildException {
-        if (srcDir == null) {
-            throw new BuildException("'srcDir' must be specified");
-        }
-        if (destDir == null) {
-            throw new BuildException("'destDir' must be specified");
-        }
-        if (scriptDir == null) {
-            throw new BuildException("'scriptDir' must be specified");
-        }
-        JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
-        JamServiceParams serviceParams = jamServiceFactory.createServiceParams();
-        if (mToolpath != null) {
-            File[] tcp = path2files(mToolpath);
-            for (int i = 0; i < tcp.length; i++) {
-                serviceParams.addToolClasspath(tcp[i]);
-            }
-        }
-        if (mClasspath != null) {
-            File[] cp = path2files(mClasspath);
-            for (int i = 0; i < cp.length; i++) {
-                serviceParams.addClasspath(cp[i]);
-            }
-        }
-        serviceParams.includeSourcePattern(path2files(srcDir), mIncludes);
-        try {
-            JamService jam = jamServiceFactory.createService(serviceParams);
-            Gram gram = new Gram(jam);
-
-            log("Executing Groovy scripts:");
-
-            DirectoryScanner ds = super.getDirectoryScanner(scriptDir);
-            String[] files = ds.getIncludedFiles();
-
-            for (int i = 0; i < files.length; i++) {
-                String file = files[i];
-
-                log("Script: " + file);
-                gram.execute(new File(scriptDir, file));
-            }
-            log("...done.");
-        }
-        catch (Exception e) {
-            throw new BuildException(e);
-        }
-    }
-
-    private File[] path2files(Path path) {
-        String[] list = path.list();
-        File[] out = new File[list.length];
-        for (int i = 0; i < out.length; i++) {
-            out[i] = new File(list[i]).getAbsoluteFile();
-        }
-        return out;
-    }
-}
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/ColumnInfo.java b/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/ColumnInfo.java
deleted file mode 100644
index 8d6609d..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/ColumnInfo.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.codehaus.gram.hibernate;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Represents a simple POJO containing the details of a column
- *
- * @version $Revision$
- */
-public class ColumnInfo {
-    protected static Set primitiveTypes = createPrimitiveTypes();
-
-    private String columnName = "";
-    private String tableName = "";
-    private String typeName = "";
-    private String qualifiedTypeName = "";
-    private String cardinality = "";
-    private String foreignKey = "";
-    private int length = 0;
-    private boolean notNull;
-
-    public String getCardinality() {
-        return cardinality;
-    }
-
-    public void setCardinality(String cardinality) {
-        this.cardinality = cardinality;
-    }
-
-    public String getColumnName() {
-        return columnName;
-    }
-
-    public void setColumnName(String columnName) {
-        this.columnName = columnName;
-    }
-
-    public String getForeignKey() {
-        return foreignKey;
-    }
-
-    public void setForeignKey(String foreignKey) {
-        this.foreignKey = foreignKey;
-    }
-
-    public String getTableName() {
-        return tableName;
-    }
-
-    public void setTableName(String tableName) {
-        this.tableName = tableName;
-    }
-
-    public String getTypeName() {
-        return typeName;
-    }
-
-    public String getQualifiedTypeName() {
-        return qualifiedTypeName;
-    }
-
-    public void setQualifiedTypeName(String qualifiedTypeName) {
-        this.qualifiedTypeName = qualifiedTypeName;
-        int idx = qualifiedTypeName.lastIndexOf('.');
-        if (idx > 0) {
-            typeName = qualifiedTypeName.substring(idx + 1);
-        }
-        else {
-            typeName = qualifiedTypeName;
-        }
-    }
-
-    public int getLength() {
-        return length;
-    }
-
-    public void setLength(int length) {
-        this.length = length;
-    }
-
-    public boolean isNotNull() {
-        return notNull;
-    }
-
-    public void setNotNull(boolean notNull) {
-        this.notNull = notNull;
-    }
-
-    public boolean isPrimitiveType() {
-        return primitiveTypes.contains(getQualifiedTypeName());
-    }
-
-    protected static Set createPrimitiveTypes() {
-        Set answer = new HashSet();
-        answer.add("boolean");
-        answer.add("byte");
-        answer.add("char");
-        answer.add("short");
-        answer.add("int");
-        answer.add("long");
-        answer.add("float");
-        answer.add("double");
-        answer.add("java.lang.Boolean");
-        answer.add("java.lang.Byte");
-        answer.add("java.lang.Character");
-        answer.add("java.lang.Short");
-        answer.add("java.lang.Integer");
-        answer.add("java.lang.Long");
-        answer.add("java.lang.Float");
-        answer.add("java.lang.Double");
-        answer.add("java.math.BigInteger");
-        answer.add("java.math.BigDecimal");
-        answer.add("java.lang.String");
-        answer.add("java.util.Date");
-        answer.add("java.sql.Date");
-        answer.add("java.sql.Time");
-        answer.add("java.sql.Timestamp");
-        return answer;
-    }
-
-
-}
diff --git a/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/HibernateSupport.java b/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/HibernateSupport.java
deleted file mode 100644
index 5e1c923..0000000
--- a/groovy/modules/gram/src/main/org/codehaus/gram/hibernate/HibernateSupport.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.codehaus.gram.hibernate;
-
-import groovy.lang.Binding;
-import org.codehaus.gram.GramSupport;
-import org.codehaus.jam.JAnnotation;
-import org.codehaus.jam.JProperty;
-
-/**
- * A useful base class for hiberate based Gram scripts
- *
- * @version $Revision$
- */
-public abstract class HibernateSupport extends GramSupport {
-
-    public HibernateSupport() {
-    }
-
-    public HibernateSupport(Binding binding) {
-        super(binding);
-    }
-
-    public ColumnInfo getColumnDetails(JProperty property) {
-        ColumnInfo answer = new ColumnInfo();
-        answer.setCardinality("0..1");
-        JAnnotation ann = property.getAnnotation("hibernate.map");
-        if (ann != null) {
-            answer.setTableName(stringValue(ann, "table"));
-            answer.setQualifiedTypeName(annotationValue(property, "hibernate.collection-composite-element", "class"));
-            answer.setCardinality("0..N");
-            return answer;
-        }
-        ann = property.getAnnotation("hibernate.set");
-        if (ann != null) {
-            answer.setTableName(stringValue(ann, "table"));
-            answer.setQualifiedTypeName(annotationValue(property, "hibernate.collection-many-to-many", "class"));
-            answer.setCardinality("0..N");
-            return answer;
-        }
-        ann = property.getAnnotation("hibernate.bag");
-        if (ann != null) {
-            answer.setTableName(stringValue(ann, "table"));
-            answer.setQualifiedTypeName(annotationValue(property, "hibernate.collection-many-to-many", "class"));
-            answer.setCardinality("0..N");
-            return answer;
-        }
-        ann = property.getAnnotation("hibernate.many-to-one");
-        if (ann != null) {
-            answer.setQualifiedTypeName(stringValue(ann, "class"));
-            answer.setForeignKey(stringValue(ann, "foreignKey"));
-        }
-        ann = property.getAnnotation("hibernate.property");
-        if (ann != null) {
-            answer.setColumnName(stringValue(ann, "column"));
-            answer.setQualifiedTypeName(stringValue(ann, "type"));
-            answer.setLength(intValue(ann, "length"));
-            answer.setNotNull(booleanValue(ann, "not-null"));
-            if (answer.isNotNull()) {
-                answer.setCardinality("1..1");
-            }
-        }
-        return answer;
-    }
-
-
-}
diff --git a/groovy/modules/gram/src/script/Dump.groovy b/groovy/modules/gram/src/script/Dump.groovy
deleted file mode 100644
index ac0f740..0000000
--- a/groovy/modules/gram/src/script/Dump.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-// START SNIPPET: gram
-
-persistentClasses = classes.findAll { it.getAnnotation("hibernate.class") != null }
-
-println "Found ${persistentClasses.size()} instances out of ${classes.size()}"
-
-persistentClasses.each { c |
-    println c.simpleName
-
-    for (p in c.properties) {
-        println "  property: ${p.simpleName}"
-    }
-}
-
-// END SNIPPET: gram
diff --git a/groovy/modules/gram/src/test/org/codehaus/gram/JamTest.java b/groovy/modules/gram/src/test/org/codehaus/gram/JamTest.java
deleted file mode 100644
index 6d4f23b..0000000
--- a/groovy/modules/gram/src/test/org/codehaus/gram/JamTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.codehaus.gram;
-
-import junit.framework.TestCase;
-import org.codehaus.jam.JAnnotation;
-import org.codehaus.jam.JClass;
-import org.codehaus.jam.JProperty;
-import org.codehaus.jam.JamService;
-import org.codehaus.jam.JamServiceFactory;
-import org.codehaus.jam.JamServiceParams;
-import org.codehaus.jam.JMethod;
-import org.codehaus.gram.model.Person;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @version $Revision$
- */
-public class JamTest extends TestCase {
-    private JamService service;
-
-    public void testJam() throws Exception {
-        JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
-
-        JamServiceParams params = jamServiceFactory.createServiceParams();
-        params.includeSourcePattern(new File[]{new File("src/test")}, "**/*.java");
-        //params.includeSourcePattern(new File[]{new File("/workspace/inbox/src/java")}, "**/*.java");
-        service = jamServiceFactory.createService(params);
-
-        JClass thisClass = null;
-        JClass[] allClasses = service.getAllClasses();
-        //String className = "com.raftplc.raftflow.model.RiskIdentification";
-        String className = Person.class.getName();
-        for (int i = 0; i < allClasses.length; i++) {
-            JClass aClass = allClasses[i];
-            if (aClass.getQualifiedName().equals(className)) {
-                thisClass = aClass;
-            }
-        }
-
-        assertTrue("Could not find this class", thisClass != null);
-
-        // lets get the properties
-
-
-        Map propertyMap = dumpClass(thisClass);
-
-
-        while (true) {
-            thisClass = thisClass.getSuperclass();
-            if (thisClass == null) {
-                break;
-            }
-            dumpClass(thisClass);
-        }
-
-        JProperty property = (JProperty) propertyMap.get("Id");
-        assertTrue("Could not find property Id", property != null);
-
-        Map annotations = GramModule.getAnnotationMap(property);
-        assertTrue("Should have at least one annotation on property: " + property + " but was: " + annotations, annotations.size() > 0);
-
-        JAnnotation annotation = (JAnnotation) annotations.get("hibernate.id");
-        assertTrue("Should have found annotation 'hibernate.id'", annotation != null);
-
-    }
-
-    protected Map dumpClass(JClass aClass) {
-        System.out.println("Dumping class: " + aClass.getQualifiedName());
-        Map propertyMap = GramModule.getPropertyMap(aClass);
-        for (Iterator iter = propertyMap.entrySet().iterator(); iter.hasNext();) {
-            Map.Entry entry = (Map.Entry) iter.next();
-            JProperty property = (JProperty) entry.getValue();
-            System.out.println("property: " + entry.getKey() + " has annoations: " + GramModule.getAnnotationMap(property));
-        }
-        Map methodMap = GramModule.getMethodMap(aClass);
-        JMethod method = (JMethod) methodMap.get("getId");
-        if (method != null) {
-            System.out.println("getId() has annotations: " + GramModule.getAnnotationMap(method));
-        }
-        System.out.println();
-        return propertyMap;
-    }
-
-
-}
diff --git a/groovy/modules/gram/src/test/org/codehaus/gram/base/Identifiable.java b/groovy/modules/gram/src/test/org/codehaus/gram/base/Identifiable.java
deleted file mode 100644
index 1176020..0000000
--- a/groovy/modules/gram/src/test/org/codehaus/gram/base/Identifiable.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.codehaus.gram.base;
-
-import java.io.Serializable;
-
-/**
- * @version $Revision$
- */
-public interface Identifiable { //extends Cloneable, Serializable {
-
-    /**
-     * @return Returns the id.
-     * @hibernate.id generator-class="native" type="java.lang.Integer" column="id"
-     */
-    public Integer getId();
-
-    public void setId(Integer id);
-
-    //public Object clone();
-}
diff --git a/groovy/modules/gram/src/test/org/codehaus/gram/base/IdentifiableSupport.java b/groovy/modules/gram/src/test/org/codehaus/gram/base/IdentifiableSupport.java
deleted file mode 100644
index 9febf31..0000000
--- a/groovy/modules/gram/src/test/org/codehaus/gram/base/IdentifiableSupport.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.codehaus.gram.base;
-
-/**
- * @version $Revision$
- */
-public class IdentifiableSupport implements Identifiable {
-    private Integer id;
-
-    /**
-     * @return Returns the id.
-     * @hibernate.id generator-class="native" type="java.lang.Integer" column="id"
-     */
-    public Integer getId() {
-        return this.id;
-    }
-
-    /**
-     * @param id The id to set.
-     */
-    public void setId(Integer id) {
-        this.id = id;
-    }
-   
-}
diff --git a/groovy/modules/gram/src/test/org/codehaus/gram/model/Person.java b/groovy/modules/gram/src/test/org/codehaus/gram/model/Person.java
deleted file mode 100644
index 6b9beb7..0000000
--- a/groovy/modules/gram/src/test/org/codehaus/gram/model/Person.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.codehaus.gram.model;
-
-import org.codehaus.gram.base.IdentifiableSupport;
-
-import java.util.Set;
-
-/**
- * @hibernate.class table="Person"
- *
- * @version $Revision$
- */
-public class Person extends IdentifiableSupport {
-    private String name;
-    private Set children;
-    private Object location;
-
-    /**
-     * @return Returns the children.
-     * @hibernate.collection-key column = "parentId"
-     * @hibernate.collection-many-to-many class="org.codehaus.gram.JamTest" column="id"
-     * @hibernate.set inverse="false" cascade="save-update" table="JamTable" lazy="false"
-     */
-    public Set getChildren() {
-        return children;
-    }
-
-    public void setChildren(Set children) {
-        this.children = children;
-    }
-
-    /**
-     * @return Returns the name.
-     * @hibernate.property column="name" type="java.lang.String" length="255"
-     * not-null="true"
-     */
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-     /**
-     * @return Returns the Location.
-     * @hibernate.many-to-one class="Location"
-     * constrained="true" foreign-key="FK_Location"
-     * outer-join="auto" column="location"
-     * not-null="true"
-     */
-    public Object getLocation() {
-        return location;
-    }
-
-    public void setLocation(Object location) {
-        this.location = location;
-    }
-}
diff --git a/groovy/modules/groovy-swt/.classpath b/groovy/modules/groovy-swt/.classpath
deleted file mode 100644
index be1f0a4..0000000
--- a/groovy/modules/groovy-swt/.classpath
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<classpath>
-  <classpathentry excluding="" kind="src" path="src/main">
-  </classpathentry>
-  <classpathentry output="target/test-classes" kind="src" path="src/test">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar">
-  </classpathentry>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-logging/jars/commons-logging-1.0.3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/groovy/jars/groovy-all-1.0-beta-8.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/swt/jars/swt-win32-3.1m5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/swt/jars/jface-3.1m5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/swt/jars/forms-3.1m5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/swt/jars/runtime-3.1m5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/swt/jars/osgi-core-3.1m5.jar">
-  </classpathentry>
-  <classpathentry kind="output" path="target/classes">
-  </classpathentry>
-</classpath>
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/.cvsignore b/groovy/modules/groovy-swt/.cvsignore
deleted file mode 100644
index 4e1b955..0000000
--- a/groovy/modules/groovy-swt/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.log
-target
diff --git a/groovy/modules/groovy-swt/.project b/groovy/modules/groovy-swt/.project
deleted file mode 100644
index 9e5b5c0..0000000
--- a/groovy/modules/groovy-swt/.project
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<projectDescription>
-  <name>groovy-swt</name>
-  <comment>groovy-swt</comment>
-  <projects>
-  </projects>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-      <arguments>
-      </arguments>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
-</projectDescription>
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/LICENSE.txt b/groovy/modules/groovy-swt/LICENSE.txt
deleted file mode 100644
index 0f6cb23..0000000
--- a/groovy/modules/groovy-swt/LICENSE.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-/*
- $Id$
-
- Copyright 2003 (C) James Strachan and Bob Mcwhirter. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
diff --git a/groovy/modules/groovy-swt/README.txt b/groovy/modules/groovy-swt/README.txt
deleted file mode 100644
index 46e2830..0000000
--- a/groovy/modules/groovy-swt/README.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-- Getting started
-
-================================================================
-== installing on windows
-================================================================
-As the current swt libs are not on ibiblio you have to manually 
-install them. 
-I case you already have eclipse-3.1m5 installed, all the libs can be found in 
-the plugins directory. 
-
-copy 
-	eclipse/plugins/org.eclipse.swt.win32_3.1.0/ws/win32/swt.jar
-to 
-	maven/repository/swt/jars/swt-win32-3.1m5.jar
-
-
-copy 
-	eclipse/plugins/org.eclipse.jface_3.1.0/jface.jar
-to 
-	maven/repository/swt/jars/jface-3.1m5.jar
-	
-
-copy 
-	eclipse/plugins/org.eclipse.ui.forms_3.1.0/forms.jar
-to 
-	maven/repository/swt/jars/forms-3.1m5.jar	
-
-copy 
-	eclipse/plugins/org.eclipse.core.runtime_3.1.0/runtime.jar
-to 
-	maven/repository/swt/jars/runtime-3.1m5.jar	
-
-	
-copy 
-	eclipse/plugins/org.eclipse.osgi_3.1.0/core.jar
-to 
-	maven/repository/swt/jars/osgi-core-3.1m5.jar		
-
-copy
-	eclipse/plugins/org.eclipse.swt.win32_3.0.0/os/win32/x86/swt-awt-win32-3123.dll
-	eclipse/plugins/org.eclipse.swt.win32_3.0.0/os/win32/x86/swt-win32-3123.dll 
-to 
-	a directory in your system environment variable $PATH	
-(Alternatively you can run the examples by using the -Djava.library.path vm argument)
-
-All test cases will also fail when you do not have these libraries properly installed.
-     
-Alternatively you can download the RCP Runtime Binary from
-the www.eclipse.org download pages. This download 
-also contains most libraries but the forms.jar is missing.
-
-================================================================
-== running the examples
-================================================================
-The examples can be found in the src/examples subdirectory.
-For every example there is a java main class you can run.
-
-
diff --git a/groovy/modules/groovy-swt/maven.xml b/groovy/modules/groovy-swt/maven.xml
deleted file mode 100644
index 5fdfc5d..0000000
--- a/groovy/modules/groovy-swt/maven.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<project default="default" xmlns:j="jelly:core" xmlns:u="jelly:util" >
-
-  <goal name="default" prereqs="clean">
-  </goal>	
-  
-  <goal name="setclasspath">
-    <path id="test.classpath">
-      <pathelement path="${maven.build.dest}"/>
-      <pathelement path="target/classes"/>
-      <pathelement path="target/test-classes"/>
-      <path refid="maven.dependency.classpath"/>
-    </path>
-    <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpathref="test.classpath"/> 
-  </goal>
-  
-  <goal name="groovy:compile" prereqs="java:compile, setclasspath" description="Compiles the main code">
-    <copy todir="${basedir}/target/classes">
-      <fileset dir="${basedir}/src/main">
-        <include name="**/*.groovy"/>
-        <exclude name="CVS/*"/>
-      </fileset>
-    </copy>
-    <groovyc destdir="${basedir}/target/classes" srcdir="${basedir}/target/classes" listfiles="true">
-      <classpath refid="test.classpath"/>
-    </groovyc>
-  </goal>
-  
-</project>
diff --git a/groovy/modules/groovy-swt/project.properties b/groovy/modules/groovy-swt/project.properties
deleted file mode 100644
index 9f423d2..0000000
--- a/groovy/modules/groovy-swt/project.properties
+++ /dev/null
@@ -1,46 +0,0 @@
-maven.compile.source=1.4
-maven.compile.target=1.4
-maven.test.source=1.4
-maven.compile.deprecation=true
-maven.compile.debug=true
-maven.compile.optimize=true
-
-maven.javadoc.links=http://java.sun.com/j2se/1.4.1/docs/api/
-maven.javadoc.source=1.4
-
-maven.test.search.classdir = true
-
-maven.junit.fork=true
-maven.junit.usefile=true
-
-groovy.install.staging.dest=${maven.build.dir}/install/
-maven.html2xdoc.dir=${maven.build.dir}/html
-
-maven.xdoc.date = left
-
-#####################################################
-# codehaus theme
-#####################################################
-maven.xdoc.theme.url=http://codehaus.org/codehaus-style.css
-
-#####################################################
-# Where the jars are uploaded
-#####################################################
-maven.repo.central = dist.codehaus.org
-maven.repo.central.directory = /www/dist.codehaus.org
-
-#maven.repo.remote=http://www.ibiblio.org/maven
-maven.repo.remote=http://dist.codehaus.org
-
-
-#####################################################
-# swt platform
-# possible values, win32, linux-gtk, macosx
-# 
-# for linux-gtk enable gtk deps in project.xml
-#####################################################
-platform=win32
-#platform=linux-gtk
-#platform=macosx
-
-
diff --git a/groovy/modules/groovy-swt/project.xml b/groovy/modules/groovy-swt/project.xml
deleted file mode 100644
index 93dca19..0000000
--- a/groovy/modules/groovy-swt/project.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project>
-  <pomVersion>3</pomVersion>
-  <name>groovy-swt</name>
-  <groupId>groovy-swt</groupId>
-  <artifactId>groovy-swt</artifactId>
-  <currentVersion>0.3</currentVersion>
-  <organization>
-    <name>The Codehaus</name>
-    <url>http://codehaus.org</url>
-    <logo>http://codehaus.org/codehaus-small.gif</logo>
-  </organization>
-  <inceptionYear>2004</inceptionYear>
-  <package>groovy</package>
-  <description>groovy-swt</description>
-  <url>http://groovy.codehaus.org/</url>
-  <issueTrackingUrl>http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242&amp;report=roadmap</issueTrackingUrl>
-  <siteAddress>groovy.codehaus.org</siteAddress>
-  <siteDirectory>/www/groovy.codehaus.org</siteDirectory>
-  <repository>
-    <connection>scm:cvs:pserver:anonymous@cvs.codehaus.org:/scm/cvspublic:groovy/modules/groovy-swt</connection>
-    <developerConnection>scm:cvs:ext:${maven.username}@cvs.codehaus.org:/scm/cvspublic:groovy/modules/groovy-swt</developerConnection>
-    <url>http://cvs.groovy.codehaus.org/viewcvs.cgi/groovy/modules/groovy-swt</url>
-  </repository>
-  <developers>
-    <developer>
-      <name>Christiaan ten Klooster</name>
-      <id>ckl</id>
-      <email>ckl@dacelo.nl</email>
-      <organization>Dacelo WebDevelopment</organization>
-    </developer>
-  </developers>
-  <dependencies>
-	<dependency>
-          <groupId>commons-logging</groupId>
-            <artifactId>commons-logging</artifactId>
-            <version>1.0.3</version>
-            <type>jar</type>
-            <properties/>
-        </dependency>
-    <dependency>
-      <groupId>groovy</groupId>
-      <artifactId>groovy</artifactId>
-      <version>all-1.0-beta-9</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>swt</groupId>
-      <artifactId>swt-${platform}</artifactId>
-      <version>3.1m5</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>swt</groupId>
-      <artifactId>jface</artifactId>
-      <version>3.1m5</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>swt</groupId>
-      <artifactId>forms</artifactId>
-      <version>3.1m5</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>swt</groupId>
-      <artifactId>runtime</artifactId>
-      <version>3.1m5</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>swt</groupId>
-      <artifactId>osgi-core</artifactId>
-      <version>3.1m5</version>
-      <type>jar</type>
-    </dependency>
-  </dependencies>
-  <build>
-    <nagEmailAddress>groovy-scm@lists.codehaus.org</nagEmailAddress>
-    <sourceDirectory>src/main</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.*</include>
-        <include>**/*Bug.*</include>
-      </includes>
-      <resources>
-        <resource>
-          <directory>src/test</directory>
-          <includes>
-            <include>**/*.properties</include>
-            <include>**/*.xml</include>
-          </includes>
-          <filtering>false</filtering>
-        </resource>
-      </resources>
-    </unitTest>
-    <resources>
-      <resource>
-        <directory>src/main</directory>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-        </includes>
-        <filtering>false</filtering>
-      </resource>
-    </resources>
-  </build>
-  <reports>
-    <report>maven-license-plugin</report>
-    <report>maven-checkstyle-plugin</report>
-    <report>maven-pmd-plugin</report>
-    <report>maven-jdepend-plugin</report>
-    <report>maven-changelog-plugin</report>
-    <report>maven-file-activity-plugin</report>
-    <report>maven-developer-activity-plugin</report>
-    <report>maven-jxr-plugin</report>
-    <report>maven-javadoc-plugin</report>
-    <report>maven-junit-report-plugin</report>
-    <report>maven-faq-plugin</report>
-    <report>maven-clover-plugin</report>
-    <report>maven-changes-plugin</report>
-  </reports>
-  <properties />
-</project>
-
diff --git a/groovy/modules/groovy-swt/settings.props b/groovy/modules/groovy-swt/settings.props
deleted file mode 100644
index 3a9cf66..0000000
--- a/groovy/modules/groovy-swt/settings.props
+++ /dev/null
@@ -1,2 +0,0 @@
-#Fri Feb 20 19:43:20 CET 2004

-var1=true

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/ApplicationWindowDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/jface/ApplicationWindowDemo.groovy
deleted file mode 100644
index 9952094..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/ApplicationWindowDemo.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.jface.examples

-

-import groovy.jface.JFaceBuilder

-

-class ApplicationWindowDemo {

-    @Property mainapp

-        

-    void run() {

-        def swt = new JFaceBuilder()

-        

-	    mainapp = swt.applicationWindow() { 	

-	         	

-	         	menuManager( text:"File" ) {

-	         		action ( text:"Very Nice", closure:{ println "Very Nice !!!" } )

-	         		separator()

-	         		action ( text:"Check me", checked:true, closure:{ println "I've been checked" } )

-	         	}

-	

-	         	menuManager( text:"Edit" ) {

-	         		action ( text:"Say Hi Statusbar", closure:{ mainapp.setStatus('Hello ...') } )

-	         	}

-	       

-				fillLayout ( type:"vertical" )

-	

-				label( text:"A big red label", background:[204, 0, 0] ) 

-				label( text:"I can barelly read this", foreground:[0,200,0] )  

-				label( text:"It sure looks like the dutch flag", foreground:[0,0,150], background:[0, 0, 153] )

-	 

-		}

-  

-		mainapp.MenuBarManager.updateAll( true )

-		mainapp.getShell().layout()

-		mainapp.open()

-

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/PreferencesDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/jface/PreferencesDemo.groovy
deleted file mode 100644
index b3ebc22..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/PreferencesDemo.groovy
+++ /dev/null
@@ -1,39 +0,0 @@
-package groovy.jface.examples

-

-import groovy.jface.JFaceBuilder

-

-class PreferencesDemo {

-	@Property pd

-

-    void run() {

-        def jface = new JFaceBuilder()

-		def mainapp = jface.applicationWindow() { 	        

-		

-			pd = preferenceDialog() {

-				

-				preferencePage( title:"General settings", filename:"settings.props" ) { 

-					booleanFieldEditor (propertyName:"var1", title:"It's boolean" )

-					colorFieldEditor( propertyName:"var2", title:"MainColor" )

-					directoryFieldEditor(propertyName:"var3", title:"Directory"	)

-					fileFieldEditor( propertyName:"var4", title:"File" )

-					fontFieldEditor( propertyName:"var5", title:"Font" )

-					integerFieldEditor( propertyName:"var6", title:"Integer" )

-					stringFieldEditor( propertyName:"var7", title:"String" )

-				} 

-								

-				preferencePage( title:"Personal settings", filename:"settings.props" ) { 

-					booleanFieldEditor( propertyName:"var8", title:"It's boolean" )

-					colorFieldEditor( propertyName:"var2", title:"MainColor" )

-					directoryFieldEditor( propertyName:"var9", title:"Directory" )

-					fileFieldEditor( propertyName:"var10", title:"File" )

-					fontFieldEditor( propertyName:"var11", title:"Font" )

-					integerFieldEditor( propertyName:"var12", title:"Integer" )

-					stringFieldEditor( propertyName:"var13", title:"String" )

-				} 

-			}

-		}

-		

-	  	pd.open()

-	}

-  

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoApplicationWindow.java b/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoApplicationWindow.java
deleted file mode 100644
index 1bfe148..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoApplicationWindow.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.jface;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoApplicationWindow extends SwtTest {
-
-    public static void main(String[] args) throws Exception {
-        RunDemoApplicationWindow demo = new RunDemoApplicationWindow();
-        GroovyObject object = demo.compile("src/examples/groovy/jface/ApplicationWindowDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoPreferences.java b/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoPreferences.java
deleted file mode 100644
index b6c5970..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoPreferences.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.jface;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoPreferences extends SwtTest {
-
-    public static void main(String[] args) throws Exception {
-        RunDemoPreferences demo = new RunDemoPreferences();
-        GroovyObject object = demo.compile("src/examples/groovy/jface/PreferencesDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoWizard.java b/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoWizard.java
deleted file mode 100644
index 4e0fd34..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/RunDemoWizard.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.jface;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoWizard extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoWizard demo = new RunDemoWizard();
-        GroovyObject object = demo.compile("src/examples/groovy/jface/WizardDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/jface/WizardDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/jface/WizardDemo.groovy
deleted file mode 100644
index c242c3e..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/jface/WizardDemo.groovy
+++ /dev/null
@@ -1,84 +0,0 @@
-package groovy.jface.examples

-

-import groovy.jface.JFaceBuilder

-

-class WizardDemo extends Script {

-    @Property mainapp

-    @Property wizardPage1

-    @Property text    

-    @Property wizardDialog1

-    

-    def run() {

-		jface = new JFaceBuilder()

-

-		mainapp = jface.applicationWindow() { 	

-		

-  			wizardDialog1 = wizardDialog() {

-  			

-				wizardPage1 = wizardPage( title:"Step 1", description:"Step 1", closure: { parent |

-					jface.composite( parent ) {

-						gridLayout( numColumns:2 )

-						label( text:"Some input" )

-

-						text = text()

-						label( text:"Label 1" )

-						

-						button( text:"Set Message") {

-							onEvent( type:"Selection" , closure: { 

-								wizardPage1.setMessage( text.getText() ) 								

-							})

-						}	

-	

-						label( text:"Label 2" )

-						button( text:"Set Error Message" ) {

-							onEvent( type:"Selection", closure: {

-								wizardPage1.setErrorMessage('ErrorMessage: This step is not complete') 

-							})

-						}

-						

-						label( text:"Label 3" )

-						button ( text:"Set Page Complete" ) {

-							onEvent ( type:"Selection", closure: {

-								wizardPage1.setPageComplete(true)

-							})

-						}

-					} 

-		

-				})

-				

-				wizardPage2 = wizardPage( title:"Step 2", description:"Step 2", closure: { parent |

-					jface.composite( parent ) {

-						gridLayout( numColumns:"2" )

-						label( text:"Label 3" )

-						button( text:"Do nothing" )

-					}

-				})

-							

-				wizardPage3 = wizardPage( title:"Step 3", description:"Step 3", closure: { parent |

-					jface.composite( parent ) {

-						gridLayout( numColumns:"2" )

-						label( text:"Label 4" )

-						button( text:"Do nothing" )

-					}

-				})	

-			} 

-				wizardDialog1.open()

-				wizardPage1.setPageComplete(false)

-			

-		}

-	}

-	

-	void onPerformFinish() {

-		println "onPerformFinish called ..."

-	}	 

-

-	void onPerformCancel() {

-		println "onPerformCancel called ......"

-	}

-	

-}

-

-

-

-

-

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/AwtSwtDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/AwtSwtDemo.groovy
deleted file mode 100644
index 99dde0b..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/AwtSwtDemo.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-import groovy.swt.CustomSwingBuilder

-

-

-class AwtSwtDemo {

-    @Property swt

-    

-    void run() {

-        swt = new SwtBuilder()

-   		def swing = new CustomSwingBuilder()        

-   		

-        def shell = swt.shell ( text:'The AwtSwt Demo' ) {

-         	fillLayout()

-         	

-         	label( text:"this is a swt label" )

-         	

-         	composite ( style:"border, embedded" ) {

-         		fillLayout()

-         	

-	         	swing.current = awtFrame()

-				swing.tree()

-			}

-        }

-        

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-		

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/BrowserDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/BrowserDemo.groovy
deleted file mode 100644
index 05b0e68..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/BrowserDemo.groovy
+++ /dev/null
@@ -1,96 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-

-class BrowserSwtDemo extends Script {

-    @Property swt

-    @Propert shell

-    @Propert browser

-    @Propert location

-    @Propert status

-    @Propert progressBar

-        

-    def run() {

-        swt = new SwtBuilder()

-        

-        shell = swt.shell( text:"The Browser Test", location:[100,100], size:[700,600] ) {

-         	gridLayout(numColumns:3) 

-

-        	toolBar( style:"none" ) {

-        		gridData( horizontalSpan:3 )

-        	

-        		toolItem(style:"push", text:"Back") {

-        			onEvent(type:"Selection", closure:{ browser.back() }) 

-        		}

-        		

-        		toolItem(style:"push", text:"Forward") {

-        			onEvent(type:"Selection", closure:{ browser.forward() } ) 

-        		}

-        		

-        		toolItem(style:"push", text:"Stop") {	

-        			onEvent(type:"Selection", closure:{ browser.stop() } )

-        		}

-        		

-        		toolItem(style:"push", text:"Refresh") { 

-        			onEvent(type:"Selection", closure:{ browser.refresh() } )

-        		}

-        		

-        		toolItem(style:"push", text:"Go") {

-        			onEvent(type:"Selection", closure:{ 

-        				browser.setUrl( location.getText() ) 

-        			})

-        		}

-        	}

-

-        	label( style:"none", text:"Address" )

-        	location = text( style:"border" ) {  

-	        	gridData( style:"fill_horizontal", horizontalSpan:2, grabExcessHorizontalSpace:true )

-        	}

-

-

-			browser = browser( style:"border" ) {

-				gridData( horizontalSpan:3, style:"fill_both", grabExcessHorizontalSpace:true )

-

- 				locationListener(type:"changed", closure: { event |

-					location.setText( event.location )

-				})

-	 	

-				progressListener(type:"changed", closure: { event |

-					if (event.total != 0) {

-						ratio = event.current * 100 / event.total

-						progressBar.setSelection( 

-							Integer.parseInt("" + Math.round(Double.parseDouble("" + ratio))) )

-					}

-				})

-			

-				progressListener(type:"completed", closure: { 

-					progressBar.setSelection(0)

-				})

-		

-				statusTextListener( closure: { event |

-					status.setText(event.text)	

-				})

-				

-			}

-			browser.setUrl( "http://feeds.codehaus.org/" )

-			status = label( style:"none", text:"" ) {

-				gridData( style:"fill_horizontal", horizontalSpan:2) 

-			}

-		

-			progressBar = progressBar () {

-				gridData( horizontalAlignment:"end" )

-			}

-				

-        }

-        

-//		browser.setUrl( "http://feeds.codehaus.org/" )

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-			

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/FormDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/FormDemo.groovy
deleted file mode 100644
index cbd08d4..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/FormDemo.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-package groovy.swt.examples

-

-import groovy.jface.JFaceBuilder

-

-class ApplicationDemo {

-    @Property  mainapp

-    

-    void run() {

-        def jface = new JFaceBuilder()

-

-        mainapp = jface.applicationWindow( title:"The forms demo", size:[700,800], location:[0,0] ) { 	

-         	gridLayout ( numColumns:2 )

-			form( text:"Hello, Eclipse Forms" ) {

-				gridData( style:"fill_both" )

-				tableWrapLayout()

-

-				formSection( text:"section1", description:"description of section1", style:"description, twistie" ) {

-					tableWrapData( style:"fill" )

-					

-					expansionListener( type:"expansionStateChanging", closure: { println "expansionStateChanging ... " + it } )

-					expansionListener( type:"expansionStateChanged", closure: { println "expansionStateChanged ... " + it } )

-					

-					def htmlText = "<form>"

-					htmlText += "<li>list item</li>"

-					htmlText += "<p>this html code with an url: http://groovy.codehaus.org</p>"

-					htmlText += "<li style=\"text\" value=\"1.\">list item 2</li>"

-			        htmlText += "<li style=\"text\" value=\"2.\">list item 3</li>"

-			        htmlText += "</form>"

-					

-					formFormattedText( text:htmlText, parseTags:true, expandURLs:true )					

-					

-					formButton ( text:"This is radiobutton1", style:"radio" ) 

-					formButton ( text:"This is radiobutton2", style:"radio" ) 

-					

-					formButton ( text:"This is a ARROW button", style:"arrow" ) {

-						onEvent(type:"Selection", closure:{ println "stop selecting me !!!" }) 

-					}	

-					formButton ( text:"This is a PUSH button", style:"push" ) {

-	        			onEvent(type:"Selection", closure:{ println "stop pushing me !!!" }) 

-	        		}

-					formButton ( text:"This is a TOGGLE button", style:"TOGGLE" ) {

-						onEvent(type:"Selection", closure:{ println it.event }) 

-					}

-					

-				}

-				

-				formSection( text:"section2", description:"description of section2", style:"description, twistie" ) {

-					tableWrapData( style:"fill" )

-					formLabel( text:"This is a label in section 2" )

-					formExpandableComposite( text:"formExpandableComposite" )

-				}

-

-				formSection( text:"section3", description:"description of section3", style:"description, twistie" ) {

-					tableWrapData( style:"fill" )

-					formLabel( text:"Below me is a tree" )

-	       			formTree()

-				}

-				

-				formSeparator( style:"separator, horizontal" ) {

-					tableWrapData( style:"fill" )

-				}

-				

-				formButton( text:"This is a formButton" )

-				

-       			formCompositeSeparator()

-								

-				formHyperlink( text:"this is a hyperlink" ) {

-					hyperlinkListener( type:"hyperlinkUpdate", closure: { println "hyperlinkUpdate ... " + it } )

-					hyperlinkListener( type:"linkEntered", closure: { println "linkEntered ... " + it } )

-					hyperlinkListener( type:"linkExited", closure: { println "linkExited ... " + it } )

-					hyperlinkListener( type:"linkActivated", closure: { println "linkActivated ... " + it } )

-				}

-       			

-       			formLabel( text:"This is a formLabel, folowed by a formTable" )

-       			formTable() {

-	       			tableWrapData( style:"fill" )

-       			}

-     

-     			

-       			

-       			// NOT FULLY IMPLEMENTED YET:

-       			// formImageHyperlink( text:"formImageHyperlink" )

-       			// formPageBook( text:"formPageBook" )

-       			

-			}

-			

-			form( text:"hello formScrolledForm" ) {

-				gridData( style:"fill_both" )

-				formLabel( text:"my parent is a scrolledForm" )

-				formButton( text:"formButton" )

-			}

-		}

-		

-		mainapp.getShell().pack()

-		mainapp.open()

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/GuiBuilderDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/GuiBuilderDemo.groovy
deleted file mode 100644
index 25450e7..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/GuiBuilderDemo.groovy
+++ /dev/null
@@ -1,66 +0,0 @@
-package groovy.swt.guibuilder
-
-import groovy.swt.guibuilder.ApplicationGuiBuilder
-
-class ApplicationGuiDemo {
-    @Property comp
-    @Property builder
-    @Property mainapp
-    @Property guiBuilder
-    @Property comp1
-    
-    def main( args ) {
-
-        mainapp = guiBuilder.applicationWindow( title:"The ApplicationGuiDemo", size:[700,400] ) { 
-            fillLayout( ) 
-            
-            menuManager( text:"Screens" ) {
-                action( text:"Screen1", closure:{ 
-                    guiBuilder.runScript( src:"Screen1.groovy", parent:mainapp, rebuild:true )
-                })
-                action( text:"Screen2", closure:{ 
-                    guiBuilder.runScript( src:"Screen2.groovy", parent:mainapp, rebuild:true )
-                })
-            }
-                
-            toolBar( style:"horizontal" ){
-                toolItem( text:"Blue" ) {
-                    onEvent( type:"Selection", closure:{
-                        guiBuilder.rebuild( parent:comp1, closure:{ 
-                            guiBuilder.composite( it ) {
-                                fillLayout()
-                                label( text:"This is fresh new blue label ...", background:[0, 0, 255] )
-                            }
-                        })
-                    })
-                }               
-                
-                toolItem( text:"Red" ) {
-                    onEvent( type:"Selection", closure:{
-                        guiBuilder.rebuild( parent:comp1, closure:{ 
-                            guiBuilder.composite( it ) {
-                                fillLayout()
-                                label( text:"This is fresh new red label ...", background:[255, 0, 0] )
-                            }
-                        })
-                    })
-                }               
-                        
-            }           
-        
-            composite() {
-                
-                fillLayout() 
-                
-                comp1 = composite() {
-                    fillLayout()
-                    label( text:"This is green label", background:[0, 255, 0]  )
-                }
-            }
-            
-        }
-        
-        mainapp.MenuBarManager.updateAll(true)
-        mainapp.open()
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunAwtSwtDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunAwtSwtDemo.java
deleted file mode 100644
index 84e9e54..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunAwtSwtDemo.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Created on Apr 19, 2004
- *  
- */
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> $Id$
- */
-public class RunAwtSwtDemo {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoBrowser demo = new RunDemoBrowser();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/AwtSwtDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-//    public static void main(String[] args) {
-//        Display display = new Display();
-//        Shell shell = new Shell(display);
-//        Composite locationComp = new Composite(shell, SWT.DEFAULT);
-//        shell.setLayout(new FillLayout());
-//        
-//        java.awt.Frame locationFrame = SWT_AWT.new_Frame(locationComp);
-//        
-//        locationFrame.add(new JTree());
-//        
-//        shell.open();
-//        while (!shell.isDisposed()) {
-//            if (!display.readAndDispatch()) display.sleep();
-//        }
-//        display.dispose();
-//        
-//    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoBrowser.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoBrowser.java
deleted file mode 100644
index 123b88d..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoBrowser.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoBrowser extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoBrowser demo = new RunDemoBrowser();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/BrowserDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTableTree.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTableTree.java
deleted file mode 100644
index 3484fa8..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTableTree.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoTableTree extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoTableTree demo = new RunDemoTableTree();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/TableTreeDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTree.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTree.java
deleted file mode 100644
index 7206371..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunDemoTree.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDemoTree extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoTree demo = new RunDemoTree();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/TreeDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunFormDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunFormDemo.java
deleted file mode 100644
index d55f2d6..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunFormDemo.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunFormDemo extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunFormDemo demo = new RunFormDemo();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/FormDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunSashFormDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunSashFormDemo.java
deleted file mode 100644
index 34f6a7e..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunSashFormDemo.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunSashFormDemo extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunSashFormDemo demo = new RunSashFormDemo();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/SashFormDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTabDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTabDemo.java
deleted file mode 100644
index 90b2c2c..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTabDemo.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Created on Apr 19, 2004
- *  
- */
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class RunTabDemo {
-    
-    public static void main(String[] args) throws Exception {
-        RunDemoBrowser demo = new RunDemoBrowser();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/TabDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTrayDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTrayDemo.java
deleted file mode 100644
index 50a5509..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/RunTrayDemo.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunTrayDemo extends SwtTest {
-    
-    public static void main(String[] args) throws Exception {
-        RunTrayDemo demo = new RunTrayDemo();
-        GroovyObject object = demo.compile("src/examples/groovy/swt/TrayDemo.groovy");
-        object.invokeMethod("run", null);
-    }
-    
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/SashFormDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/SashFormDemo.groovy
deleted file mode 100644
index 957e8fd..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/SashFormDemo.groovy
+++ /dev/null
@@ -1,54 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-import org.eclipse.swt.layout.FormAttachment

-import org.eclipse.swt.graphics.Rectangle

-

-/*

-* java version: http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-swt-home/snippits/snippet109.html

-*/

-

-class SwtDemo {

-    @Property shell    

-    @Property sashForm1    

-    

-    void run() {

-        def builder = new SwtBuilder()

-        shell = builder.shell ( text:'The SashForm Demo' ) {

-        	fillLayout()

-        

-       		sashForm1 = sashForm( style:"horizontal" ) {

-       			fillLayout()

-       			

-       			composite( style:"none" ) {

-	       			fillLayout()

-	       			label( text:"Label in pane 1" )

-       			}

-    

-       			composite( style:"none" ) {

-	       			fillLayout()

-	       			button( text:"Button in pane2", style:"push" )

-       			}

-    

-       			composite( style:"none" ) {

-       				fillLayout()

-	       			label( text:"Label in pane3" )

-       			}

-       		}

-       		

-       		sashForm1.weights = [30,40,30]

-

-       	}	

-	

-

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-				

-	}

-}

-

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen1.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen1.groovy
deleted file mode 100644
index 273b036..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen1.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.swt.guibuilder
-
-class Screen1 extends Script {
-        
-    def run() {     
-		guiBuilder.composite {
-			fillLayout()
-			
-			group( text:"This is Screen1.groovy" ) {
-				gridLayout()
-				button( text:"the hardest", background:[0, 255, 255] )
-				button( text:"button", background:[0, 255, 255] )
-				button( text:"to button", background:[0, 255, 255] )
-			}
-		}
-	}
-	
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen2.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen2.groovy
deleted file mode 100644
index a1407e8..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/Screen2.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt.guibuilder
-
-class Screen2 extends Script {
-        
-    def run() {
-		guiBuilder.composite {
-			fillLayout( type:"vertical")
-			group( text:"This is Screen2.groovy", background:[255, 255, 255] ) {
-				fillLayout( type:"vertical")
-		 		label( text:"A big red label", background:[204, 0, 0] ) 
-				label( text:"I can barelly read this", foreground:[0,200,0] )  
-				label( text:"It sure looks like the dutch flag", foreground:[0,0,150], background:[0, 0, 153] )
-			}
-		}
-    }
-	
-}
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/TabDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/TabDemo.groovy
deleted file mode 100644
index 8569f59..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/TabDemo.groovy
+++ /dev/null
@@ -1,52 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-

-

-class TabDemo {

-    @Property swt

-    

-    void run() {

-        swt = new SwtBuilder()

-   		

-        def shell = swt.shell ( text:'The Tab Demo', size:[500,400] ) {

-         	gridLayout()

-

-			cTabFolder( style:"flat" ) {

-				gridData( style:"fill_both" )

-				cTabItem( style:"none", text:"Item1" ) {

-					text( style:"border, multi", text:"Content for Item1" ) 

-				}

-				cTabItem( style:"none", text:"Item2" ) {

-					text( style:"border, multi", text:"Content for Item2" ) 

-				}

-				cTabItem( style:"none", text:"Item3" ) {

-					text( style:"border, multi", text:"Content for Item3" ) 

-				}

-			}

-			

-			tabFolder( style:"none" ) {

-				gridData( style:"fill_both" )

-				tabItem( style:"none", text:"Item4" ) {

-					text( style:"border, multi", text:"Content for Item4" ) 

-				}

-				tabItem( style:"none", text:"Item5" ) {

-					text( style:"border, multi", text:"Content for Item5" ) 

-				}

-				tabItem( style:"none", text:"Item6" ) {

-					text( style:"border, multi", text:"Content for Item6" ) 

-				}

-			}

-         	

-        }

-        

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-			

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/TableTreeDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/TableTreeDemo.groovy
deleted file mode 100644
index 2cd491c..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/TableTreeDemo.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-

-class TableTreeDemo {

-    @Property swt

-        

-    void run() {

-        swt = new SwtBuilder()

-        

-        def shell = swt.shell ( text:'The TableTree Test1', location:[100,100], size:[700,600] ) {

-         	gridLayout(numColumns:3) 

-         	

-         	tableTree( toolTipText:"This is a table tree!", style:"multi, full_selection" ) {  

-			

-				gridData( style:"fill_both" ) 

-				

-				tableTreeItem ( text:"root1" )  {

-						tableTreeItem ( text:"child 1-1" )  

-						tableTreeItem ( text:"child 1-2" )  								

-						tableTreeItem ( text:"child 1-3" )  								

-				}

-

-				tableTreeItem ( text:"root2" )  {

-						tableTreeItem ( text:"child 2-1" )  

-						tableTreeItem ( text:"child 2-2" )  								

-						tableTreeItem ( text:"child 2-3" )  								

-				}

-				

-			}

-		}

-        

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-			

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/TrayDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/TrayDemo.groovy
deleted file mode 100644
index 50db1cf..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/TrayDemo.groovy
+++ /dev/null
@@ -1,52 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-

-class TrayDemo {

-    @Property swt

-        

-    void run() {

-        swt = new SwtBuilder()

-        

-        def shell = swt.shell ( text:'The tray Demo' ) {

-         	

-         	def trayMenu = menu {

-         		menuItem( text:"menuItem1" )

-         		menuItem( text:"menuItem2" )

-         	}

-         	

-         	tray() {

-	         	

-         		trayItem( text:"trayItem1" ) {

-	         		image( src:"src/test/groovy/swt/groovy-logo.png" ) 

-	         		

-	         		onEvent( type:"Selection", closure:{

-	         			println "Selection event ..."

-	         		})

-	         		onEvent( type:"Hide", closure:{

-	         			println "Hide event ..."

-	         		})

-	         		onEvent( type:"DefaultSelection", closure:{

-	         			println "DefaultSelection event ..."

-	         		})

-	         		onEvent( type:"Show", closure:{

-	         			println "Show event ..."

-	         		})

-	         		onEvent( type:"MenuDetect", closure:{

-	         			println "MenuDetect event ..."

-	         			trayMenu.visible = true

-	         		})

-         		}

-         	}

-        }

-        

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-			

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/TreeDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/TreeDemo.groovy
deleted file mode 100644
index 3deb9d1..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/TreeDemo.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-package groovy.swt.examples

-

-import groovy.swt.SwtBuilder

-

-class SwtDemo {

-    @Property swt

-        

-    void run() {

-        swt = new SwtBuilder()

-        

-        def shell = swt.shell ( text:'The Swt Demo #1', location:[100,100], size:[700,600] ) {

-         	gridLayout(numColumns:3) 

- 

-			tree( toolTipText:"This is a tree!", style:"multi" ) {

-			

-				gridData( style:"fill_both" )

-			

-				treeItem( text:"A" ) {

-					treeItem( text:"A/A" )

-					treeItem( text:"A/B" )

-					treeItem( text:"A/C" )

-				}

-				

-				treeItem( text:"B" ) {

-					treeItem( text:"B/A" )

-					treeItem( text:"B/B" )

-					treeItem( text:"B/C" )

-				}

-						

-				menu( style:"pop_up" ) {

-					menuItem( text:"do something!" )

-					menuItem( text:"do something else" )

-				}

-				

-			}

-		

-        }

-        

-		shell.open()

-	

-		while(! shell.isDisposed()) { 

-			if (! shell.display.readAndDispatch()) {

-				shell.display.sleep();

-			}

-		}

-

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/GuiBuilderDemo.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/GuiBuilderDemo.groovy
deleted file mode 100644
index 74dde02..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/GuiBuilderDemo.groovy
+++ /dev/null
@@ -1,66 +0,0 @@
-package groovy.swt.guibuilder

-

-import groovy.swt.guibuilder.ApplicationGuiBuilder

-

-class ApplicationGuiDemo {

-    property comp

-	property builder

-	property mainapp

-	property guiBuilder

-	property comp1

-    

-    main( args ) {

-

-		mainapp = guiBuilder.applicationWindow( title:"The ApplicationGuiDemo", size:[700,400] ) { 

-			fillLayout( ) 

-			

-			menuManager( text:"Screens" ) {

-				action( text:"Screen1", closure:{ 

-					guiBuilder.runScript( src:"Screen1.groovy", parent:mainapp, rebuild:true )

-				})

-				action( text:"Screen2", closure:{ 

-					guiBuilder.runScript( src:"Screen2.groovy", parent:mainapp, rebuild:true )

-				})

-			}

-				

-			toolBar( style:"horizontal" ){

-				toolItem( text:"Blue" ) {

-					onEvent( type:"Selection", closure:{

-						guiBuilder.rebuild( parent:comp1, closure:{ 

-							guiBuilder.composite( it ) {

-								fillLayout()

-								label( text:"This is fresh new blue label ...", background:[0, 0, 255] )

-							}

-						})

-					})

-				}				

-				

-				toolItem( text:"Red" ) {

-					onEvent( type:"Selection", closure:{

-						guiBuilder.rebuild( parent:comp1, closure:{ 

-							guiBuilder.composite( it ) {

-								fillLayout()

-								label( text:"This is fresh new red label ...", background:[255, 0, 0] )

-							}

-						})

-					})

-				}				

-						

-			}			

-		

-			composite() {

-				

-				fillLayout() 

-				

-				comp1 = composite() {

-					fillLayout()

-					label( text:"This is green label", background:[0, 255, 0]  )

-				}

-			}

-			

-		}

-		

-		mainapp.MenuBarManager.updateAll(true)

-		mainapp.open()

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/RunGuiBuilderDemo.java b/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/RunGuiBuilderDemo.java
deleted file mode 100644
index 721a05d..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/RunGuiBuilderDemo.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package groovy.swt.guibuilder;
-
-import groovy.lang.Binding;
-import groovy.util.GroovyScriptEngine;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunGuiBuilderDemo {
-
-    public static void main(String[] args) throws Exception {
-        String basePath = "src/examples/groovy/swt/guibuilder";
-        GroovyScriptEngine scriptEngine = new GroovyScriptEngine(basePath);
-
-        Binding binding = new Binding();
-        ApplicationGuiBuilder guiBuilder = new ApplicationGuiBuilder(basePath);
-        binding.setVariable("guiBuilder", guiBuilder);
-
-        scriptEngine.run("GuiBuilderDemo.groovy", binding);
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen1.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen1.groovy
deleted file mode 100644
index 9efbc45..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen1.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-package groovy.swt.guibuilder

-

-class Screen1 extends Script {

-        

-    run() {     

-		guiBuilder.composite {

-			fillLayout()

-			

-			group( text:"This is Screen1.groovy" ) {

-				gridLayout()

-				button( text:"the hardest", background:[0, 255, 255] )

-				button( text:"button", background:[0, 255, 255] )

-				button( text:"to button", background:[0, 255, 255] )

-			}

-		}

-	}

-	

-}

diff --git a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen2.groovy b/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen2.groovy
deleted file mode 100644
index c928efe..0000000
--- a/groovy/modules/groovy-swt/src/examples/groovy/swt/guibuilder/Screen2.groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-package groovy.swt.guibuilder

-

-class Screen2 extends Script {

-        

-    run() {

-		guiBuilder.composite {

-			fillLayout( type:"vertical")

-			group( text:"This is Screen2.groovy", background:[255, 255, 255] ) {

-				fillLayout( type:"vertical")

-		 		label( text:"A big red label", background:[204, 0, 0] ) 

-				label( text:"I can barelly read this", foreground:[0,200,0] )  

-				label( text:"It sure looks like the dutch flag", foreground:[0,0,150], background:[0, 0, 153] )

-			}

-		}

-    }

-	

-}

diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/JFaceBuilder.java b/groovy/modules/groovy-swt/src/main/groovy/jface/JFaceBuilder.java
deleted file mode 100644
index d044392..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/JFaceBuilder.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Created on Feb 25, 2004
- *  
- */
-package groovy.jface;
-
-import groovy.jface.factory.ContributionManagerFactory;
-import groovy.jface.factory.DoubleClickListenerFactory;
-import groovy.jface.factory.MenuManagerFactory;
-import groovy.jface.factory.PreferencesDialogFactory;
-import groovy.jface.factory.PreferencesFieldEditorFactory;
-import groovy.jface.factory.PreferencesPageFactory;
-import groovy.jface.factory.SelectionChangedListenerFactory;
-import groovy.jface.factory.ToolBarManagerFactory;
-import groovy.jface.factory.ViewerFactory;
-import groovy.jface.factory.WindowFactory;
-import groovy.jface.factory.WizardDialogFactory;
-import groovy.jface.factory.WizardPageFactory;
-import groovy.jface.impl.ActionImpl;
-import groovy.jface.impl.ApplicationWindowImpl;
-import groovy.swt.SwtBuilder;
-import groovy.swt.factory.ImageFactory;
-
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.preference.BooleanFieldEditor;
-import org.eclipse.jface.preference.ColorFieldEditor;
-import org.eclipse.jface.preference.DirectoryFieldEditor;
-import org.eclipse.jface.preference.FileFieldEditor;
-import org.eclipse.jface.preference.FontFieldEditor;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.preference.StringFieldEditor;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.TableTreeViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class JFaceBuilder extends SwtBuilder {
-
-    protected void registerWidgets() {
-        super.registerWidgets();
-
-        // Viewer
-        registerFactory("tableViewer", new ViewerFactory(TableViewer.class));
-        registerFactory("tableTreeViewer", new ViewerFactory(TableTreeViewer.class));
-        registerFactory("treeViewer", new ViewerFactory(TreeViewer.class));
-        registerFactory("checkboxTreeViewer", new ViewerFactory(CheckboxTreeViewer.class));
-
-        // Event
-        registerFactory("doubleClickListener", new DoubleClickListenerFactory());
-        registerFactory("selectionChangedListener", new SelectionChangedListenerFactory());
-
-        // Window
-        registerFactory("applicationWindow", new WindowFactory(ApplicationWindowImpl.class));
-        //        registerFactory("window", new WindowFactory(
-        //                WindowImpl.class));
-
-        // ContributionManager
-        registerFactory("menuManager", new MenuManagerFactory());
-        registerFactory("toolBarManager", new ToolBarManagerFactory());
-
-        // Action tags
-        registerFactory("action", new ContributionManagerFactory(ActionImpl.class));
-
-        // ContributionItem
-        registerFactory("separator", new ContributionManagerFactory(Separator.class));
-
-        // Wizard
-        registerFactory("wizardDialog", new WizardDialogFactory());
-        registerFactory("wizardPage", new WizardPageFactory());
-
-        // Preference
-        registerFactory("preferenceDialog", new PreferencesDialogFactory());
-        registerFactory("preferencePage", new PreferencesPageFactory());
-        registerFactory("booleanFieldEditor", new PreferencesFieldEditorFactory(
-                BooleanFieldEditor.class));
-        registerFactory("colorFieldEditor", new PreferencesFieldEditorFactory(
-                ColorFieldEditor.class));
-        registerFactory("directoryFieldEditor", new PreferencesFieldEditorFactory(
-                DirectoryFieldEditor.class));
-        registerFactory("fileFieldEditor", new PreferencesFieldEditorFactory(FileFieldEditor.class));
-        registerFactory("fontFieldEditor", new PreferencesFieldEditorFactory(FontFieldEditor.class));
-        registerFactory("integerFieldEditor", new PreferencesFieldEditorFactory(
-                IntegerFieldEditor.class));
-        //registerBeanFactory("radioGroupFieldEditor",
-        // RadioGroupFieldEditor.class);
-        //registerBeanFactory("stringButtonFieldEditor",
-        // StringButtonFieldEditor.class);
-        registerFactory("stringFieldEditor", new PreferencesFieldEditorFactory(
-                StringFieldEditor.class));
-
-        // other
-        registerFactory("image", new ImageFactory());
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ActionImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ActionImpl.java
deleted file mode 100644
index 772604e..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ActionImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.widgets.Event;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ActionImpl extends Action implements ClosureSupport {
-
-    private Closure closure;
-
-    private Event event;
-
-    public void runWithEvent(Event event) {
-        if (closure == null) {
-            throw new NullPointerException("No closure has been configured for this Listener");
-        }
-        this.event = event;
-
-        closure.call(event);
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    public Event getEvent() {
-        return event;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ContributionManagerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ContributionManagerFactory.java
deleted file mode 100644
index 7a3c73c..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ContributionManagerFactory.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.swt.factory.SwtFactory;
-import groovy.swt.factory.WidgetFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.IContributionManager;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ContributionManagerFactory extends WidgetFactory implements SwtFactory {
-
-    public ContributionManagerFactory(Class beanClass) {
-        super(beanClass);
-    }
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-
-        Object bean = createWidget(parent);
-
-        setBeanProperties(bean, properties);
-
-        if (parent instanceof IContributionManager) {
-            IContributionManager contributionManager = (IContributionManager) parent;
-
-            if (bean instanceof IAction) {
-                contributionManager.add((IAction) bean);
-            }
-
-            if (bean instanceof IContributionItem) {
-                contributionManager.add((IContributionItem) bean);
-            }
-        }
-        return bean;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/DoubleClickListenerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/DoubleClickListenerFactory.java
deleted file mode 100644
index 7424188..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/DoubleClickListenerFactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Created on Feb 25, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-import java.util.Map;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.StructuredViewer;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class DoubleClickListenerFactory extends AbstractSwtFactory implements SwtFactory,
-        IDoubleClickListener, ClosureSupport {
-    
-    private Closure closure;
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        if (parent instanceof StructuredViewer) {
-            StructuredViewer viewer = (StructuredViewer) parent;
-            viewer.addDoubleClickListener(this);
-        } else {
-            throw new InvalidParentException("structuredViewer");
-        }
-        return this;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#getClosure()
-     */
-    public Closure getClosure() {
-        return closure;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#setClosure(groovy.lang.Closure)
-     */
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    /*
-     * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
-     */
-    public void doubleClick(DoubleClickEvent event) {
-        closure.call(event);
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/MenuManagerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/MenuManagerFactory.java
deleted file mode 100644
index 72e2959..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/MenuManagerFactory.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.lang.MissingPropertyException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-import java.util.Map;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.window.ApplicationWindow;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class MenuManagerFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-    throws GroovyException {
-        
-        String text = (String) properties.remove("text");
-        if (text == null) {
-            throw new MissingPropertyException("text", 
-            String.class);
-        }
-        
-        MenuManager menuManager = new MenuManager(text);
-        if (parent instanceof ApplicationWindow) {
-            ApplicationWindow window = (ApplicationWindow) parent;
-            if (window != null) {
-                window.getMenuBarManager().add(menuManager);
-            }
-        }
-        
-        return menuManager;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesDialogFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesDialogFactory.java
deleted file mode 100644
index 06764b7..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesDialogFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.jface.impl.PreferenceDialogImpl;
-import groovy.swt.InvalidParentException;
-import groovy.swt.SwtUtils;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class PreferencesDialogFactory extends AbstractSwtFactory implements
-        SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-        Shell parentShell = SwtUtils.getParentShell(parent);
-        if (parent != null) {
-            PreferenceManager pm = new PreferenceManager();
-            return new PreferenceDialogImpl(parentShell, pm);
-        } else {
-            throw new InvalidParentException("applicationWindow or shell");
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesFieldEditorFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesFieldEditorFactory.java
deleted file mode 100644
index d33429c..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesFieldEditorFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.jface.impl.PreferencePageFieldEditorImpl;
-import groovy.lang.MissingPropertyException;
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.preference.FieldEditor;
-import org.eclipse.jface.preference.PreferencePage;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class PreferencesFieldEditorFactory extends AbstractSwtFactory implements
-        SwtFactory {
-
-    private Class beanClass;
-
-    public PreferencesFieldEditorFactory(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-
-        if (beanClass == null) { throw new GroovyException(
-                "No Class available to create the FieldEditor"); }
-
-        // check location
-        if (!(parent instanceof PreferencePage)) { throw new InvalidParentException(
-                "preferencePage"); }
-
-        String name = (String) properties.get("propertyName");
-        if (name == null) { throw new MissingPropertyException("propertyName",
-                FieldEditor.class); }
-
-        String labelText = (String) properties.get("title");
-        if (labelText == null) { throw new MissingPropertyException("title",
-                FieldEditor.class); }
-
-        PreferencePageFieldEditorImpl preferencePageImpl = (PreferencePageFieldEditorImpl) parent;
-        preferencePageImpl.addFieldCreator(beanClass, name, labelText);
-
-        return preferencePageImpl;
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesPageFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesPageFactory.java
deleted file mode 100644
index 3a4cf6f..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/PreferencesPageFactory.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.jface.impl.PreferenceDialogImpl;
-import groovy.jface.impl.PreferencePageFieldEditorImpl;
-import groovy.lang.MissingPropertyException;
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.io.IOException;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceNode;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.preference.PreferenceStore;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class PreferencesPageFactory extends AbstractSwtFactory implements
-        SwtFactory {
-
-    /** The Log to which logging calls will be made. */
-    private static final Log log = LogFactory
-            .getLog(PreferencesPageFactory.class);
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *           java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-
-        // check location
-        if (!(parent instanceof PreferenceDialog)) { throw new InvalidParentException(
-                "preferenceDialog"); }
-
-        PreferenceDialogImpl preferenceDialogImpl = (PreferenceDialogImpl) parent;
-
-        String filename = (String) properties.remove("filename");
-        if (filename == null) { throw new MissingPropertyException("filename",
-                PreferencePage.class); }
-
-        String title = (String) properties.remove("title");
-        if (title == null) { throw new MissingPropertyException("title",
-                PreferencePage.class); }
-
-        // build new PreferenceNode with same title as the PreferencePage
-        PreferenceNode node = new PreferenceNode(title);
-
-        // build new PreferencePage
-        FieldEditorPreferencePage page = new PreferencePageFieldEditorImpl(
-                title);
-        PreferenceStore preferenceStore = new PreferenceStore(filename);
-        
-        try {
-            preferenceStore.load();
-        } catch (IOException e) {
-            log.error(e);
-        }
-        page.setPreferenceStore(preferenceStore);
-
-        // add node to PreferenceManager
-        node.setPage(page);
-        preferenceDialogImpl.getPreferenceManager().addToRoot(node);
-
-        return page;
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/SelectionChangedListenerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/SelectionChangedListenerFactory.java
deleted file mode 100644
index c91f2bf..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/SelectionChangedListenerFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Created on Feb 25, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.Viewer;
-
-/**
- * NOTE:	I have seen strnage behavior in combination with a CellModifier
- * 			In this case just use an onEvent Selection.  
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class SelectionChangedListenerFactory extends AbstractSwtFactory
-        implements SwtFactory, ISelectionChangedListener, ClosureSupport {
-
-    private Closure closure;
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *           java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-
-        if (parent instanceof Viewer) {
-            Viewer viewer = (Viewer) parent;
-            viewer.addSelectionChangedListener(this);
-        } else {
-            throw new InvalidParentException("viewer");
-        }
-        
-        return this; 
-    }
-
-    /*
-     * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
-     */
-    public void selectionChanged(SelectionChangedEvent event) {
-        closure.call(event);
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#getClosure()
-     */
-    public Closure getClosure() {
-        return closure;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#setClosure(groovy.lang.Closure)
-     */
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ToolBarManagerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ToolBarManagerFactory.java
deleted file mode 100644
index ef4ef28..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ToolBarManagerFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package groovy.jface.factory;
-
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.action.ToolBarManager;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.ui.forms.widgets.Form;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ToolBarManagerFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-
-        ToolBarManager toolBarManager = null;
-
-        if (parent instanceof Form) {
-            Form form = (Form) parent;
-            if (form != null) {
-                toolBarManager = (ToolBarManager) form.getToolBarManager();
-            }
-        }
-
-        if (parent instanceof ApplicationWindow) {
-            ApplicationWindow applicationWindow = (ApplicationWindow) parent;
-            if (applicationWindow != null) {
-                toolBarManager = (ToolBarManager) applicationWindow.getToolBarManager();
-            }
-        }
-
-        if (toolBarManager == null) {
-            throw new InvalidParentException("<form> or <applicationWindow>");
-        }
-
-        return toolBarManager;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ViewerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ViewerFactory.java
deleted file mode 100644
index a9bf9a0..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/ViewerFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.swt.SwtUtils;
-import groovy.swt.factory.SwtFactory;
-import groovy.swt.factory.WidgetFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.TableTreeViewer;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.TableTree;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.Tree;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ViewerFactory extends WidgetFactory implements SwtFactory {
-
-    /**
-     * @param beanClass
-     * @param style
-     */
-    public ViewerFactory(Class beanClass, int style) {
-        super(beanClass, style);
-    }
-
-    /**
-     * @param class1
-     */
-    public ViewerFactory(Class beanClass) {
-        super(beanClass);
-    }
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        Object bean;
-
-        String styleProperty = (String) properties.remove("style");
-        if (styleProperty != null) {
-            style = SwtUtils.parseStyle(SWT.class, styleProperty);
-        }
-
-        if (beanClass.equals(TableViewer.class) && (parent instanceof Table)) {
-            bean = new TableViewer((Table) parent, style);
-
-        } else if (beanClass.equals(TableTreeViewer.class) && (parent instanceof TableTree)) {
-            bean = new TableTreeViewer((TableTree) parent, style);
-
-        } else if (beanClass.equals(TreeViewer.class) && (parent instanceof Tree)) {
-            bean = new TreeViewer((Tree) parent, style);
-
-        } else if (beanClass.equals(CheckboxTreeViewer.class) && (parent instanceof Tree)) {
-            bean = new CheckboxTreeViewer((Tree) parent, style);
-
-        } else {
-            Object parentWidget = SwtUtils.getParentWidget(parent, properties);
-            bean = createWidget(parentWidget);
-        }
-
-        if (bean != null) {
-            setBeanProperties(bean, properties);
-        }
-
-        setControl(bean, parent);
-
-        return bean;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WindowFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WindowFactory.java
deleted file mode 100644
index 1f2d45d..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WindowFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.swt.InvalidParentException;
-import groovy.swt.convertor.PointConverter;
-import groovy.swt.factory.SwtFactory;
-import groovy.swt.factory.WidgetFactory;
-
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WindowFactory extends WidgetFactory implements SwtFactory {
-
-    /**
-     * @param beanClass
-     */
-    public WindowFactory(Class beanClass) {
-        super(beanClass);
-    }
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        if (parent == null){
-            parent = new Shell();
-        }
-        if (!(parent instanceof Shell)){
-            throw new InvalidParentException("shell");
-        }
-        
-        Window window = (Window) createWidget(parent);
-        if (window != null){
-            Shell shell = (Shell) parent;
-
-            // set title of Window
-            String title = (String) properties.remove("title");
-            if (title != null){
-                window.getShell().setText((String) title);
-            }
-
-            // set size of Window
-            List size = (List) properties.remove("size");
-            if (size != null){
-                Point point = PointConverter.getInstance().parse(size);
-                window.getShell().setSize(point);
-            }
-
-            // set location of Window
-            List location = (List) properties.remove("location");
-            if (location != null){
-                Point point = PointConverter.getInstance().parse(location);
-                window.getShell().setLocation(point);
-            }
-        }
-        setBeanProperties(window, properties);
-        return window;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardDialogFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardDialogFactory.java
deleted file mode 100644
index 249fef9..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardDialogFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.jface.impl.WizardDialogImpl;
-import groovy.jface.impl.WizardImpl;
-import groovy.swt.SwtUtils;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WizardDialogFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.factory.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        Shell parentShell = SwtUtils.getParentShell(parent);
-        Wizard wizard = new WizardImpl();
-        WizardDialog wizardDialog = new WizardDialogImpl(parentShell, wizard);
-        return wizardDialog;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardPageFactory.java b/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardPageFactory.java
deleted file mode 100644
index 89694cf..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/factory/WizardPageFactory.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *
- */
-package groovy.jface.factory;
-
-import groovy.jface.impl.WizardDialogImpl;
-import groovy.jface.impl.WizardPageImpl;
-import groovy.lang.MissingPropertyException;
-import groovy.swt.InvalidParentException;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.jface.wizard.WizardPage;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WizardPageFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.factory.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-    throws GroovyException {
-
-        // check location
-        if (!(parent instanceof WizardDialog)) {
-            throw new InvalidParentException("wizardDialog");
-        }
-        WizardDialogImpl wizardDialog = (WizardDialogImpl) parent;
-
-        // check for missing attributes
-        String title = (String) properties.get("title");
-        if (title == null) {
-            throw new MissingPropertyException("title", 
-            WizardPage.class);
-        }
-
-        // get WizardPageImpl
-        WizardPageImpl page = new WizardPageImpl(title);
-        setBeanProperties(page, properties);
-
-        // get Wizard
-        WizardDialogImpl dialog = (WizardDialogImpl) parent;
-        Wizard wizard = (Wizard) dialog.getWizard();
-
-        // add WizardPage to the Wizard
-        wizard.addPage(page);
-        return page;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ActionImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ActionImpl.java
deleted file mode 100644
index 4d5c8a7..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ActionImpl.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.jface.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-import org.eclipse.jface.action.Action;
-import org.eclipse.swt.widgets.Event;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ActionImpl extends Action implements ClosureSupport {
-    private Closure closure;
-    private Event event;
-
-    public void runWithEvent(Event event) {
-        if (closure == null) {
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        this.event = event;
-        closure.call(this);
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    public Event getEvent() {
-        return event;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ApplicationWindowImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ApplicationWindowImpl.java
deleted file mode 100644
index 0fcdc4a..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/ApplicationWindowImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package groovy.jface.impl;
-
-import org.eclipse.jface.action.StatusLineManager;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * This is the default implementation for a ApplicationWindow
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster</a>
- */
-public class ApplicationWindowImpl extends ApplicationWindow {
-
-	/**
-	 * @param shell
-	 */
-	public ApplicationWindowImpl(Shell parentShell) {
-		super(null);
-
-		// default at all
-		addMenuBar();
-		addStatusLine();
-		addToolBar(SWT.FLAT | SWT.WRAP);
-		setBlockOnOpen(true);
-
-		// create window
-		create();
-	}
-
-	/*
-	 * override to make public
-	 * 
-	 * @see org.eclipse.jface.window.Window#getContents()
-	 */
-	public Control getContents() {
-		return super.getContents();
-	}
-
-	/*
-	 * override to make public
-	 * 
-	 * @see org.eclipse.jface.window.ApplicationWindow#getStatusLineManager()
-	 */
-	public StatusLineManager getStatusLineManager() {
-		return super.getStatusLineManager();
-	}
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferenceDialogImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferenceDialogImpl.java
deleted file mode 100644
index d46e7cf..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferenceDialogImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *  
- */
-package groovy.jface.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class PreferenceDialogImpl extends PreferenceDialog implements
-        ClosureSupport {
-
-    private Closure closure;
-
-    public PreferenceDialogImpl(Shell shell, PreferenceManager pm) {
-        super(shell, pm);
-    }
-
-    protected void handleSave() {
-        super.handleSave();
-        closure.call();
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#getClosure()
-     */
-    public Closure getClosure() {
-        return closure;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#setClosure(groovy.lang.Closure)
-     */
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferencePageFieldEditorImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferencePageFieldEditorImpl.java
deleted file mode 100644
index 90d3588..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/PreferencePageFieldEditorImpl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *
- */
-package groovy.jface.impl;
-
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jface.preference.FieldEditor;
-import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class PreferencePageFieldEditorImpl extends FieldEditorPreferencePage {
-
-    public class FieldEditorCreator {
-
-        private Class beanClass;
-
-        private String propertyName;
-
-        private String title;
-
-        public FieldEditorCreator(Class beanClass, String propertyName,
-                String title) {
-            this.beanClass = beanClass;
-            this.propertyName = propertyName;
-            this.title = title;
-        }
-
-        public FieldEditor createField(Composite parent) {
-
-            FieldEditor fieldEditor = null;
-
-            try {
-                Class[] types = { String.class, String.class, Composite.class};
-                Constructor constructor = beanClass.getConstructor(types);
-                if (constructor != null) {
-                    Object[] arguments = { propertyName, title, parent};
-                    fieldEditor = (FieldEditor) constructor
-                            .newInstance(arguments);
-                }
-            } catch (Exception e) {
-            }
-
-            return fieldEditor;
-        }
-    }
-
-    private List creatorFieldsfields = new ArrayList();
-
-    public PreferencePageFieldEditorImpl(String title) {
-        super(title, FieldEditorPreferencePage.GRID);
-    }
-
-    public void addFieldCreator(Class beanClass, String propertyName,
-            String title) {
-        creatorFieldsfields.add(new FieldEditorCreator(beanClass, propertyName,
-                title));
-    }
-
-    protected void createFieldEditors() {
-        Iterator i = creatorFieldsfields.iterator();
-        while (i.hasNext()) {
-            FieldEditorCreator creator = (FieldEditorCreator) i.next();
-            FieldEditor fieldEditor = creator
-                    .createField(getFieldEditorParent());
-            addField(fieldEditor);
-        }
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardDialogImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardDialogImpl.java
deleted file mode 100644
index ad78f92..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardDialogImpl.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *
- */
-package groovy.jface.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * Provide a public method getWizard and provide access to parentShell
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WizardDialogImpl extends WizardDialog implements ClosureSupport {
-    private Closure closure;
-    private Shell parentShell;
-
-    public WizardDialogImpl(Shell parentShell, IWizard newWizard) {
-        super(parentShell, newWizard);
-        this.parentShell = parentShell;
-    }
-
-    public IWizard getWizard() {
-        return super.getWizard();
-    }
-
-    public Shell getParentShell() {
-        return parentShell;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#getClosure()
-     */
-    public Closure getClosure() {
-        return closure;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#setClosure(groovy.lang.Closure)
-     */
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardImpl.java
deleted file mode 100644
index 7dac1f8..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Created on Feb 20, 2004
- *
- */
-package groovy.jface.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.jface.wizard.Wizard;
-
-/**
- * Provides a Wizard implementation
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WizardImpl extends Wizard implements ClosureSupport{
-    private Closure closure;
-    public WizardImpl() {
-        super();
-        setNeedsProgressMonitor(true);
-    }
-
-    /* 
-     * TODO implements this
-     * 
-     * @see org.eclipse.jface.wizard.IWizard#performCancel()
-     */
-    public boolean performCancel() {
-        System.out.println("performCancel ...");
-        return true;
-    }
-
-    /* 
-     * TODO implements this
-     * 
-     * @see org.eclipse.jface.wizard.IWizard#performFinish()
-     */
-    public boolean performFinish() {
-        System.out.println("performFinish ...");
-        return true;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#getClosure()
-     */
-    public Closure getClosure() {
-        return closure;
-    }
-
-    /*
-     * @see groovy.swt.ClosureSupport#setClosure(groovy.lang.Closure)
-     */
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-    
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardPageImpl.java b/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardPageImpl.java
deleted file mode 100644
index 90be86e..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/jface/impl/WizardPageImpl.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Created on Feb 21, 2004
- *
- */
-package groovy.jface.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Implementation of a WizardPage method createControl is called on
- * Dialog.open()
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WizardPageImpl extends WizardPage implements ClosureSupport {
-    private Closure closure;
-
-    public WizardPageImpl(String title) {
-        super(title);
-    }
-
-    public void createControl(Composite parent) {
-        if (closure == null) {
-            throw new NullPointerException(
-            "No closure has been configured for this WizardPage");
-        }
-        Composite composite = (Composite) closure.call(parent);
-        setControl(composite);
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/ClosureSupport.java b/groovy/modules/groovy-swt/src/main/groovy/swt/ClosureSupport.java
deleted file mode 100644
index 22d8856..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/ClosureSupport.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *
- */
-package groovy.swt;
-
-import groovy.lang.Closure;
-
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public interface ClosureSupport {
-    public Closure getClosure();
-
-    public void setClosure(Closure closure);
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/CustomSwingBuilder.java b/groovy/modules/groovy-swt/src/main/groovy/swt/CustomSwingBuilder.java
deleted file mode 100644
index 04b663e..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/CustomSwingBuilder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on Dec 15, 2004
- *
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-package groovy.swt;
-
-import groovy.swing.SwingBuilder;
-
-/**
- * @author ckl
- *
- */
-public class CustomSwingBuilder extends SwingBuilder {
-
-    /* 
-     * override to make public
-     * 
-     * @see groovy.util.BuilderSupport#getCurrent()
-     */
-    public Object getCurrent() {
-        return super.getCurrent();
-    }
-
-    /*
-     * override to make public
-     *  
-     * @see groovy.util.BuilderSupport#setCurrent(java.lang.Object)
-     */
-    public void setCurrent(Object current) {
-        super.setCurrent(current);
-    }
-    
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidChildException.java b/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidChildException.java
deleted file mode 100644
index df53b76..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidChildException.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *
- */
-package groovy.swt;
-
-import org.codehaus.groovy.GroovyException;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class InvalidChildException extends GroovyException {
-
-    public InvalidChildException(String parent, String child) {
-        super("first child of " + parent + " should be " + child);
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidParentException.java b/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidParentException.java
deleted file mode 100644
index 9ec9691..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/InvalidParentException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *
- */
-package groovy.swt;
-
-import org.codehaus.groovy.GroovyException;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class InvalidParentException extends GroovyException {
-
-    /**
-     * @param message
-     */
-    public InvalidParentException(String property) {
-        super("parent should be: " + property);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/SwtBuilder.java b/groovy/modules/groovy-swt/src/main/groovy/swt/SwtBuilder.java
deleted file mode 100644
index 8e0f532..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/SwtBuilder.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *  
- */
-package groovy.swt;
-
-import groovy.lang.Closure;
-import groovy.swt.factory.AwtSwtFactory;
-import groovy.swt.factory.Fontfactory;
-import groovy.swt.factory.FormFactory;
-import groovy.swt.factory.FormLayoutDataFactory;
-import groovy.swt.factory.ImageFactory;
-import groovy.swt.factory.LayoutDataFactory;
-import groovy.swt.factory.LayoutFactory;
-import groovy.swt.factory.ListenerFactory;
-import groovy.swt.factory.SwtFactory;
-import groovy.swt.factory.TrayFactory;
-import groovy.swt.factory.WidgetFactory;
-import groovy.util.BuilderSupport;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.browser.LocationListener;
-import org.eclipse.swt.browser.ProgressListener;
-import org.eclipse.swt.browser.StatusTextListener;
-import org.eclipse.swt.custom.CBanner;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.custom.CTabFolder;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.custom.TableTree;
-import org.eclipse.swt.custom.TableTreeItem;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.layout.RowData;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Canvas;
-import org.eclipse.swt.widgets.Caret;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.CoolBar;
-import org.eclipse.swt.widgets.CoolItem;
-import org.eclipse.swt.widgets.Decorations;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.ProgressBar;
-import org.eclipse.swt.widgets.Sash;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Slider;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.eclipse.swt.widgets.Tracker;
-import org.eclipse.swt.widgets.TrayItem;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.forms.events.IExpansionListener;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.ColumnLayout;
-import org.eclipse.ui.forms.widgets.ColumnLayoutData;
-import org.eclipse.ui.forms.widgets.TableWrapData;
-import org.eclipse.ui.forms.widgets.TableWrapLayout;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class SwtBuilder extends BuilderSupport {
-
-    private Map factories = new HashMap();
-
-    private Logger log = Logger.getLogger(getClass().getName());
-
-    public SwtBuilder() {
-        registerWidgets();
-    }
-
-    /*
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object)
-     */
-    protected Object createNode(Object name) {
-        return createNode(name, Collections.EMPTY_MAP);
-    }
-
-    /* 
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object, java.util.Map, java.lang.Object)
-     */
-    protected Object createNode(Object name, Map attributes, Object value) {
-        return createNode(name, attributes);
-    }
-
-    /*
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object,
-     *      java.util.Map)
-     */
-    protected Object createNode(Object name, Map attributes) {
-
-        Closure closure = (Closure) attributes.get("closure");
-
-        Object widget = createWidget(name, attributes, getCurrent());
-
-        if (widget != null) {
-            if (widget instanceof ClosureSupport) {
-                if (closure != null) {
-                    ClosureSupport closureSupport = (ClosureSupport) widget;
-                    closureSupport.setClosure(closure);
-                }
-            }
-        }
-
-        return widget;
-    }
-
-    /**
-     * @param name
-     * @param attributes
-     * @return
-     */
-    protected Object createWidget(Object name, Map attributes, Object current) {
-        if (name.equals("doCall")) {
-            return current;
-        }
-
-        Object widget = null;
-        SwtFactory factory = (SwtFactory) factories.get(name);
-        if (factory != null) {
-            try {
-                widget = factory.newInstance(attributes, current);
-            } catch (Exception e) {
-                log.log(Level.WARNING, "Node " + name + " returned : " + e.toString());
-            }
-        } else {
-            log.log(Level.WARNING, "Could not find match for name: " + name);
-        }
-        return widget;
-    }
-
-    /*
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object,
-     *      java.lang.Object)
-     */
-    protected Object createNode(Object name, Object parent) {
-        return createWidget(name, Collections.EMPTY_MAP, parent);
-    }
-
-    protected void registerBeanFactory(String name, final Class beanClass) {
-        registerFactory(name, new WidgetFactory(beanClass));
-    }
-
-    protected void registerBeanFactory(String name, final Class beanClass, final int style) {
-        registerFactory(name, new WidgetFactory(beanClass, style));
-    }
-
-    protected void registerFactory(String name, SwtFactory factory) {
-        factories.put(name, factory);
-    }
-
-    protected void registerWidgets() {
-
-        // widgets
-        registerFactory("awtFrame", new AwtSwtFactory());
-        registerBeanFactory("button", Button.class, SWT.BORDER | SWT.PUSH | SWT.CENTER);
-        registerBeanFactory("canvas", Canvas.class);
-        registerBeanFactory("caret", Caret.class);
-        registerBeanFactory("combo", Combo.class, SWT.DROP_DOWN);
-        registerBeanFactory("composite", Composite.class);
-        registerBeanFactory("scrolledComposite", ScrolledComposite.class, SWT.H_SCROLL
-                | SWT.V_SCROLL);
-        registerBeanFactory("coolBar", CoolBar.class, SWT.VERTICAL);
-        registerBeanFactory("coolItem", CoolItem.class);
-        registerBeanFactory("decorations", Decorations.class);
-        registerFactory("font", new Fontfactory());
-        registerBeanFactory("group", Group.class);
-        registerBeanFactory("label", Label.class, SWT.HORIZONTAL | SWT.SHADOW_IN);
-        registerBeanFactory("list", List.class);
-		registerBeanFactory("link", Link.class);
-        registerBeanFactory("menu", Menu.class, SWT.DEFAULT);
-        //        registerMenuTag("menuBar", SWT.BAR);
-
-        registerBeanFactory("menuSeparator", MenuItem.class, SWT.SEPARATOR);
-        registerBeanFactory("menuItem", MenuItem.class);
-        registerBeanFactory("messageBox", MessageBox.class);
-        registerBeanFactory("progressBar", ProgressBar.class, SWT.HORIZONTAL);
-        registerBeanFactory("sash", Sash.class);
-        registerBeanFactory("scale", Scale.class);
-        registerBeanFactory("shell", Shell.class, SWT.BORDER | SWT.CLOSE | SWT.MIN | SWT.MAX
-                | SWT.RESIZE | SWT.TITLE);
-        registerBeanFactory("slider", Slider.class);
-        registerBeanFactory("tabFolder", TabFolder.class);
-        registerBeanFactory("tabItem", TabItem.class);
-        registerBeanFactory("table", Table.class, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
-        registerBeanFactory("tableColumn", TableColumn.class);
-        registerBeanFactory("tableItem", TableItem.class);
-        registerBeanFactory("text", Text.class);
-        registerBeanFactory("toolBar", ToolBar.class, SWT.VERTICAL);
-        registerBeanFactory("toolItem", ToolItem.class);
-        registerBeanFactory("tracker", Tracker.class);
-        registerFactory("tray", new TrayFactory());
-        registerBeanFactory("trayItem", TrayItem.class);
-        registerBeanFactory("tree", Tree.class, SWT.MULTI);
-        registerBeanFactory("treeItem", TreeItem.class);
-
-        // custom widgets
-        registerBeanFactory("cBanner", CBanner.class);
-        registerBeanFactory("cCombo", CCombo.class);
-        registerBeanFactory("cLabel", CLabel.class);
-        registerBeanFactory("cTabFolder", CTabFolder.class);
-        registerBeanFactory("cTabItem", CTabItem.class);
-        registerBeanFactory("sashForm", SashForm.class);
-        registerBeanFactory("tableTree", TableTree.class);
-        registerBeanFactory("tableTreeItem", TableTreeItem.class);
-
-        // layouts
-        registerFactory("fillLayout", new LayoutFactory(FillLayout.class));
-        registerFactory("gridLayout", new LayoutFactory(GridLayout.class));
-        registerFactory("rowLayout", new LayoutFactory(RowLayout.class));
-        registerFactory("formLayout", new LayoutFactory(FormLayout.class));
-
-        // layout data objects
-        registerFactory("gridData", new LayoutDataFactory(GridData.class));
-        registerFactory("rowData", new LayoutDataFactory(RowData.class));
-        registerFactory("formData", new FormLayoutDataFactory());
-
-        // dialogs
-        registerBeanFactory("colorDialog", ColorDialog.class);
-        registerBeanFactory("directoryDialog", DirectoryDialog.class);
-        registerBeanFactory("fileDialog", FileDialog.class);
-        registerBeanFactory("fontDialog", FontDialog.class);
-
-        // events
-        registerFactory("onEvent", new ListenerFactory(Listener.class));
-
-        // other tags
-        registerFactory("image", new ImageFactory());
-
-        // browser tags
-        registerBeanFactory("browser", Browser.class, SWT.NONE);
-        registerFactory("locationListener", new ListenerFactory(LocationListener.class));
-        registerFactory("progressListener", new ListenerFactory(ProgressListener.class));
-        registerFactory("statusTextListener", new ListenerFactory(StatusTextListener.class));
-
-        // forms api
-        registerFactory("form", new FormFactory("form"));
-        registerFactory("scrolledForm", new FormFactory("scrolledForm"));
-        registerFactory("formButton", new FormFactory("formButton"));
-        registerFactory("formColors", new FormFactory("formColors"));
-        registerFactory("formComposite", new FormFactory("formComposite"));
-        registerFactory("formCompositeSeparator", new FormFactory("formCompositeSeparator"));
-        registerFactory("formExpandableComposite", new FormFactory("formButton"));
-        registerFactory("formText", new FormFactory("formText"));
-        registerFactory("formHyperlink", new FormFactory("formHyperlink"));
-        registerFactory("formImageHyperlink", new FormFactory("formImageHyperlink"));
-        registerFactory("formLabel", new FormFactory("formLabel"));
-        registerFactory("formPageBook", new FormFactory("formPageBook"));
-        registerFactory("formPageBookPage", new FormFactory("formPageBookPage"));
-        registerFactory("formSection", new FormFactory("formSection"));
-        registerFactory("formSeparator", new FormFactory("formSeparator"));
-        registerFactory("formTable", new FormFactory("formTable"));
-        registerFactory("formToolkit", new FormFactory("formToolkit"));
-        registerFactory("formFormattedText", new FormFactory("formFormattedText"));
-        registerFactory("formTree", new FormFactory("formTree"));
-
-        // forms layout
-        registerFactory("tableWrapLayout", new LayoutFactory(TableWrapLayout.class));
-        registerFactory("tableWrapData", new LayoutDataFactory(TableWrapData.class));
-        registerFactory("columnLayout", new LayoutFactory(ColumnLayout.class));
-        registerFactory("columnLayoutData", new LayoutDataFactory(ColumnLayoutData.class));
-
-        // forms listeners
-        registerFactory("hyperlinkListener", new ListenerFactory(IHyperlinkListener.class));
-        registerFactory("expansionListener", new ListenerFactory(IExpansionListener.class));
-
-        // none eclipse widgets
-        // registerBeanFactory("tDateText", TDateText.class);
-        // registerBeanFactory("tCalendar", TCalendar.class);
-        // registerBeanFactory("textEditor", TextEditor.class);
-    }
-
-    /*
-     * @see groovy.util.BuilderSupport#setParent(java.lang.Object,
-     *      java.lang.Object)
-     */
-    protected void setParent(Object parent, Object child) {
-
-        //  TODO implement this
-        // 
-        //  if (parent instanceof ScrolledComposite && widget instanceof Control)
-        // {
-        //  	ScrolledComposite scrolledComposite = (ScrolledComposite) parent;
-        //      scrolledComposite.setContent((Control) widget);
-        //  }
-
-    }
-
-    /*
-     * override to make public
-     * 
-     * @see groovy.util.BuilderSupport#setCurrent(java.lang.Object)
-     */
-    public void setCurrent(Object current) {
-        super.setCurrent(current);
-    }
-
-    /* 
-     * override to make public
-     * 
-     * @see groovy.util.BuilderSupport#getCurrent()
-     */
-    public Object getCurrent() {
-        return super.getCurrent();
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/SwtUtils.java b/groovy/modules/groovy-swt/src/main/groovy/swt/SwtUtils.java
deleted file mode 100644
index 5717442..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/SwtUtils.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package groovy.swt;
-
-import groovy.jface.impl.ApplicationWindowImpl;
-
-import java.lang.reflect.Field;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.forms.widgets.Form;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.eclipse.ui.forms.widgets.Section;
-
-/** 
- * A helper class for working with SWT.
- *
- * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- *  
- * @version 1.1
- */
-public class SwtUtils {
-
-    /** The Log to which logging calls will be made. */
-    private static final Log log = LogFactory.getLog(SwtUtils.class);
-
-    /**
-     * Parses the comma delimited String of style codes which are or'd
-     * together. The given class describes the integer static constants
-     *
-     * @param constantClass is the type to look for static fields
-     * @param text is a comma delimited text value such as "border, resize"
-     * @return the int code
-     */
-    public static int parseStyle(Class constantClass, String text) throws GroovyException {
-        return parseStyle(constantClass, text, true);
-    }
-
-    /**
-     * Parses the comma delimited String of style codes which are or'd
-     * together. The given class describes the integer static constants
-     *
-     * @param constantClass is the type to look for static fields
-     * @param text is a comma delimited text value such as "border, resize"
-     * @param toUpperCase is whether the text should be converted to upper case
-     * before its compared against the reflection fields
-     * 
-     * @return the int code
-     */
-    public static int parseStyle(Class constantClass, String text, boolean toUpperCase)
-            throws GroovyException {
-        int answer = 0;
-        if (text != null) {
-            if (toUpperCase) {
-                text = text.toUpperCase();
-            }
-            StringTokenizer enum = new StringTokenizer(text, ",");
-            while (enum.hasMoreTokens()) {
-                String token = enum.nextToken().trim();
-                answer |= getStyleCode(constantClass, token);
-            }
-        }
-        return answer;
-    }
-
-    /**
-     * @return the code for the given word or zero if the word doesn't match a
-     * valid style
-     */
-    public static int getStyleCode(Class constantClass, String text) throws GroovyException {
-        try {
-            Field field = constantClass.getField(text);
-            if (field == null) {
-                log.warn("Unknown style code: " + text + " will be ignored");
-                return 0;
-            }
-            return field.getInt(null);
-        } catch (NoSuchFieldException e) {
-            throw new GroovyException("The value: " + text + " is not understood ");
-        } catch (IllegalAccessException e) {
-            throw new GroovyException("The value: " + text + " is not understood");
-        }
-    }
-
-    /**
-     * dispose all children
-     * 
-     * @param parent
-     */
-    public static void disposeChildren(Composite parent) {
-        Control[] children = parent.getChildren();
-        for (int i = 0; i < children.length; i++) {
-            Control control = children[i];
-            control.dispose();
-        }
-    }
-
-    /**
-     * return the parent shell
-     * 
-     * @param parent
-     * @return
-     */
-    public static Shell getParentShell(Object parent) {
-        if (parent instanceof ApplicationWindow) {
-            return ((ApplicationWindowImpl) parent).getShell();
-        } else if (parent instanceof Shell) {
-            return (Shell) parent;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * return the parent widget
-     * 
-     * @param parent
-     * @return
-     */
-    public static Object getParentWidget(Object parent, Map properties) {
-        if (parent == null && properties.containsKey("parent")) {
-            Object attribute = properties.remove("parent");
-            if (attribute instanceof Composite) {
-                Composite parentWidget = (Composite) attribute;
-                SwtUtils.disposeChildren((Composite) parentWidget);
-                return parentWidget;
-            }
-        }
-
-        if (parent instanceof ApplicationWindow) {
-            return (Composite) ((ApplicationWindowImpl) parent).getContents();
-        } else if (parent instanceof Form) {
-            return ((Form) parent).getBody();
-        } else if (parent instanceof ScrolledForm) {
-            return ((ScrolledForm) parent).getBody();
-        } else if (parent instanceof Section) {
-            return ((Section) parent).getClient();
-        } else if (parent instanceof CTabItem) {
-            return ((CTabItem) parent).getParent();
-        } else if (parent instanceof TabItem) {
-            return ((TabItem) parent).getParent();
-        } else if (parent instanceof Widget) {
-            return (Widget) parent;
-        } else if (parent instanceof TableViewer) {
-            return ((TableViewer) parent).getTable();
-        } else {
-            return parent;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/UnKnownStyleException.java b/groovy/modules/groovy-swt/src/main/groovy/swt/UnKnownStyleException.java
deleted file mode 100644
index d0c6e6d..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/UnKnownStyleException.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Created on Jun 15, 2004
- *
- */
-package groovy.swt;
-
-import org.codehaus.groovy.GroovyException;
-
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class UnKnownStyleException extends GroovyException {
-
-    /**
-     * @param message
-     */
-    public UnKnownStyleException(String style) {
-        super("Unknow SWT style: " + style);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/ColorConverter.java b/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/ColorConverter.java
deleted file mode 100644
index c7926c9..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/ColorConverter.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package groovy.swt.convertor;
-
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.eclipse.swt.graphics.RGB;
-
-/**
- * A Converter that converts Strings in the form "#uuuuuu" or "x,y,z" into a
- * RGB object
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ColorConverter {
-    private Logger log = Logger.getLogger(getClass().getName());
-    private static final ColorConverter instance = new ColorConverter();
-    private static String usageText = "Color value should be in the form of '#xxxxxx' or 'x,y,z'";
-
-    public static ColorConverter getInstance() {
-        return instance;
-    }
-
-    /**
-     * Parsers a String in the form "x, y, z" into an SWT RGB class
-     * 
-     * @param value
-     * @return RGB
-     */
-    protected RGB parseRGB(String value) {
-        StringTokenizer enum = new StringTokenizer(value, ",");
-        int red = 0;
-        int green = 0;
-        int blue = 0;
-        if (enum.hasMoreTokens()) {
-            red = parseNumber(enum.nextToken());
-        }
-        if (enum.hasMoreTokens()) {
-            green = parseNumber(enum.nextToken());
-        }
-        if (enum.hasMoreTokens()) {
-            blue = parseNumber(enum.nextToken());
-        }
-        return new RGB(red, green, blue);
-    }
-
-    /**
-     * Parsers a String in the form "#xxxxxx" into an SWT RGB class
-     * 
-     * @param value
-     * @return RGB
-     */
-    protected RGB parseHtml(String value) {
-        if (value.length() != 7) {
-            throw new IllegalArgumentException(usageText);
-        }
-        int colorValue = 0;
-        try {
-            colorValue = Integer.parseInt(value.substring(1), 16);
-            java.awt.Color swingColor = new java.awt.Color(colorValue);
-            return new RGB(swingColor.getRed(), swingColor.getGreen(), swingColor.getBlue());
-        }
-        catch (NumberFormatException ex) {
-            throw new IllegalArgumentException(value + "is not a valid Html color\n " + ex);
-        }
-    }
-
-    /**
-     * Parse a String
-     */
-    public RGB parse(String value) {
-        if (value.length() <= 1) {
-            throw new IllegalArgumentException(usageText);
-        }
-        if (value.startsWith("[") && value.endsWith("]")) {
-            value = value.substring(1, value.length() - 1);
-        }
-        if (value.charAt(0) == '#') {
-            return parseHtml(value);
-        }
-        else if (value.indexOf(',') != -1) {
-            return parseRGB(value);
-        }
-        else {
-            throw new IllegalArgumentException(usageText);
-        }
-    }
-
-    public RGB parse(List list) {
-        if (list.size() != 3) {
-            log.log(Level.WARNING, "color attribute must [x,y,z]");
-            return null;
-        }
-        int red = parseNumber("" + list.get(0));
-        int green = parseNumber("" + list.get(1));
-        int blue = parseNumber("" + list.get(2));
-        return new RGB(red, green, blue);
-    }
-
-    public Object convert(Class type, Object value) {
-        Object answer = null;
-        if (value != null) {
-            String text = value.toString();
-            answer = parse(text);
-        }
-        return answer;
-    }
-
-    protected int parseNumber(String text) {
-        text = text.trim();
-        return Integer.parseInt(text);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/PointConverter.java b/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/PointConverter.java
deleted file mode 100644
index fec26c6..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/convertor/PointConverter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package groovy.swt.convertor;
-
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.eclipse.swt.graphics.Point;
-
-/**
- *  A Converter that turns a List in the form [x, y] into a Point object
- * 
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster</a>
- * $Id$
- */
-public class PointConverter {
-    private Logger log = Logger.getLogger(getClass().getName());
-    
-    private static final PointConverter instance = new PointConverter();
-
-    public static PointConverter getInstance() {
-        return instance;
-    }
-
-    public Point parse(List list) {
-        if (list.size() != 2) {
-            log.log(Level.WARNING, "size attribute must [x,y]");
-            return null;	
-        }
-        int x = parseNumber("" + list.get(0));
-        int y = parseNumber("" + list.get(1));
-        return new Point(x, y);
-    }
-
-    protected int parseNumber(String text) {
-        return Integer.parseInt(text.trim());
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AbstractSwtFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AbstractSwtFactory.java
deleted file mode 100644
index ca5e69a..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AbstractSwtFactory.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *  
- */
-package groovy.swt.factory;
-
-import groovy.swt.convertor.ColorConverter;
-import groovy.swt.convertor.PointConverter;
-
-import java.lang.reflect.Field;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public abstract class AbstractSwtFactory {
-
-    public abstract Object newInstance(Map properties, Object parent) throws GroovyException;
-
-    /**
-     * set the properties
-     * 
-     * @param bean
-     * @param properties
-     */
-    protected void setBeanProperties(Object bean, Map properties) {
-
-        if (bean instanceof Control) {
-            Control control = (Control) bean;
-
-            // set size of widget
-            Object size = properties.remove("size");
-            if (size != null) {
-                setSize(control, size);
-            }
-
-            // set background of widget
-            Object colorValue = properties.remove("background");
-            if (colorValue != null) {
-                Color background = getColor(control, colorValue);
-                control.setBackground(background);
-            }
-
-            // set foreground of widget
-            colorValue = properties.remove("foreground");
-            if (colorValue != null) {
-                Color foreground = getColor(control, colorValue);
-                control.setForeground(foreground);
-            }
-        }
-
-        for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
-            Map.Entry entry = (Map.Entry) iter.next();
-            String property = entry.getKey().toString();
-            Object value = entry.getValue();
-            Field field = null;
-            try {
-                field = bean.getClass().getDeclaredField(property);
-                if (value instanceof Boolean) {
-                    field.setBoolean(bean, ((Boolean) value).booleanValue());
-                } else if (value instanceof Integer) {
-                    field.setInt(bean, ((Integer) value).intValue());
-                } else if (value instanceof Double) {
-                    field.setDouble(bean, ((Double) value).doubleValue());
-                } else if (value instanceof Float) {
-                    field.setFloat(bean, ((Float) value).floatValue());
-                } else {
-                    InvokerHelper.setProperty(bean, property, value);
-                }
-
-            } catch (Exception e) {
-            }
-            if (field == null) {
-                InvokerHelper.setProperty(bean, property, value);
-            }
-        }
-    }
-
-    protected Color getColor(Control control, Object colorValue) {
-        Color color = null;
-        if (colorValue != null) {
-            RGB rgb = null;
-            if (colorValue instanceof Color) {
-                color = (Color) colorValue;
-            } else if (colorValue instanceof List) {
-                rgb = ColorConverter.getInstance().parse((List) colorValue);
-                color = new Color(control.getDisplay(), rgb);
-            } else {
-                rgb = ColorConverter.getInstance().parse(colorValue.toString());
-                color = new Color(control.getDisplay(), rgb);
-            }
-        }
-        return color;
-    }
-
-    protected void setSize(Control control, Object size) {
-        Point point = null;
-        if (size != null) {
-            if (size instanceof Point) {
-                point = (Point) size;
-            } else if (size instanceof List) {
-                point = PointConverter.getInstance().parse((List) size);
-            }
-            control.setSize(point);
-        }
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ActionFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ActionFactory.java
deleted file mode 100644
index d9b1b13..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ActionFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package groovy.swt.factory;
-
-import groovy.jface.factory.ActionImpl;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IContributionManager;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ActionFactory extends AbstractSwtFactory implements SwtFactory {
-
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-    throws GroovyException {
-        Action action = new ActionImpl();
-        setBeanProperties(action, properties);
-        if (parent instanceof IContributionManager){
-            IContributionManager contributionManager = (IContributionManager) parent;
-            contributionManager.add(action);
-        }
-        return action;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AwtSwtFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AwtSwtFactory.java
deleted file mode 100644
index b306630..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/AwtSwtFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *  
- */
-package groovy.swt.factory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.awt.SWT_AWT;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class AwtSwtFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.Factory#newInstance(java.util.Map, java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-        
-        if (parent instanceof Composite) {
-            return SWT_AWT.new_Frame((Composite) parent);
-        }
-        
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/Fontfactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/Fontfactory.java
deleted file mode 100644
index 288f855..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/Fontfactory.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Created on Jun 15, 2004
- *  
- */
-package groovy.swt.factory;
-
-import groovy.swt.InvalidParentException;
-import groovy.swt.SwtUtils;
-import groovy.swt.UnKnownStyleException;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class Fontfactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-
-        Object parentWidget = SwtUtils.getParentWidget(parent, properties);
-        if (!(parentWidget instanceof Control)) {
-            throw new InvalidParentException("control");
-        }
-
-        Control parentControl = (Control) parentWidget;
-
-        String styleProperty = (String) properties.remove("style");
-
-        if (styleProperty != null) {
-            int style;
-            try {
-                style = SwtUtils.parseStyle(SWT.class, styleProperty);
-            } catch (GroovyException e) {
-                throw new UnKnownStyleException(styleProperty);
-            }
-
-            Font initialFont = parentControl.getFont();
-            FontData[] fontData = initialFont.getFontData();
-            for (int i = 0; i < fontData.length; i++) {
-                fontData[i].setStyle(style);
-            }
-
-            Font newFont = new Font(parentControl.getDisplay(), fontData);
-            parentControl.setFont(newFont);
-        }
-
-        return parentControl;
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormFactory.java
deleted file mode 100644
index dc98bdb..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormFactory.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Created on Feb 27, 2004
- *  
- */
-package groovy.swt.factory;
-
-import groovy.swt.InvalidParentException;
-import groovy.swt.SwtUtils;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.forms.FormColors;
-import org.eclipse.ui.forms.HyperlinkSettings;
-import org.eclipse.ui.forms.widgets.Form;
-import org.eclipse.ui.forms.widgets.FormText;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.eclipse.ui.forms.widgets.ScrolledPageBook;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class FormFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /** static is evil, too many toolkits is evil */
-    protected static FormToolkit toolkit;
-
-    /**
-     * @return Returns the toolkit.
-     */
-    public static FormToolkit getToolkit() {
-        if (toolkit == null) {
-            FormColors formColors = new FormColors(Display.getCurrent() == null ? new Display()
-                    : Display.getCurrent());
-            toolkit = new FormToolkit(formColors);
-        }
-        return toolkit;
-    }
-
-    /** type of */
-    private String type;
-
-    /**
-     * @param string
-     */
-    public FormFactory(String type) {
-        this.type = type;
-    }
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        // boolean shouldLayout = properties.containsKey("parent");
-        Composite parentComposite = (Composite) SwtUtils.getParentWidget(parent, properties);
-
-        String styleProperty = (String) properties.remove("style");
-        String text = (String) properties.remove("text");
-        int style = SWT.NULL;
-        if (styleProperty != null) {
-            if (type.equals("formSection")) {
-                style = SwtUtils.parseStyle(Section.class, styleProperty);
-            } else {
-                style = SwtUtils.parseStyle(SWT.class, styleProperty);
-            }
-        }
-
-        if (parentComposite != null) {
-            Object formWidget = getFormWidget(parentComposite, properties, style, text);
-            setBeanProperties(formWidget, properties);
-
-            // if (shouldLayout && parentComposite != null && parentComposite instanceof Composite) {
-            //    ((Composite) parentComposite).layout();
-            //}
-
-            return formWidget;
-
-        } else {
-            throw new InvalidParentException("composite instance");
-        }
-    }
-
-    /**
-     * @param parentComposite
-     * @param style
-     * @param text
-     * @return
-     */
-    private Object getFormWidget(final Composite parentComposite, Map properties, int style,
-            String text) throws GroovyException {
-        if ("form".equals(type)) {
-            Form form = getToolkit().createForm(parentComposite);
-            form.setText(text);
-            return form;
-        }
-        if ("scrolledForm".equals(type)) {
-            ScrolledForm scrolledForm = getToolkit().createScrolledForm(parentComposite);
-            scrolledForm.setText(text);
-            return scrolledForm;
-        }
-        if ("formButton".equals(type)) {
-            return getToolkit().createButton(parentComposite, text, style);
-        }
-        if ("formColors".equals(type)) {
-            return getToolkit().getColors();
-        }
-        if ("formComposite".equals(type)) {
-            return getToolkit().createComposite(parentComposite, style);
-        }
-        if ("formCompositeSeparator".equals(type)) {
-            return getToolkit().createCompositeSeparator(parentComposite);
-        }
-        if ("formExpandableComposite".equals(type)) {
-            return getToolkit().createExpandableComposite(parentComposite, style);
-        }
-        if ("formText".equals(type)) {
-            Text text2 = getToolkit().createText(parentComposite, text, style);
-            getToolkit().paintBordersFor(parentComposite);
-            return text2;
-        }
-        if ("formHyperlink".equals(type)) {
-            return getToolkit().createHyperlink(parentComposite, text, style);
-        }
-        if ("formImageHyperlink".equals(type)) {
-            return getToolkit().createImageHyperlink(parentComposite, style);
-        }
-        if ("formLabel".equals(type)) {
-            return getToolkit().createLabel(parentComposite, text, style);
-        }
-        if ("formPageBook".equals(type)) {
-            return getToolkit().createPageBook(parentComposite, style);
-        }
-        if ("formPageBookPage".equals(type)) {
-            if (parentComposite instanceof ScrolledPageBook) {
-                ScrolledPageBook pageBook = (ScrolledPageBook) parentComposite;
-                String key = (String) properties.remove("key");
-                if (key != null) {
-                    Composite page = pageBook.createPage(key);
-                    pageBook.registerPage(key, page);
-                    return page;
-                } else {
-					 throw new GroovyException("attribute \"key\" is " + key);
-                }
-            } else {
-                throw new InvalidParentException("formPageBook");
-            }
-        }
-        if ("formSection".equals(type)) {
-            Section section = getToolkit().createSection(parentComposite, style);
-            if (text != null) {
-                section.setText(text);
-            }
-            section.setSeparatorControl(getToolkit().createCompositeSeparator(section));
-            String description = (String) properties.remove("description");
-            if (description != null) {
-                section.setDescription(description);
-            }
-            Composite client = getToolkit().createComposite(section);
-            client.setLayout(new GridLayout());
-            section.setClient(client);
-            return section;
-        }
-        if ("formSeparator".equals(type)) {
-            return getToolkit().createSeparator(parentComposite, style);
-        }
-        if ("formTable".equals(type)) {
-            return getToolkit().createTable(parentComposite, style);
-        }
-        if ("formToolkit".equals(type)) {
-            return getToolkit();
-        }
-        if ("formFormattedText".equals(type)) {
-            boolean parseTags = false;
-            boolean expandURLs = false;
-            if (properties.get("parseTags") != null) {
-                parseTags = ((Boolean) properties.remove("parseTags")).booleanValue();
-            }
-            if (properties.get("expandURLs") != null) {
-                expandURLs = ((Boolean) properties.remove("expandURLs")).booleanValue();
-            }
-
-            FormText formText = getToolkit().createFormText(parentComposite, true);
-            HyperlinkSettings hyperlinkSettings = new HyperlinkSettings(Display.getCurrent());
-            hyperlinkSettings.setBackground(getToolkit().getColors().getBackground());
-            hyperlinkSettings.setActiveBackground(getToolkit().getColors().getBackground());
-            hyperlinkSettings.setForeground(getToolkit().getColors().getForeground());
-            hyperlinkSettings.setActiveForeground(getToolkit().getColors().getBackground());
-            formText.setHyperlinkSettings(hyperlinkSettings);
-
-            formText.setText(text, parseTags, expandURLs);
-
-            return formText;
-        }
-        if ("formTree".equals(type)) {
-            return getToolkit().createTree(parentComposite, style);
-        }
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormLayoutDataFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormLayoutDataFactory.java
deleted file mode 100644
index 8866f74..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/FormLayoutDataFactory.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *  
- */
-package groovy.swt.factory;
-
-import java.lang.reflect.Constructor;
-import java.util.List;
-import java.util.Map;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.widgets.Control;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> $Id
- *         LayoutDataFactory.java,v 1.2 2004/03/18 08:51:47 ckl Exp $
- */
-public class FormLayoutDataFactory extends AbstractSwtFactory implements
-        SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-        // get attachment properties
-        List left = (List) properties.remove("left");
-        List right = (List) properties.remove("right");
-        List top = (List) properties.remove("top");
-        List bottom = (List) properties.remove("bottom");
-
-        // build new formdata
-        FormData formData = new FormData();
-        if (left != null) {
-            formData.left = getFormAttachment(left);
-        }
-        if (right != null) {
-            formData.right = getFormAttachment(right);
-        }
-        if (top != null) {
-            formData.top = getFormAttachment(top);
-        }
-        if (bottom != null) {
-            formData.bottom = getFormAttachment(bottom);
-        }
-
-        // set layout data
-        if (parent instanceof Control) {
-            Control control = (Control) parent;
-            control.setLayoutData(formData);
-        }
-
-        // set remaining properties
-        setBeanProperties(formData, properties);
-
-        // return formdata
-        return formData;
-    }
-
-    /**
-     * @param list
-     * @return @throws
-     *         GroovyException
-     */
-    private FormAttachment getFormAttachment(List list) throws GroovyException {
-        FormAttachment formAttachment = null;
-        try {
-            // get constructor
-            Class[] types = new Class[list.size()];
-            for (int i = 0; i < list.size(); i++) {
-                if (list.get(i).getClass() == Integer.class) {
-                    types[i] = int.class;
-                } else if (list.get(i) instanceof Control) {
-                    types[i] = Control.class;
-                } else {
-                    throw new GroovyException(
-                            "list element must be of type 'int' or 'Control': "
-                                    + list.get(i));
-                }
-            }
-            Constructor constructor = FormAttachment.class
-                    .getConstructor(types);
-
-            // invoke constructor
-            if (constructor != null) {
-                Object[] values = new Object[list.size()];
-                for (int i = 0; i < list.size(); i++) {
-                    values[i] = list.get(i);
-                }
-                formAttachment = (FormAttachment) constructor
-                        .newInstance(values);
-            }
-        } catch (Exception e) {
-            throw new GroovyException(e.getMessage());
-        }
-        return formAttachment;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ImageFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ImageFactory.java
deleted file mode 100644
index 565675a..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ImageFactory.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *
- */
-package groovy.swt.factory;
-
-import groovy.lang.MissingPropertyException;
-import groovy.swt.InvalidParentException;
-
-import java.io.File;
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.window.Window;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Decorations;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Item;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.forms.widgets.Form;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ImageFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.Factory#newInstance(java.util.Map, java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        String src = (String) properties.remove("src");
-        if (src == null) {
-            throw new MissingPropertyException("src", Image.class);
-        }
-
-        if (parent == null) {
-            throw new InvalidParentException("Widget or a Window");
-        }
-
-        Image image = null;
-        File imageFile = new File(src);
-        if (imageFile.exists()) {
-            image = new Image(Display.getCurrent(), src);
-        } else {
-            image = new Image(Display.getCurrent(), ImageFactory.class.getClassLoader()
-                    .getResourceAsStream(src));
-        }
-
-        setImage(parent, image);
-
-        return image;
-    }
-
-    /**
-     * Add image to a widget or window
-     * 
-     * @param parent
-     * @param image
-     * @throws JellyTagException
-     */
-    protected void setImage(Object parent, Image image) throws GroovyException {
-        if (parent instanceof Label) {
-            Label label = (Label) parent;
-            label.setImage(image);
-
-        } else if (parent instanceof Button) {
-            Button button = (Button) parent;
-            button.setImage(image);
-
-        } else if (parent instanceof Item) {
-            Item item = (Item) parent;
-            item.setImage(image);
-
-        } else if (parent instanceof Decorations) {
-            Decorations item = (Decorations) parent;
-            item.setImage(image);
-
-        } else if (parent instanceof Form) {
-            Form form = (Form) parent;
-            form.setBackgroundImage(image);
-
-        } else if (parent instanceof ScrolledForm) {
-            ScrolledForm form = (ScrolledForm) parent;
-            form.setBackgroundImage(image);
-
-        } else if (parent instanceof Window) {
-            Window window = (Window) parent;
-            window.getShell().setImage(image);
-
-        } else {
-            throw new GroovyException(
-                    "This tag must be nested inside a <label>, <button> or <item> tag");
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutDataFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutDataFactory.java
deleted file mode 100644
index 847cbd4..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutDataFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *
- */
-package groovy.swt.factory;
-
-import groovy.swt.SwtUtils;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.widgets.Control;
-
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster</a>
- * $Id$
- */
-public class LayoutDataFactory extends AbstractSwtFactory implements SwtFactory{
-
-    private Class beanClass;
-
-    /**
-     * @param class1
-     */
-    public LayoutDataFactory(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *           java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-
-        Object bean = createWidget(properties, parent);
-
-        if (bean != null) {
-            setBeanProperties(bean, properties);
-        }
-
-        if (parent instanceof Control) {
-            Control control = (Control) parent;
-            control.setLayoutData(bean);
-        }
-
-        return bean;
-    }
-
-    private Object createWidget(Map properties, Object parent)
-            throws GroovyException {
-        Object bean = null;
-
-        String styleText = (String) properties.remove("style");
-        if (styleText != null) {
-            int style = SwtUtils.parseStyle(beanClass, styleText);
-
-            // now lets try invoke a constructor
-            Class[] types = { int.class};
-
-            try {
-                Constructor constructor = beanClass.getConstructor(types);
-                if (constructor != null) {
-                    Object[] values = { new Integer(style)};
-                    bean = constructor.newInstance(values);
-                }
-            } catch (NoSuchMethodException e) {
-                throw new GroovyException(e.getMessage());
-            } catch (InstantiationException e) {
-                throw new GroovyException(e.getMessage());
-            } catch (IllegalAccessException e) {
-                throw new GroovyException(e.getMessage());
-            } catch (InvocationTargetException e) {
-                throw new GroovyException(e.getMessage());
-            }
-        } else {
-            try {
-                bean = beanClass.newInstance();
-            } catch (InstantiationException e) {
-                throw new GroovyException(e.getMessage());
-            } catch (IllegalAccessException e) {
-                throw new GroovyException(e.getMessage());
-            }
-        }
-
-        if (bean != null) {
-            setBeanProperties(bean, properties);
-        }
-
-        return bean;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutFactory.java
deleted file mode 100644
index 538b1dc..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/LayoutFactory.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *
- */
-package groovy.swt.factory;
-
-import groovy.swt.SwtUtils;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Layout;
-import org.eclipse.swt.widgets.Widget;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class LayoutFactory extends AbstractSwtFactory implements SwtFactory {
-
-    private Class beanClass;
-
-    /**
-     * @param beanClass
-     */
-    public LayoutFactory(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-
-        Layout layout;
-        try {
-            layout = (Layout) beanClass.newInstance();
-        } catch (InstantiationException e) {
-            throw new GroovyException(e.getMessage());
-        } catch (IllegalAccessException e) {
-            throw new GroovyException(e.getMessage());
-        }
-
-        if (layout != null) {
-            setBeanProperties(layout, properties);
-        }
-
-        Widget parentComposite = (Widget) SwtUtils.getParentWidget(parent, properties);
-        if (parentComposite != null) {
-            ((Composite) parentComposite).setLayout(layout);
-        }
-
-        return layout;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ListenerFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ListenerFactory.java
deleted file mode 100644
index 300f4ac..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/ListenerFactory.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Created on Feb 15, 2004
- */
-package groovy.swt.factory;
-
-import groovy.swt.SwtUtils;
-import groovy.swt.impl.ExpansionListenerImpl;
-import groovy.swt.impl.HyperLinkListenerImpl;
-import groovy.swt.impl.ListenerImpl;
-import groovy.swt.impl.LocationListenerImpl;
-import groovy.swt.impl.ProgressListenerImpl;
-import groovy.swt.impl.StatusTextListenerImpl;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.browser.LocationListener;
-import org.eclipse.swt.browser.ProgressListener;
-import org.eclipse.swt.browser.StatusTextListener;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.forms.events.IExpansionListener;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.AbstractHyperlink;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ListenerFactory extends AbstractSwtFactory implements SwtFactory {
-
-    private Class beanClass;
-
-    /**
-     * @param class1
-     */
-    public ListenerFactory(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    /*
-     * @see groovy.swt.impl.SwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-        final String type = (String) properties.remove("type");
-        if (parent instanceof Browser) {
-            Browser browser = (Browser) parent;
-            if (beanClass.equals(LocationListener.class)) {
-                LocationListener locationListener = new LocationListenerImpl(
-                        type);
-                browser.addLocationListener(locationListener);
-                return locationListener;
-            } else if (beanClass.equals(ProgressListener.class)) {
-                ProgressListener progressListener = new ProgressListenerImpl(
-                        type);
-                browser.addProgressListener(progressListener);
-                return progressListener;
-            } else if (beanClass.equals(StatusTextListener.class)) {
-                StatusTextListener statusTextListener = new StatusTextListenerImpl();
-                browser.addStatusTextListener(statusTextListener);
-                return statusTextListener;
-            }
-        } else if (parent instanceof AbstractHyperlink) {
-            AbstractHyperlink hyperlink = (AbstractHyperlink) parent;
-            IHyperlinkListener hyperLinkListenerImpl = new HyperLinkListenerImpl(
-                    type);
-            hyperlink.addHyperlinkListener(hyperLinkListenerImpl);
-            return hyperLinkListenerImpl;
-        } else if (parent instanceof ExpandableComposite) {
-            ExpandableComposite expandableComposite = (ExpandableComposite) parent;
-            IExpansionListener expansionListener = new ExpansionListenerImpl(
-                    type);
-            expandableComposite.addExpansionListener(expansionListener);
-            return expansionListener;
-
-        } else if (parent instanceof Widget || parent instanceof Viewer) {
-            Widget widget = null;
-            if (parent instanceof Viewer) {
-                widget = ((Viewer) parent).getControl();
-            } else {
-                widget = (Widget) parent;
-            }
-            int eventType = getEventType(type);
-            if (eventType == 0) { throw new GroovyException(
-                    "No event type specified, could not understand: " + type); }
-            ListenerImpl listenerImpl = new ListenerImpl();
-            widget.addListener(eventType, listenerImpl);
-            return listenerImpl;
-        }
-        throw new GroovyException("No factory found for class: " + beanClass);
-    }
-
-    /**
-     * Parses the given event type String and returns the SWT event type code
-     * 
-     * @param type
-     *            is the String event type
-     * @return the SWT integer event type
-     */
-    protected int getEventType(String type) throws GroovyException {
-        return SwtUtils.parseStyle(SWT.class, type, false);
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/SwtFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/SwtFactory.java
deleted file mode 100644
index 5143287..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/SwtFactory.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *
- */
-package groovy.swt.factory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public interface SwtFactory {
-
-    /**
-     * Create a new instance
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException;
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/TrayFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/TrayFactory.java
deleted file mode 100644
index bcdc9b0..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/TrayFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *  
- */
-package groovy.swt.factory;
-
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.widgets.Display;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class TrayFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /*
-     * @see groovy.swt.impl.Factory#newInstance(java.util.Map, java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent)
-            throws GroovyException {
-        return Display.getCurrent().getSystemTray();
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/WidgetFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/factory/WidgetFactory.java
deleted file mode 100644
index c3b6df3..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/factory/WidgetFactory.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Created on Feb 15, 2004
- *  
- */
-package groovy.swt.factory;
-
-import groovy.swt.InvalidChildException;
-import groovy.swt.SwtUtils;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Map;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CTabItem;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabItem;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class WidgetFactory extends AbstractSwtFactory implements SwtFactory {
-
-    protected Class beanClass;
-
-    protected int style = SWT.NONE;
-
-    public WidgetFactory(Class beanClass) {
-        this.beanClass = beanClass;
-    }
-
-    /**
-     * @param beanClass2
-     * @param style
-     */
-    public WidgetFactory(Class beanClass, int style) {
-        this.beanClass = beanClass;
-        this.style = style;
-    }
-
-    /*
-     * @see groovy.swt.impl.Factory#newInstance(java.util.Map, java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        String styleProperty = (String) properties.remove("style");
-        if (styleProperty != null) {
-            style = SwtUtils.parseStyle(SWT.class, styleProperty);
-        }
-
-        Object parentWidget = SwtUtils.getParentWidget(parent, properties);
-
-        Object bean = createWidget(parentWidget);
-        if (bean != null) {
-            setBeanProperties(bean, properties);
-        }
-
-        setControl(bean, parent);
-
-        return bean;
-    }
-
-    /**
-     * @param parent
-     * @param bean
-     * @return @throws
-     *         GroovyException
-     */
-    protected Object createWidget(Object parent) throws GroovyException {
-        if (beanClass == null) {
-            throw new GroovyException("No Class available to create the new widget");
-        }
-        try {
-            if (parent == null) {
-                // lets try call a constructor with a single style
-                Class[] types = { int.class };
-                Constructor constructor = beanClass.getConstructor(types);
-                if (constructor != null) {
-                    Object[] arguments = { new Integer(style) };
-                    return constructor.newInstance(arguments);
-                }
-            } else {
-                // lets try to find the constructor with 2 arguments with the
-                // 2nd argument being an int
-                Constructor[] constructors = beanClass.getConstructors();
-                if (constructors != null) {
-                    for (int i = 0, size = constructors.length; i < size; i++) {
-                        Constructor constructor = constructors[i];
-                        Class[] types = constructor.getParameterTypes();
-                        if (types.length == 2 && types[1].isAssignableFrom(int.class)) {
-                            if (types[0].isAssignableFrom(parent.getClass())) {
-                                Object[] arguments = { parent, new Integer(style) };
-                                return constructor.newInstance(arguments);
-                            }
-                            // lets try to find the constructor with 1
-                            // arguments
-                        } else if (types.length == 1
-                                && types[0].isAssignableFrom(parent.getClass())) {
-                            Object[] arguments = { parent };
-                            return constructor.newInstance(arguments);
-                        }
-                    }
-                }
-            }
-            return beanClass.newInstance();
-        } catch (NoSuchMethodException e) {
-            throw new GroovyException(e.getMessage());
-        } catch (InstantiationException e) {
-            throw new GroovyException(e.getMessage());
-        } catch (IllegalAccessException e) {
-            throw new GroovyException(e.getMessage());
-        } catch (InvocationTargetException e) {
-            throw new GroovyException(e.getTargetException().getLocalizedMessage());
-        }
-    }
-
-    protected void setControl(Object bean, Object parent) throws InvalidChildException {
-        if (parent instanceof CTabItem) {
-            if (!(bean instanceof Control)) {
-                throw new InvalidChildException("cTabItem", Control.class.getName());
-            }
-            CTabItem tabItem = (CTabItem) parent;
-            tabItem.setControl((Control) bean);
-        } else if (parent instanceof TabItem) {
-            if (!(bean instanceof Control)) {
-                throw new InvalidChildException("tabItem", Control.class.getName());
-            }
-            TabItem tabItem = (TabItem) parent;
-            tabItem.setControl((Control) bean);
-        } else if (parent instanceof ScrolledComposite) {
-            if (!(bean instanceof Control)) {
-                throw new InvalidChildException("scrolledComposite", Control.class.getName());
-            }
-            ScrolledComposite scrolledComposite = (ScrolledComposite) parent;
-            scrolledComposite.setContent((Control) bean);
-        } else if (bean instanceof Menu && parent instanceof Shell) {
-            Menu menu = (Menu) bean;
-            Shell shell = (Shell) parent;
-            if (style == SWT.BAR) {
-                shell.setMenuBar(menu);
-            } else {
-                shell.setMenu(menu);
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/ApplicationGuiBuilder.java b/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/ApplicationGuiBuilder.java
deleted file mode 100644
index be8339a..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/ApplicationGuiBuilder.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Created on Mar 1, 2004
- *
- */
-package groovy.swt.guibuilder;
-
-import groovy.jface.JFaceBuilder;
-import groovy.util.GroovyScriptEngine;
-
-import java.io.IOException;
-import java.util.logging.Logger;
-
-/**
- * WORK IN PROGRESS, don't use this one yet
- * 
- * This will be the main guibuilder
- * 
- * TODO provide entry point for pull tools (e.g. i18n, security) 
- * 
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ApplicationGuiBuilder extends JFaceBuilder {
-    /** the logger */
-    private Logger log = Logger.getLogger(getClass().getName());
-
-    /** the caching script engine */
-    private GroovyScriptEngine scriptEngine;
-
-    /**
-     * tha constructor
-     * 
-     * @param rootUrl
-     * @throws IOException
-     */
-    public ApplicationGuiBuilder(String rootUrl) throws IOException {
-        scriptEngine = new GroovyScriptEngine(rootUrl);
-    }
-
-    /*
-     * @see groovy.swt.SwtBuilder#registerWidgets()
-     */
-    protected void registerWidgets() {
-        super.registerWidgets();
-        registerFactory("rebuild", new RebuildFactory(this));
-        registerFactory("runScript", new RunScriptFactory(this));
-    }
-    
-    /**
-     * @return Returns the scriptEngine.
-     */
-    public GroovyScriptEngine getScriptEngine() {
-        return scriptEngine;
-    }
-
-    
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RebuildFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RebuildFactory.java
deleted file mode 100644
index f2157f8..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RebuildFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Created on Mar 17, 2004
- *
- */
-package groovy.swt.guibuilder;
-
-import groovy.lang.Closure;
-import groovy.lang.MissingPropertyException;
-import groovy.swt.InvalidParentException;
-import groovy.swt.SwtUtils;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-import java.util.Map;
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Rebuild a swt widget by first disposing all children
- * 
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class RebuildFactory extends AbstractSwtFactory implements SwtFactory {
-
-    private ApplicationGuiBuilder guiBuilder;
-
-    /**
-     * @param builder
-     */
-    public RebuildFactory(ApplicationGuiBuilder guiBuilder) {
-        this.guiBuilder = guiBuilder;
-    }
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-        // get parent
-        if( properties.containsKey("parent") ) {
-            parent = properties.remove("parent");
-        }
-        if (parent == null) {
-            throw new InvalidParentException("not null");
-        }
-        
-        Composite parentComposite = (Composite) SwtUtils.getParentWidget(parent, properties);
-        if (parentComposite == null) {
-            throw new MissingPropertyException("parent", RebuildFactory.class);
-        }
-        guiBuilder.setCurrent(parentComposite);
-
-        // get closure
-        Closure closure = (Closure) properties.remove("closure");
-        if (closure == null) {
-            throw new MissingPropertyException("closure", RebuildFactory.class);
-        }
-
-        // rebuild & pack widgets
-        SwtUtils.disposeChildren(parentComposite);
-        
-        Object obj = closure.call(parentComposite);
-        if (obj instanceof Composite) {
-            ((Composite) obj).layout();
-        }
-        parentComposite.layout();
-        
-        return obj;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RunScriptFactory.java b/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RunScriptFactory.java
deleted file mode 100644
index a362412..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/guibuilder/RunScriptFactory.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Created on Mar 17, 2004
- *  
- */
-package groovy.swt.guibuilder;
-
-import groovy.lang.Binding;
-import groovy.lang.MissingPropertyException;
-import groovy.swt.SwtUtils;
-import groovy.swt.factory.AbstractSwtFactory;
-import groovy.swt.factory.SwtFactory;
-import groovy.util.ResourceException;
-import groovy.util.ScriptException;
-
-import java.util.Map;
-import java.util.logging.Logger;
-
-import org.codehaus.groovy.GroovyException;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Run another script
- * 
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class RunScriptFactory extends AbstractSwtFactory implements SwtFactory {
-
-    /** the logger */
-    private Logger log = Logger.getLogger(getClass().getName());
-
-    /** the builder */
-    private ApplicationGuiBuilder guiBuilder;
-
-    /**
-     * @param scriptEngine
-     */
-    public RunScriptFactory(ApplicationGuiBuilder guiBuilder) {
-        this.guiBuilder = guiBuilder;
-    }
-
-    /*
-     * @see groovy.swt.factory.AbstractSwtFactory#newInstance(java.util.Map,
-     *      java.lang.Object)
-     */
-    public Object newInstance(Map properties, Object parent) throws GroovyException {
-
-        // get src
-        String src = (String) properties.remove("src");
-        if (src == null) {
-            throw new MissingPropertyException("src", RunScriptFactory.class);
-        }
-
-        // get binding
-        Binding binding = (Binding) properties.remove("binding");
-        if (binding == null) {
-            binding = new Binding();
-        }
-
-        // get parent composite
-        Composite parentComposite = null;
-        Object obj = properties.remove("parent");
-        if (obj != null) {
-            parentComposite = (Composite) SwtUtils.getParentWidget(obj, properties);
-            if (parentComposite == null && parent instanceof Composite) {
-                parentComposite = (Composite) parent;
-            }
-        } else {
-            parentComposite = (Composite) SwtUtils.getParentWidget(guiBuilder.getCurrent(),
-                    properties);
-        }
-        guiBuilder.setCurrent(parentComposite);
-
-        // dispose children
-        Boolean rebuild = (Boolean) properties.remove("rebuild");
-        if (parentComposite != null && rebuild != null && rebuild.booleanValue()) {
-            SwtUtils.disposeChildren(parentComposite);
-        }
-
-        // run script
-        Object result;
-        try {
-            result = runScript(src, parentComposite, binding);
-        } catch (Exception e) {
-            throw new GroovyException(e.getMessage());
-        }
-        
-        if (result == null) {
-            throw new NullPointerException("Script returns null: " + src);
-        }
-        return result;
-    }
-
-    /**
-     * @param widget
-     * @param script
-     * @param parent
-     * @return
-     * @throws ScriptException
-     * @throws ResourceException
-     */
-    private Object runScript(String script, Composite parent, Binding binding)
-            throws GroovyException, ResourceException, ScriptException {
-
-        // script binding
-        binding.setVariable("guiBuilder", guiBuilder);
-        if (parent != null) {
-            binding.setVariable("parent", parent);
-        }
-
-        Object obj = guiBuilder.getScriptEngine().run(script, binding);
-
-        // layout widget
-        if (parent != null) {
-            parent.layout();
-        } else if (obj != null && (obj instanceof Composite)) {
-            ((Composite) obj).layout();
-        }
-
-        return obj;
-    }
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ExpansionListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ExpansionListenerImpl.java
deleted file mode 100644
index ecd7a6e..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ExpansionListenerImpl.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.ui.forms.events.ExpansionEvent;
-import org.eclipse.ui.forms.events.IExpansionListener;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ExpansionListenerImpl implements IExpansionListener, ClosureSupport{
-    private String type;
-    private Closure closure;
-
-    public ExpansionListenerImpl(String type) {
-        this.type = type;
-    }
-
-    public Closure getClosure()
-    {
-        return closure;
-    }
-
-    public void setClosure(Closure closure)
-    {
-        this.closure = closure;
-    }
-
-    /*
-     * @see org.eclipse.ui.forms.events.ExpansionListener#expansionStateChanging(org.eclipse.ui.forms.events.ExpansionEvent)
-     */
-    public void expansionStateChanging(ExpansionEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("expansionStateChanging".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-
-    /*
-     * @see org.eclipse.ui.forms.events.ExpansionListener#expansionStateChanged(org.eclipse.ui.forms.events.ExpansionEvent)
-     */
-    public void expansionStateChanged(ExpansionEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("expansionStateChanged".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/HyperLinkListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/HyperLinkListenerImpl.java
deleted file mode 100644
index 054798f..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/HyperLinkListenerImpl.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Created on Feb 28, 2004
- *
- */
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class HyperLinkListenerImpl implements IHyperlinkListener, ClosureSupport {
-    private String type;
-    private Closure closure;
-
-    public HyperLinkListenerImpl(String type) {
-        this.type = type;
-    }
-
-    public Closure getClosure()
-    {
-        return closure;
-    }
-
-    public void setClosure(Closure closure)
-    {
-        this.closure = closure;
-    }
-
-    /*
-     * @see javax.swing.event.HyperlinkListener#hyperlinkUpdate(javax.swing.event.HyperlinkEvent)
-     */
-    public void hyperlinkUpdate(HyperlinkEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("hyperlinkUpdate".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-
-    /*
-     * @see org.eclipse.ui.forms.events.HyperlinkListener#linkEntered(org.eclipse.ui.forms.events.HyperlinkEvent)
-     */
-    public void linkEntered(HyperlinkEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("linkEntered".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-
-    /*
-     * @see org.eclipse.ui.forms.events.HyperlinkListener#linkExited(org.eclipse.ui.forms.events.HyperlinkEvent)
-     */
-    public void linkExited(HyperlinkEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("linkExited".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-
-    /*
-     * @see org.eclipse.ui.forms.events.HyperlinkListener#linkActivated(org.eclipse.ui.forms.events.HyperlinkEvent)
-     */
-    public void linkActivated(HyperlinkEvent event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        if ("linkActivated".equals(type))
-        {
-            closure.call(event);
-        }
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ListenerImpl.java
deleted file mode 100644
index 1f2d2ed..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ListenerImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Created on Feb 16, 2004
- *
- */
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class ListenerImpl implements Listener, ClosureSupport {
-    private Closure closure;
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    public void handleEvent(Event event) {
-        if (closure == null){
-            throw new NullPointerException(
-            "No closure has been configured for this Listener");
-        }
-        closure.call(event);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/LocationListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/LocationListenerImpl.java
deleted file mode 100644
index b0ecaae..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/LocationListenerImpl.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.swt.browser.LocationEvent;
-import org.eclipse.swt.browser.LocationListener;
-
-/**
- * This implementation adds a LocationListener to a browser widget
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- */
-public class LocationListenerImpl implements LocationListener, ClosureSupport {
-
-    private String type;
-
-    private Closure closure;
-
-    /**
-     * @param type
-     */
-    public LocationListenerImpl(String type)
-    {
-        this.type = type;
-    }
-
-    public Closure getClosure()
-    {
-        return closure;
-    }
-
-    public void setClosure(Closure closure)
-    {
-        this.closure = closure;
-    }
-
-    /*
-     * @see org.eclipse.swt.browser.LocationListener#changing(org.eclipse.swt.browser.LocationEvent)
-     */
-    public void changing(LocationEvent event)
-    {
-        if (closure == null) { throw new NullPointerException(
-                "No closure has been configured for this Listener"); 
-        }
-
-        if ("changing".equals(type))
-        {
-            closure.setProperty("event", new CustomLocationEvent(event));
-            closure.call(event);
-        }
-
-    }
-
-    /*
-     * @see org.eclipse.swt.browser.LocationListener#changed(org.eclipse.swt.browser.LocationEvent)
-     */
-    public void changed(LocationEvent event)
-    {
-        if (closure == null) { 
-            throw new NullPointerException(
-                "No closure has been configured for this Action"); 
-        }
-
-        if ("changed".equals(type))
-        {
-            closure.setProperty("event", new CustomLocationEvent(event));
-            closure.call(event);
-        }
-    }
-
-    public class CustomLocationEvent {
-
-        private LocationEvent event;
-
-        public CustomLocationEvent(LocationEvent event)
-        {
-            this.event = event;
-        }
-
-        public String getLocation()
-        {
-            return event.location;
-        }
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ProgressListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ProgressListenerImpl.java
deleted file mode 100644
index 785a05b..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/ProgressListenerImpl.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.swt.browser.ProgressEvent;
-import org.eclipse.swt.browser.ProgressListener;
-
-/**
- * This implementation adds a ProgressListener to a browser widget
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- */
-public class ProgressListenerImpl implements ProgressListener, ClosureSupport {
-
-    private Closure closure;
-
-    private String type;
-
-    /**
-     * @param type
-     */
-    public ProgressListenerImpl(String type) {
-        this.type = type;
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    /*
-     * @see org.eclipse.swt.browser.ProgressListener#changed(org.eclipse.swt.browser.ProgressEvent)
-     */
-    public void changed(ProgressEvent event) {
-
-        if (closure == null) { 
-            throw new NullPointerException(
-                "No closure has been configured for this Listener"); 
-        }
-
-        if ("changed".equals(type)) {
-            closure.setProperty("event", new CustomProgressEvent(event));
-            closure.call(event);
-        }
-
-    }
-
-    /*
-     * @see org.eclipse.swt.browser.ProgressListener#completed(org.eclipse.swt.browser.ProgressEvent)
-     */
-    public void completed(ProgressEvent event) {
-        if (closure == null) { 
-            throw new NullPointerException(
-                "No closure has been configured for this Listener"); 
-        }
-
-        if ("completed".equals(type)) {
-            closure.setProperty("event", new CustomProgressEvent(event));
-            closure.call(event);
-        }
-
-    }
-
-    public class CustomProgressEvent {
-
-        private ProgressEvent event;
-
-        public CustomProgressEvent(ProgressEvent event) {
-            this.event = event;
-        }
-
-        public int getCurrent() {
-            return event.current;
-        }
-
-        public int getTotal() {
-            return event.total;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/StatusTextListenerImpl.java b/groovy/modules/groovy-swt/src/main/groovy/swt/impl/StatusTextListenerImpl.java
deleted file mode 100644
index 628ceab..0000000
--- a/groovy/modules/groovy-swt/src/main/groovy/swt/impl/StatusTextListenerImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package groovy.swt.impl;
-
-import groovy.lang.Closure;
-import groovy.swt.ClosureSupport;
-
-import org.eclipse.swt.browser.StatusTextEvent;
-import org.eclipse.swt.browser.StatusTextListener;
-
-/**
- * This implementation adds a StatusTextListener to a browser widget
- * 
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster</a>
- */
-public class StatusTextListenerImpl implements StatusTextListener, ClosureSupport {
-
-    private Closure closure;
-
-    public Closure getClosure()
-    {
-        return closure;
-    }
-
-    public void setClosure(Closure closure)
-    {
-        this.closure = closure;
-    }
-
-    /*
-     * @see org.eclipse.swt.browser.StatusTextListener#changed(org.eclipse.swt.browser.StatusTextEvent)
-     */
-    public void changed(StatusTextEvent event)
-    {
-        if (closure == null) { 
-            throw new NullPointerException(
-                "No closure has been configured for this Listener"); 
-        }
-        
-        closure.setProperty("event", new CustomStatusTextEvent(event));
-        closure.call(event);
-    }
-
-	public class CustomStatusTextEvent
-	{
-		private StatusTextEvent event;
-		
-		public CustomStatusTextEvent(StatusTextEvent event)
-		{
-			this.event = event;
-		}
-		
-		public String getText()
-		{
-			return event.text;
-		}
-	}
-
-	
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest.java b/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest.java
deleted file mode 100644
index ced080d..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Created on Mar 6, 2004
- *
- */
-package groovy.jface;
-
-import groovy.lang.GroovyObject;
-import groovy.swt.SwtTest;
-import junit.framework.TestCase;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class JFaceBuilderTest extends TestCase {
-    public void testBasic() throws Exception {
-        SwtTest demo = new SwtTest();
-        GroovyObject object = demo.compile("src/test/groovy/jface/JFaceBuilderTest1.groovy");
-        object.invokeMethod("run", null);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest1.groovy b/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest1.groovy
deleted file mode 100644
index a6f52d9..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/jface/JFaceBuilderTest1.groovy
+++ /dev/null
@@ -1,70 +0,0 @@
-package groovy.jface

-

-import groovy.jface.JFaceBuilder

-

-class JFaceBuilderTest1 {

-    property jface    

-    void run() {

-        jface = new JFaceBuilder()

-               

-        jface.applicationWindow() {

-        	toolBarManager()

-        

-        	// Viewers

-        	tableViewer() {

-        		doubleClickListener()

-       			selectionChangedListener()

-        	}

-        	

-        	table {

-				tableViewer()

-        	}

-        	

-        	tableTreeViewer()

-        	tabletree {

-        		tableTreeViewer()

-        	}

-        	

-        	treeViewer()

-        	tree {

-        		treeViewer()

-        	}	

-        	

-        	checkboxTreeViewer()

-        	tree {

-	        	checkboxTreeViewer()	

-        	}

-

-        	// ContributionManager 

-        	menuManager( text:"menuManager" )

-        	

-        	// Action tags

-        	action()

-

-        	// ContributionItem 

-        	separator()

-

-        	// Wizard 

-        	wizardDialog(){

-        		wizardPage( title:"title" )

-        	}

-

-        	// Preferences

-        	preferenceDialog(  ) {

-        		preferencePage( filename:"src/test/groovy/jface/test.properties", title:"myprefs" ) {

-	        		booleanFieldEditor( propertyName:"prop", title:"none" )

-    	    		colorFieldEditor( propertyName:"prop", title:"none" )

-   					directoryFieldEditor( propertyName:"prop", title:"none" )

-	        		fileFieldEditor( propertyName:"prop", title:"none" )

-	        		fontFieldEditor( propertyName:"prop", title:"none" )

-    	    		integerFieldEditor( propertyName:"prop", title:"none" )

-    	    		stringFieldEditor( propertyName:"prop", title:"none" )

-    	    	}

-    	    }

-

-        	image( src:"src/test/groovy/swt/groovy-logo.png" )

-        }

-	}

-}

-

-

diff --git a/groovy/modules/groovy-swt/src/test/groovy/jface/test.properties b/groovy/modules/groovy-swt/src/test/groovy/jface/test.properties
deleted file mode 100644
index e69de29..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/jface/test.properties
+++ /dev/null
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest.java b/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest.java
deleted file mode 100644
index a09e52c..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Created on Mar 6, 2004
- *
- */
-package groovy.swt;
-
-import groovy.lang.GroovyObject;
-import junit.framework.TestCase;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> 
- * $Id$
- */
-public class SwtBuilderTest extends TestCase {
-    public void testBasic() throws Exception {
-        SwtTest demo = new SwtTest();
-        GroovyObject object = demo.compile("src/test/groovy/swt/SwtBuilderTest1.groovy");
-        object.invokeMethod("run", null);
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest1.groovy b/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest1.groovy
deleted file mode 100644
index 9d46f69..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtBuilderTest1.groovy
+++ /dev/null
@@ -1,133 +0,0 @@
-package groovy.swt

-

-import groovy.swt.SwtBuilder

-

-class SwtBuilderTest1 {

-    property swt    

-    void run() {

-        swt = new SwtBuilder()

-        swt.shell(){        	

-       		button()

-        	canvas()

-        	caret()

-	        combo()

-        	composite()

-        	scrolledComposite()

-        	coolBar() {

-	        	coolItem()

-	        }

-        	decorations()

-        	group()

-        	label()

-        	list()

-        	link()

-        	menu() {

-				menuSeparator()

-				menuItem()

-			}

-			messageBox()

-			progressBar()

-			sash()

-			scale()

-			slider()

-			tabFolder() {

-				tabItem()

-			}

-			table() {

-				tableColumn()

-				tableItem()

-			}

-			text()

-			toolBar(){

-				toolItem()

-			}

-			tracker()

-			tray() {

-				trayItem()

-			}

-			tree(){

-				treeItem()

-			}

-			cBanner()

-        	cCombo()

-			cLabel()

-			cTabFolder() {

-				cTabItem()

-			}

-			tableTree() {

-				tableTreeItem()

-			}

-			fillLayout()

-			gridLayout()

-			rowLayout()

-			gridData()

-			rowData()

-			colorDialog()

-			directoryDialog()

-			fileDialog()

-			fontDialog()

-			onEvent( type:"Selection" )

-			onEvent( type:"Paint" )

-			onEvent( type:"DefaultSelection" )

-			onEvent( type:"Dispose" )

-			onEvent( type:"FocusIn" )

-			onEvent( type:"FocusOut" )

-			onEvent( type:"Hide" )

-			onEvent( type:"Show" )

-			onEvent( type:"KeyDown" )

-			onEvent( type:"KeyUp" )

-			onEvent( type:"MouseDown" )

-			onEvent( type:"MouseUp" )

-			onEvent( type:"MouseDoubleClick" )

-			onEvent( type:"MouseMove" )

-			onEvent( type:"Resize" )

-			onEvent( type:"Move" )

-			onEvent( type:"Close" )

-			onEvent( type:"Activate" )

-			onEvent( type:"Iconify" )

-			onEvent( type:"Deiconify" )

-			onEvent( type:"Deactivate" )

-			onEvent( type:"Expand" )

-			onEvent( type:"Collapse" )

-			onEvent( type:"Modify" )

-			onEvent( type:"Verify" )

-			onEvent( type:"Help" )

-			onEvent( type:"Arm" )

-			onEvent( type:"MouseExit" )

-			onEvent( type:"MouseEnter" )

-			onEvent( type:"MouseHover" )

-			onEvent( type:"Traverse" )

-			image( src:"src/test/groovy/swt/groovy-logo.png" )

-			browser() {

-				locationListener()

-				progressListener()

-				statusTextListener()

-			}	

-			form(){

-				toolBarManager()

-				

-				formButton()

-				formComposite()

-				formCompositeSeparator()

-				formExpandableComposite()

-				formText()

-				formHyperlink(){

-					hyperlinkListener()

-				}

-				formImageHyperlink()

-				formLabel()

-				formPageBook()

-				formSection(){

-					expansionListener()

-				}

-				formSeparator()

-				formTable()

-				formFormattedText()

-				formTree()

-				tableWrapLayout()

-				tableWrapData()

-			}

-			scrolledForm()

-        }

-	}

-}

diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtTest.java b/groovy/modules/groovy-swt/src/test/groovy/swt/SwtTest.java
deleted file mode 100644
index 172556f..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/SwtTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Created on Feb 25, 2004
- *
- */
-package groovy.swt;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-
-import java.io.File;
-
-import junit.framework.TestCase;
-
-import org.eclipse.jface.window.ApplicationWindow;
-import org.eclipse.swt.widgets.Shell;
-
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class SwtTest extends TestCase {
-    public GroovyObject compile(String fileName) throws Exception {
-        GroovyClassLoader loader = new GroovyClassLoader();
-        Class groovyClass = loader.parseClass(new File(fileName));
-        GroovyObject object = (GroovyObject) groovyClass.newInstance();
-        assertTrue(object != null);
-        return object;
-    }
-    
-    public void testSwt() {
-        Shell shell = new Shell();
-        shell.dispose();
-    }
-    
-    public void testJFace() {
-        Shell shell = new Shell();
-        ApplicationWindow window = new ApplicationWindow(shell);
-        shell.dispose();
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/groovy-logo.png b/groovy/modules/groovy-swt/src/test/groovy/swt/groovy-logo.png
deleted file mode 100644
index 54af4c1..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/groovy-logo.png
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/DynamicUIBuilder.java b/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/DynamicUIBuilder.java
deleted file mode 100644
index bea03a8..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/DynamicUIBuilder.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Created on Mar 7, 2004
- *
- */
-package groovy.swt.scrapbook;
-
-import groovy.jface.JFaceBuilder;
-
-import java.util.Map;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster</a> 
- * $Id$
- */
-public class DynamicUIBuilder extends JFaceBuilder {
-    public DynamicUIBuilder() {
-        super();
-    }
-
-    /*
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object)
-     */
-    public Object createNode(Object name) {
-//        System.out.println("createNode: " + name);
-        return super.createNode(name);
-    }
-
-    /* 
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object, java.util.Map)
-     */
-    protected Object createNode(Object name, Map attributes) {
-        System.out.println("createNode: " + name + " [attributes:]  " + attributes);
-        return super.createNode(name, attributes);
-    }
-
-    /* 
-     * @see groovy.util.BuilderSupport#createNode(java.lang.Object, java.lang.Object)
-     */
-    protected Object createNode(Object name, Object parent) {
-        System.out.println("createNode: " + name + " [parent:] " + parent);
-        return super.createNode(name, parent);
-    }
-
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObject.java b/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObject.java
deleted file mode 100644
index fe02c53..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObject.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Created on Mar 7, 2004
- *
- */
-package groovy.swt.scrapbook;
-
-/**
- * @author <a href:ckl at dacelo.nl">Christiaan ten Klooster </a> $Id$
- */
-public class NamedObject {
-    private String name = "empty name";
-    private String description = "empty desc";
-    private String value = "empty value";
-
-    /**
-     * @return Returns the description.
-     */
-    public String getDescription() {
-        return description;
-    }
-
-    /**
-     * @param description
-     *            The description to set.
-     */
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    /**
-     * @return Returns the name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @param name
-     *            The name to set.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * @return Returns the value.
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * @param value
-     *            The value to set.
-     */
-    public void setValue(String value) {
-        this.value = value;
-    }
-}
diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObjectUI.groovy b/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObjectUI.groovy
deleted file mode 100644
index fe83f1f..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/NamedObjectUI.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-

-builder.composite( parent ) {

-

-	gridLayout( numColumns:2 )

-	

-	gridData( style:"fill_both" )

-	label( style:"none", text:obj.description ) {

-		gridData( style:"fill_both" )

-	}

-        	

-	text( style:"Border", text:obj.value ) 

-

-}

-

diff --git a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/RunDynamicUIDemo.java b/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/RunDynamicUIDemo.java
deleted file mode 100644
index 6f19c67..0000000
--- a/groovy/modules/groovy-swt/src/test/groovy/swt/scrapbook/RunDynamicUIDemo.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package groovy.swt.scrapbook;
-
-import groovy.lang.Binding;
-import groovy.swt.SwtTest;
-import groovy.util.GroovyScriptEngine;
-
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
- * @version $Revision$
- */
-public class RunDynamicUIDemo extends SwtTest {
-    public void testBasic() throws Exception {
-        NamedObject namedObject = new NamedObject();
-        
-//        Shell parent = new Shell();
-        DynamicUIBuilder builder  = new DynamicUIBuilder();
-        Shell shell = (Shell) builder.createNode("shell");
-        
-        Binding binding = new Binding();
-        binding.setVariable("obj", namedObject);
-        binding.setVariable("builder", builder);
-        binding.setVariable("parent", shell);
-        
-        GroovyScriptEngine scriptEngine = new GroovyScriptEngine("src/test/groovy/swt/dynamvc/");
-        Object object = scriptEngine.run("NamedObjectUI.groovy", binding);
-
-        shell.open();
-        while (!shell.isDisposed()) {
-            if (!shell.getDisplay().readAndDispatch()) {
-                shell.getDisplay().sleep();
-            }
-        }
-    }
-}
diff --git a/groovy/modules/groovysoap/ChangeLog b/groovy/modules/groovysoap/ChangeLog
deleted file mode 100644
index 03bcac1..0000000
--- a/groovy/modules/groovysoap/ChangeLog
+++ /dev/null
@@ -1,9 +0,0 @@
-Tue Feb 21 20:58:13 CET 2006 Guillaume Alleon <guillaume.alleon@gmail.com>
-
-	* Creation of the new gsoap module
-
-Sun Apr 23 10:49:26 CET 2006 Guillaume Alleon <guillaume.alleon@gmail.com>
-
-	* Rename module gsoap in groovy.net.groovysoap
-        * Add capability to define WebService from Plain Groovy Script
-        * Upgrade to XFire-1.1-SNAPSNOT to correct some bugs (XFIRE-331, XFIRE-343
\ No newline at end of file
diff --git a/groovy/modules/groovysoap/README.txt b/groovy/modules/groovysoap/README.txt
deleted file mode 100644
index b0c579d..0000000
--- a/groovy/modules/groovysoap/README.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-GETTING STARTED
-
-================================================================
-== Installing gsoap
-================================================================
-
-The build process is handled throug Ant.
-
-In order to build and test gsoapx run
-  > ant run 
-
-A test is located in src/test/Test1.groovy
-Test results are located in build/test-reports/
-
-================================================================
-== Using gsoap
-================================================================
-
-Currently there is no deployment procedure ;-(
-The gsoap  jarfile is located in build/jar and dependencies are located 
-in lib/
-
diff --git a/groovy/modules/groovysoap/TODO.txt b/groovy/modules/groovysoap/TODO.txt
deleted file mode 100644
index 6e0e19e..0000000
--- a/groovy/modules/groovysoap/TODO.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-* Handle properly the namespaces
-
-* Have you any suggestion ?
diff --git a/groovy/modules/groovysoap/build.properties b/groovy/modules/groovysoap/build.properties
deleted file mode 100644
index 973dd90..0000000
--- a/groovy/modules/groovysoap/build.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-# Sample ResourceBundle properties file
-activation.jar=lib/activation-1.0.2.jar
-antlr.jar=lib/antlr-2.7.5.jar
-asm.jar=lib/asm-2.2.jar
-asm-analysis.jar=lib/asm-analysis-2.2.jar
-asm-attrs.jar=lib/asm-attrs-2.2.jar
-asm-tree.jar=lib/asm-tree-2.2.jar
-asm-util.jar=lib/asm-util-2.2.jar
-commons-codec.jar=lib/commons-codec-1.3.jar
-commons-httpclient.jar=lib/commons-httpclient-3.0.jar
-commons-logging.jar=lib/commons-logging-1.0.4.jar
-groovy-all.jar=lib/groovy-all-1.0-RC-01-SNAPSHOT.jar
-jarjar.jar=lib/jarjar-0.7.jar
-javamail.jar=lib/javamail-1.3.2.jar
-jaxen.jar=lib/jaxen-1.1-beta-8.jar
-jdom.jar=lib/jdom-1.0.jar
-log4j.jar=lib/log4j-1.2.8.jar
-org.mortbay.jetty.jar=lib/org.mortbay.jetty-5.1.3.jar
-servletapi.jar=lib/servletapi-2.3.jar
-stax-api.jar=lib/stax-api-1.0.jar
-wsdl4j.jar=lib/wsdl4j-1.5.2.jar
-wstx-asl.jar=lib/wstx-asl-2.9.jar
-xfire-aegis.jar=lib/xfire-aegis-1.1.jar
-xfire-core.jar=lib/xfire-core-1.1.jar
-xfire-java5.jar=lib/xfire-java5-1.1.jar
-xfire-xmlbeans.jar=lib/xfire-xmlbeans-1.1.jar
-XmlSchema.jar=lib/XmlSchema-1.0.2.jar
-#
-jar.compress=false
-#
-xfire.classpath=\
-    ${org.mortbay.jetty.jar}:\
-    ${log4j.jar}:\
-    ${wsdl4j.jar}:\
-    ${xfire-core.jar}:\
-    ${xfire-java5.jar}:\
-    ${XmlSchema.jar}:\
-    ${commons-logging.jar}:\
-    ${servletapi.jar}:\
-    ${stax-api.jar}:\
-    ${wstx-asl.jar}:\
-    ${activation.jar}:\
-    ${javamail.jar}:\
-    ${jaxen.jar}:\
-    ${jdom.jar}:\
-    ${xfire-aegis.jar}:\
-    ${xfire-xmlbeans.jar}:\
-    ${commons-httpclient.jar}:\
-    ${commons-codec.jar}
-#
-groovy.classpath=\
-    ${groovy-all.jar}:\
-    ${asm.jar}:\
-    ${asm-analysis.jar}:\
-    ${asm-attrs.jar}:\
-    ${asm-tree.jar}:\
-    ${asm-util.jar}:\
-    ${antlr.jar}
-#
-javac.classpath=\
-   ${xfire.classpath}:\
-   ${groovy.classpath}
-#
-src.dir=src/main/
-src.test.dir=src/test/
-classes.dir=${build.dir}/classes
-test.classes.dir=${classes.dir}/test
-build.dir=build
-jar.dir=${build.dir}/jar
-javadoc.dir=doc
-javadoc.packages="groovy.net.soap.*"
-test.reports=build/test-reports
diff --git a/groovy/modules/groovysoap/build.xml b/groovy/modules/groovysoap/build.xml
deleted file mode 100644
index 68091bb..0000000
--- a/groovy/modules/groovysoap/build.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="groovysoap" basedir="." default="main">
-    <!--
-    <taskdef name="groovy"  classname="org.codehaus.groovy.ant.Groovy" />
-    -->
-    
-    <property file="build.properties" />
-    <!--
-    <echo message="javac-classpath: ${javac.classpath}" />
-    -->
-    <path id="test.classpath">
-        <pathelement location="${javac.classpath}"/>
-        <pathelement location="${test.classes.dir}"/>
-    </path>
-
-    <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpath="${javac.classpath}"/>
-    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpath="${javac.classpath}"/>
- 
-    <target name="init">
-        <property file="build.properties"/>
-        <tstamp/>
-        <property name="version" value="${DSTAMP}"/>
-    </target>
-
-    <target name="clean" depends="init">
-        <delete dir="${build.dir}"/>
-        <delete dir="${javadoc.dir}"/>
-    </target>
-
-    <target name="compile" depends="init">
-        <mkdir dir="${classes.dir}"/>
-        <javac srcdir="${src.dir}" destdir="${classes.dir}">
-            <classpath>
-                <path path="${javac.classpath}"/>
-            </classpath>
-        </javac>
-    </target>
-    
-    <target name="compile-test" depends="init,compile">
-        <javac srcdir="${src.test.dir}" destdir="${classes.dir}">
-            <classpath>
-                <path path="${javac.classpath}"/>
-            </classpath>
-        </javac>
-        <groovyc destdir="${classes.dir}" >
-            <src path="${src.test.dir}"/>
-            <classpath>
-                <path path="${javac.classpath}"/>
-                <path path="${classes.dir}"/>
-            </classpath>
-        </groovyc>
-    </target>
-    
-    <target name="jar" depends="compile">
-        <mkdir dir="${jar.dir}"/>
-        <jar destfile="${jar.dir}/${ant.project.name}-${version}.jar">
-            <manifest>
-                <attribute name="Main-Class" value="${main-class}"/>
-            </manifest>
-            <fileset dir="${classes.dir}" includes="groovy/**"/>
-            <fileset dir="." includes="log4j.properties"/>
-        </jar>
-	<taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" classpath="${jarjar.jar}"/>
-        <jarjar jarfile="${jar.dir}/${ant.project.name}-all-${version}.jar">
-            <manifest>
-                <attribute name="Main-Class" value="${main-class}"/>
-            </manifest>
-            <fileset dir="${classes.dir}" includes="groovy/**"/>
-            <zipfileset src="${org.mortbay.jetty.jar}"/>
-            <zipfileset src="${log4j.jar}"/>
-            <zipfileset src="${wsdl4j.jar}"/>
-            <zipfileset src="${xfire-core.jar}"/>
-            <zipfileset src="${xfire-java5.jar}"/>
-            <zipfileset src="${XmlSchema.jar}"/>
-            <zipfileset src="${commons-logging.jar}"/>
-            <zipfileset src="${servletapi.jar}"/>
-            <zipfileset src="${stax-api.jar}"/>
-            <zipfileset src="${wstx-asl.jar}"/>
-            <zipfileset src="${jaxen.jar}"/>
-            <zipfileset src="${jdom.jar}"/>
-            <zipfileset src="${xfire-aegis.jar}"/>
-            <zipfileset src="${xfire-xmlbeans.jar}"/>
-            <zipfileset src="${commons-httpclient.jar}"/>
-            <zipfileset src="${commons-codec.jar}"/>
-        </jarjar>
-    </target>
-    
-    <target name="docs" depends="init" description="generate documentation">
-        <mkdir dir="${javadoc.dir}" />
-        <javadoc destdir="${javadoc.dir}"  packagenames="groovy.net.soap.*">
-            <!--destdir="${javadoc.dir}"
-            packagenames="${javadoc.packages}"
-            use="true"
-            windowtitle="gsoap"
-            private="true" -->
-            <classpath>
-                <path path="${javac.classpath}"/>
-                <path path="${classes.dir}"/>
-            </classpath>
-            <sourcepath>
-                <pathelement location="${src.dir}"/>
-            </sourcepath>
-        </javadoc>
-    </target>
-
-    <target name="run" depends="jar,compile-test">
-        <delete dir="${test.reports}"/>
-        <mkdir dir="${test.reports}"/>
-        <!--
-        <parallel>
-            <java classname="test.SoapServer" fork="true">
-                <jvmarg value="-Dlog4j.configuration=${src.test.dir}log4j.properties" />
-                <classpath>
-                    <path path="${javac.classpath}"/>
-                    <pathelement location="${classes.dir}" />
-                </classpath>
-            </java>
-            -->
-            <sequential>
-                <!--
-                <waitfor maxwait="10" maxwaitunit="second" >
-                    <http url="http://localhost:6969/PersonService?wsdl"/>
-                </waitfor>
-                -->
-                <junit>
-                    <classpath>
-                        <path path="${javac.classpath}"/>
-                        <pathelement location="${classes.dir}" />
-                    </classpath>
-                    <formatter type="brief" />
-                    <batchtest todir="${test.reports}" fork="yes" failureproperty="test.failure">
-                        <fileset dir="${classes.dir}" includes="**/Test*.class"/>
-                    </batchtest>
-                </junit>
-                <fail if="test.failure">The tests failed. Have a look at ${test.reports}</fail>
-            </sequential>
-            <!--
-            <groovy src="${src.test.scripts}client1.groovy"/>
-            -->
-        <!--
-        </parallel>
-        -->
-    </target>
-    
-    <target name="clean-build" depends="clean,jar"/>
-
-    <target name="main" depends="clean,run"/>
-
-</project>
diff --git a/groovy/modules/groovysoap/lib/XmlSchema-1.0.2.jar b/groovy/modules/groovysoap/lib/XmlSchema-1.0.2.jar
deleted file mode 100644
index 4afc3b3..0000000
--- a/groovy/modules/groovysoap/lib/XmlSchema-1.0.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/activation-1.0.2.jar b/groovy/modules/groovysoap/lib/activation-1.0.2.jar
deleted file mode 100644
index ab80b38..0000000
--- a/groovy/modules/groovysoap/lib/activation-1.0.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/antlr-2.7.5.jar b/groovy/modules/groovysoap/lib/antlr-2.7.5.jar
deleted file mode 100644
index fbe5e3c..0000000
--- a/groovy/modules/groovysoap/lib/antlr-2.7.5.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/asm-2.2.jar b/groovy/modules/groovysoap/lib/asm-2.2.jar
deleted file mode 100644
index d4de0ec..0000000
--- a/groovy/modules/groovysoap/lib/asm-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/asm-analysis-2.2.jar b/groovy/modules/groovysoap/lib/asm-analysis-2.2.jar
deleted file mode 100644
index e318c53..0000000
--- a/groovy/modules/groovysoap/lib/asm-analysis-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/asm-attrs-2.2.jar b/groovy/modules/groovysoap/lib/asm-attrs-2.2.jar
deleted file mode 100644
index e812ad5..0000000
--- a/groovy/modules/groovysoap/lib/asm-attrs-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/asm-tree-2.2.jar b/groovy/modules/groovysoap/lib/asm-tree-2.2.jar
deleted file mode 100644
index acf9564..0000000
--- a/groovy/modules/groovysoap/lib/asm-tree-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/asm-util-2.2.jar b/groovy/modules/groovysoap/lib/asm-util-2.2.jar
deleted file mode 100644
index 728125d..0000000
--- a/groovy/modules/groovysoap/lib/asm-util-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/commons-codec-1.3.jar b/groovy/modules/groovysoap/lib/commons-codec-1.3.jar
deleted file mode 100644
index 957b675..0000000
--- a/groovy/modules/groovysoap/lib/commons-codec-1.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/commons-httpclient-3.0.jar b/groovy/modules/groovysoap/lib/commons-httpclient-3.0.jar
deleted file mode 100644
index 54a9300..0000000
--- a/groovy/modules/groovysoap/lib/commons-httpclient-3.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/commons-logging-1.0.4.jar b/groovy/modules/groovysoap/lib/commons-logging-1.0.4.jar
deleted file mode 100644
index b73a80f..0000000
--- a/groovy/modules/groovysoap/lib/commons-logging-1.0.4.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/groovy-all-1.0-RC-01-SNAPSHOT.jar b/groovy/modules/groovysoap/lib/groovy-all-1.0-RC-01-SNAPSHOT.jar
deleted file mode 100644
index 6ca3319..0000000
--- a/groovy/modules/groovysoap/lib/groovy-all-1.0-RC-01-SNAPSHOT.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/jarjar-0.7.jar b/groovy/modules/groovysoap/lib/jarjar-0.7.jar
deleted file mode 100644
index abf377a..0000000
--- a/groovy/modules/groovysoap/lib/jarjar-0.7.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/javamail-1.3.2.jar b/groovy/modules/groovysoap/lib/javamail-1.3.2.jar
deleted file mode 100644
index b0bce12..0000000
--- a/groovy/modules/groovysoap/lib/javamail-1.3.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/jaxen-1.1-beta-8.jar b/groovy/modules/groovysoap/lib/jaxen-1.1-beta-8.jar
deleted file mode 100644
index 6b007d9..0000000
--- a/groovy/modules/groovysoap/lib/jaxen-1.1-beta-8.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/jdom-1.0.jar b/groovy/modules/groovysoap/lib/jdom-1.0.jar
deleted file mode 100644
index 288e64c..0000000
--- a/groovy/modules/groovysoap/lib/jdom-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/log4j-1.2.8.jar b/groovy/modules/groovysoap/lib/log4j-1.2.8.jar
deleted file mode 100644
index 493a3cc..0000000
--- a/groovy/modules/groovysoap/lib/log4j-1.2.8.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/org.mortbay.jetty-5.1.3.jar b/groovy/modules/groovysoap/lib/org.mortbay.jetty-5.1.3.jar
deleted file mode 100644
index 91c2f2a..0000000
--- a/groovy/modules/groovysoap/lib/org.mortbay.jetty-5.1.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/servletapi-2.3.jar b/groovy/modules/groovysoap/lib/servletapi-2.3.jar
deleted file mode 100644
index cd5b351..0000000
--- a/groovy/modules/groovysoap/lib/servletapi-2.3.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/stax-api-1.0.jar b/groovy/modules/groovysoap/lib/stax-api-1.0.jar
deleted file mode 100644
index 8687bd3..0000000
--- a/groovy/modules/groovysoap/lib/stax-api-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/wsdl4j-1.5.2.jar b/groovy/modules/groovysoap/lib/wsdl4j-1.5.2.jar
deleted file mode 100644
index 2877271..0000000
--- a/groovy/modules/groovysoap/lib/wsdl4j-1.5.2.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/wstx-asl-2.9.jar b/groovy/modules/groovysoap/lib/wstx-asl-2.9.jar
deleted file mode 100644
index 09d96c6..0000000
--- a/groovy/modules/groovysoap/lib/wstx-asl-2.9.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/xfire-aegis-1.1.jar b/groovy/modules/groovysoap/lib/xfire-aegis-1.1.jar
deleted file mode 100755
index 3d48ee2..0000000
--- a/groovy/modules/groovysoap/lib/xfire-aegis-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/xfire-core-1.1.jar b/groovy/modules/groovysoap/lib/xfire-core-1.1.jar
deleted file mode 100755
index 0818627..0000000
--- a/groovy/modules/groovysoap/lib/xfire-core-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/xfire-java5-1.1.jar b/groovy/modules/groovysoap/lib/xfire-java5-1.1.jar
deleted file mode 100755
index 0e42af8..0000000
--- a/groovy/modules/groovysoap/lib/xfire-java5-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/lib/xfire-xmlbeans-1.1.jar b/groovy/modules/groovysoap/lib/xfire-xmlbeans-1.1.jar
deleted file mode 100755
index 021e4aa..0000000
--- a/groovy/modules/groovysoap/lib/xfire-xmlbeans-1.1.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/groovysoap/src/main/groovy/net/soap/PublicMethodNotFoundException.java b/groovy/modules/groovysoap/src/main/groovy/net/soap/PublicMethodNotFoundException.java
deleted file mode 100644
index fa3ad6e..0000000
--- a/groovy/modules/groovysoap/src/main/groovy/net/soap/PublicMethodNotFoundException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package groovy.net.soap;
-/*
- * PublicMethodNotFoundException.java
- *
- * Created on 23 avril 2006, 08:29
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-/**
- *
- * @author SU16766
- */
-public class PublicMethodNotFoundException extends RuntimeException {
-    
-    /** Creates a new instance of PublicMethodNotFoundException */
-    public PublicMethodNotFoundException(String message) {
-        super(message);
-    }
-    
-    public PublicMethodNotFoundException(String message, Throwable cause) {
-        super(message, cause);
-    }
-    
-    public String getMessage() {
-        return super.getMessage() + getLocationText();
-    }
-    
-    protected String getLocationText() {
-        String answer = ". ";
-        
-        if (answer.equals(". ")) {
-            return "";
-        }
-        return answer;
-    }
-}
diff --git a/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapClient.java b/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapClient.java
deleted file mode 100644
index b3dbf86..0000000
--- a/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapClient.java
+++ /dev/null
@@ -1,363 +0,0 @@
-package groovy.net.soap;
-
-import java.io.FileInputStream;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import javax.xml.transform.TransformerException;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.xfire.client.Client;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.GroovyShell;
-
-import org.apache.log4j.Logger;
-
-import org.codehaus.xfire.util.DOMUtils;
-/**
- * <p>Dynamic Groovy proxy around Xfire stack.</p>
- *
- * @author Guillaume Alleon
- *
- */
-public class SoapClient extends GroovyObjectSupport {
-    
-    private Client client;
-    static private Logger logger=Logger.getLogger(SoapClient.class);
-    /**
-     * <p>Transform a string so that it can be used in a Groovy
-     * bean. Whitespace are removed and  the first letter is
-     * replaced by its lower case counterpart.</p>
-     * <p/>
-     *
-     * @param str the string to be uncapitalized.
-     */
-    private static String uncapitalize(String str) {
-        int len = str.length();
-        StringBuffer buffer = new StringBuffer(len);
-        
-        for (int i = 0; i < len; i++) {
-            char ch = str.charAt(i);
-            
-            if (i != 0) {
-                if (ch != ' ' && ch != ':') buffer.append(ch);
-            } else {
-                buffer.append(Character.toLowerCase(ch));
-            }
-        }
-        return buffer.toString();
-    }
-    /**
-     * <p>Generate a Map representing the data types corresponding
-     * to the XML document</p>
-     * <p/>
-     *
-     * @param node a Node of tha XML document.
-     * @param type a Map representing the datatypes
-     */
-    private void generateType(Node node, Map type) {
-        // TODO rajouter le test d'existence
-        if (node.hasChildNodes() && !type.containsKey(node.getNodeName())) {
-            Map members = new HashMap();
-            NodeList children = node.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++){
-                Node n = children.item(i);
-                if (n.getNodeType()==Node.ELEMENT_NODE) {
-                  Integer valence = (Integer)members.get(n.getNodeName());
-                  if (valence == null) {
-                    valence = new Integer(1);
-                  } else {
-                    valence ++;
-                  }
-                  members.put(n.getNodeName(), valence);
-                }
-                generateType(n, type);
-            }
-            if(members.size()!=0)
-                type.put(node.getNodeName(), members);
-        }
-    }
-    /**
-     * <p>Transform the xfire response to a java/groovy type
-     * by generating and interpreting a Groovy script when a
-     * XML document</p>
-     * <p/>
-     *
-     * @param obj the xfire response.
-     */
-    private Object toReturn(Object obj) {
-        if (obj instanceof Document) {
-
-            Map type = new HashMap();
-            StringBuffer classSource = new StringBuffer();
-            
-            // Extract the root node from the Document
-            Element root = ((Document) obj).getDocumentElement();
-
-            // Clean the XML document
-            cleanNode(root);
-
-//          if (logger.isDebugEnabled()) {
-//              try {
-//                  DOMUtils.writeXml((Node) root, System.out);
-//              } catch (TransformerException ex) {
-//                  ex.printStackTrace();
-//              }
-//          }
-
-            // generate a map that associates to each type its members
-            generateType(root, type);
-
-            // Test if we have a complex type
-            if ((type.keySet().size() != 1) || (((Map)type.get(root.getNodeName())).keySet().size() != 1)) {
-                for (Iterator iterator = type.keySet().iterator(); iterator.hasNext();) {
-                    String aType = (String) iterator.next();
-//                  classSource.append("class ")
-//                  .append(uncapitalize(aType))
-//                  .append(" {\n");
-                    String tt = new String(uncapitalize(aType));
-                    if ("return".equals(tt)) tt = "out";
-                    classSource.append("class ")
-                    .append(tt)
-                    .append(" {\n");
-                    Map members = (Map) type.get(aType);
-                    for (Iterator it1 = members.keySet().iterator(); it1.hasNext();) {
-                        String member = (String)it1.next();
-                        classSource.append("  @Property ");
-                        if ((Integer)members.get(member) > 1) classSource.append("List ");
-                        classSource.append(uncapitalize(member))
-                        .append("\n");
-                    }
-                    classSource.append("}\n");
-                }
-            }
-
-            // Test if the return type is different from void
-            if (type.get(root.getNodeName()) != null) {
-              classSource.append("result = ");
-              createCode(root, type, classSource);
-            }
-
-            if (logger.isDebugEnabled()) logger.debug(classSource);
-
-            Binding binding = new Binding();
-            
-            try {
-                Object back = new GroovyShell(binding).evaluate(classSource.toString());
-                if (logger.isDebugEnabled()) logger.debug(back.toString());
-                return back;
-            } catch (CompilationFailedException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-            
-            return null;
-        } else {
-            if (logger.isDebugEnabled()) logger.debug("returned object is of type " + obj.getClass().getName());
-            return obj;
-        }
-    }
-    
-    /**
-     * <p>Remove dead text in an XML tree.</p>
-     * <p/>
-     *
-     * @param element the considered element of the XML document.
-     */
-    private void cleanNode(Element element){
-        // TODO rajouter le test d'existence
-        Node child;
-        Node next = (Node)element.getFirstChild();
-        
-        while ((child = next) != null){
-            next = child.getNextSibling();
-            if (child.getNodeType() == Node.TEXT_NODE) {
-                if (child.getNodeValue().trim().length() == 0) element.removeChild(child);
-            } else if (child.getNodeType() == Node.ELEMENT_NODE) {
-                cleanNode((Element)child);
-            }
-        }
-    }
-    
-    /**
-     * <p>Create instances of the data types previously generated
-     * from the XML document.</p>
-     *
-     * @param element     Element of the XML document.
-     * @param classSource StringBuffer containing the generated code.
-     */
-    private void createCode(Element root, Map type, StringBuffer classSource){
-        if ((type.keySet().size() == 1) && (((Map)type.get(root.getNodeName())).keySet().size() == 1)) {
-            createCodeST(root, classSource);
-        } else {
-            createCodeCT(root, type, classSource);
-        }
-    }
-
-    /**
-     * <p>Create Complex types instances of the data types previously generated
-     * from the XML document.</p>
-     *
-     * @param element     Element of the XML document.
-     * @param classSource StringBuffer containing the generated code.
-     */
-    private void createCodeCT(Element element, Map type, StringBuffer classSource){
-        Node child = null;
-        Node fnode = (Node)element.getFirstChild();
-        Node lnode = (Node)element.getLastChild();
-        
-        Node next = fnode;
-        Node prev = null;
-
-        boolean opened = false;
-
-        Map  members = (Map)type.get(element.getNodeName());
-        
-        if (logger.isDebugEnabled()) logger.debug("Entering createCode");
-        
-        String tt = new String(uncapitalize(element.getNodeName()));
-        if ("return".equals(tt)) tt = "out";
-
-        if (members == null) {
-            classSource.append("\"\"");
-        } else {
-//          classSource.append("new " + uncapitalize(element.getNodeName()) + "(");
-            classSource.append("new " + tt + "(");
-
-            while ((child = next) != null){
-                next = child.getNextSibling();
- 
-                if (!opened) {
-                    classSource.append(uncapitalize(child.getNodeName()) + ":");
-                    if ((Integer)members.get(child.getNodeName()) > 1) {
-                      classSource.append("[");
-                      opened = true;
-                    }
-                }
-
-                if (child.hasChildNodes() && (child.getChildNodes().getLength() == 1) && (child.getFirstChild().getNodeType() == Node.TEXT_NODE)) {
-                    // Test for the depth 
-                    classSource.append("\""+child.getFirstChild().getNodeValue()+"\"");
-                } else {
-                    createCodeCT((Element)child, type, classSource);
-                }
-           
-                if (child != lnode) {
-                    classSource.append(",");
-                }
-            
-                prev = child;
-            
-            }
-            if (opened) classSource.append("]");
-            classSource.append(")");
-        }
-    }
-
-    /**
-     * <p>Create Simple types instances of the data types previously generated
-     * from the XML document.</p>
-     *
-     * @param element     Element of the XML document.
-     * @param classSource StringBuffer containing the generated code.
-     */
-    private void createCodeST(Element element, StringBuffer classSource){
-        Node child = null;
-        Node fnode = (Node)element.getFirstChild();
-        Node lnode = (Node)element.getLastChild();
-        
-        Node next = fnode;
-        Node prev = null;
-
-        boolean opened = false;
-
-        if (logger.isDebugEnabled()) logger.debug("Entering createCodeST");
-        
-        classSource.append("[");
-
-        while ((child = next) != null){
-          next = child.getNextSibling();
-
-          classSource.append("\""+child.getFirstChild().getNodeValue()+"\"");
-           
-          if (child != lnode) {
-              classSource.append(",");
-          }
-            
-          prev = child;
-            
-        }
-        classSource.append("]");
-    }
-
-    /**
-     * Invoke a method on a gsoap component using the xfire
-     * dynamic client </p>
-     * <p>Example of Groovy code:</p>
-     * <code>
-     * client = new SoapClient("http://www.webservicex.net/WeatherForecast.asmx?WSDL")
-     * def answer = client.GetWeatherByPlaceName("Seattle")
-     * </code>
-     *
-     * @param name name of the method to call
-     * @param args parameters of the method call
-     * @return the value returned by the method call
-     */
-    public Object invokeMethod(String name, Object args) {
-        Object[] objs = InvokerHelper.getInstance().asArray(args);
-
-        try {
-            Object[] response = client.invoke(name, objs);
-
-            // TODO Parse the answer
-            if (response.length == 0) {
-              return true;
-            } else {
-              return toReturn(response[0]);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-        
-    }
-
-    Object testGoogle(String fileName) {
-        try {
-            return toReturn(DOMUtils.readXml(new FileInputStream(fileName)));
-        } catch(Exception ex){
-            ex.printStackTrace();
-        }
-        return null;
-    }
-
-    public SoapClient() {}
-
-    /**
-     * Create a SoapClient using a URL
-     * <p>Example of Groovy code:</p>
-     * <code>
-     * client = new SoapClient("http://www.webservicex.net/WeatherForecast.asmx?WSDL")
-     * </code>
-     *
-     * @param URLLocation the URL pointing to the WSDL
-     */
-    public SoapClient(String URLLocation){
-        try {
-            client = new Client(new URL(URLLocation));
-        } catch (Exception e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
-    }
-    
-}
diff --git a/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapServer.java b/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapServer.java
deleted file mode 100644
index 236ec52..0000000
--- a/groovy/modules/groovysoap/src/main/groovy/net/soap/SoapServer.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package groovy.net.soap;
-/*
- * SoapServer.java
- *
- * Created on 22 avril 2006, 00:10
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-//import java.util.*;
-import java.io.File;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import org.codehaus.xfire.XFire;
-import org.codehaus.xfire.XFireFactory;
-import org.codehaus.xfire.server.http.XFireHttpServer;
-import org.codehaus.xfire.service.Service;
-import org.codehaus.xfire.service.invoker.ObjectInvoker;
-import org.codehaus.xfire.service.binding.ObjectServiceFactory;
-import org.codehaus.xfire.xmlbeans.XmlBeansServiceFactory;
-import org.codehaus.xfire.xmlbeans.XmlBeansType;
-
-import groovy.lang.GroovyClassLoader;
-
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author Guillaume Alleon
- */
-public class SoapServer {
-    
-    private XFire xfire = null;
-    private XFireHttpServer server = null;
-
-    static private Logger logger=Logger.getLogger(SoapServer.class);
-    
-    /**
-     * <p>Creates a new instance of SoapServer.</p>
-     * <p/>
-     *
-     */
-    public SoapServer() {
-        this("localhost", 8080);
-    }
-    
-    /**
-     * <p>Creates a new instance of SoapServer.</p>
-     * <p/>
-     *
-     * @param host the host the web container is running on.
-     * @param port the port used by the web container.
-     */
-    public SoapServer(String host, Integer port) {
-        xfire = XFireFactory.newInstance().getXFire();
-        server = new XFireHttpServer();
-        server.setPort(port);
-    }
-    
-    /**
-     * <p>Instantiate the web service using a Plain Old
-     * Groovy Object. Both, the interface and the implementation
-     * classes are generated using introspection.
-     * Then the implementation is delegating the call to the
-     * Groovy class.</p>
-     * <p/>
-     *
-     * @param text the prefix of the file containing the groovy class.
-     * @param URL the URL hosting the serviceon the server.
-     */
-    public void setNode(String text, String URL) throws ClassNotFoundException {
-        
-        GroovyClassLoader gcl = new GroovyClassLoader();
-        // try {
-        Class clazz = gcl.loadClass(text);
-        //} catch (ClassNotFoundException ex){
-        //    System.err.println("Groovy file "+ text + " not found");
-        //    throw ex;
-        //}
-        Method[] methods = clazz.getDeclaredMethods();
-        
-        StringBuffer sInterface = new StringBuffer();
-        StringBuffer sImpl      = new StringBuffer();
-        
-        sInterface.append("interface ")
-        .append(clazz.getName())
-        .append("Interface {\n");
-        
-        sImpl.append("class ")
-        .append(clazz.getName())
-        .append("Impl implements ")
-        .append(clazz.getName())
-        .append("Interface {\n  def service = new ")
-        .append(clazz.getName())
-        .append("()\n");
-        
-        boolean hasMethod = false;
-        for (int i=0; i<methods.length; ++i) {
-            if ( "getMetaClass".equals(methods[i].getName()) ||
-                    "getProperty".equals(methods[i].getName()) ||
-                    "getClass".equals(methods[i].getName()) ||
-                    "setMetaClass".equals(methods[i].getName()) ||
-                    "setProperty".equals(methods[i].getName()) ||
-                    "invokeMethod".equals(methods[i].getName()) ||
-                    "hashCode".equals(methods[i].getName()) ||
-                    "equals".equals(methods[i].getName()) ||
-                    "notify".equals(methods[i].getName()) ||
-                    "notifyAll".equals(methods[i].getName()) ||
-                    "toString".equals(methods[i].getName()) ||
-                    "run".equals(methods[i].getName()) ||
-                    "main".equals(methods[i].getName()) ||
-                    "class$".equals(methods[i].getName()) ||
-                    "wait".equals(methods[i].getName()) ) {
-            } else if (Modifier.isPublic(methods[i].getModifiers())) {
-                hasMethod = true;
-                
-                String returnType = methods[i].getReturnType().getName();
-
-                if (returnType.startsWith("[L")) {
-                  returnType = returnType.substring(2, returnType.length()-1);
-                  returnType = returnType.concat("[]");
-                }
-
-                sInterface.append("  " + returnType)
-                .append(" " + methods[i].getName()+"(");
-                
-                sImpl.append("\n  " + returnType)
-                .append(" " + methods[i].getName()+"(");
-                
-                Class[] params = methods[i].getParameterTypes();
-                int j = 0;
-                while (j < params.length) {
-                    sInterface.append(params[j].getName() + " arg" + j);
-                    sImpl.append(params[j].getName() + " arg" + j);
-                    if (++j < params.length) {
-                        sInterface.append(", ");
-                        sImpl.append(", ");
-                    }
-                }
-                sInterface.append(");\n");
-                sImpl.append(") {\n    ");
-
-                if (methods[i].getReturnType() != void.class) {
-                  sImpl.append("return ");
-                }
-                sImpl.append("service." + methods[i].getName() + "(");
-                
-                j = 0;
-                while (j < params.length) {
-                    sImpl.append("arg" + j);
-                    if (++j < params.length) {
-                        sImpl.append(", ");
-                    }
-                }
-                sImpl.append(")\n  }\n");
-            }
-        }
-        sImpl.append("}");
-        sInterface.append("}");
-        
-        if (hasMethod == false) throw new PublicMethodNotFoundException("Groovy script should have public method");
-
-        if (logger.isDebugEnabled()) logger.debug(sImpl.toString());
-        if (logger.isDebugEnabled()) logger.debug(sInterface.toString());
-
-        Class interfaceClass = null;
-        try {
-            interfaceClass = gcl.parseClass(sInterface.toString());
-        } catch (Exception ex) {
-            System.err.println("Cannot parse Interface class:\n"+sInterface.toString());
-            ex.printStackTrace();
-        }
-        
-        Class implClass = null;
-        try {
-            implClass = gcl.parseClass(sImpl.toString());
-        } catch (Exception ex) {
-            System.err.println("Cannot parse Implementation class:\n"+sImpl.toString());
-            ex.printStackTrace();
-        }
-        
-
-        ObjectServiceFactory serviceFactory = new ObjectServiceFactory(xfire.getTransportManager());
-        Service service = serviceFactory.create(interfaceClass);
-        service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, implClass);
-/*
-        XmlBeansServiceFactory serviceFactory = new XmlBeansServiceFactory(xfire.getTransportManager());
-        Service service = serviceFactory.create(implClass);
-        service.setProperty(XmlBeansType.XMLBEANS_NAMESPACE_HACK, "true");
-*/
-        
-        xfire.getServiceRegistry().register(service);
-    }
-    
-    public void setNode(String text) throws ClassNotFoundException {
-        this.setNode(text, "");
-    }
-    
-    /**
-     * <p>Start the SoapServer.</p>
-     * <p/>
-     *
-     */    
-    public void start() {
-        try {
-            server.start();
-        } catch (Exception ex) {
-            System.err.println("Cannot start server");
-        }
-        
-    }
-    
-    /**
-     * <p>Stop the SoapServer.</p>
-     * <p/>
-     *
-     */    
-    public void stop() {
-        try {
-            server.stop();
-        } catch (Exception ex) {
-            System.err.println("Cannot stop server");
-        }
-    }
-}
diff --git a/groovy/modules/groovysoap/src/test/MathService.groovy b/groovy/modules/groovysoap/src/test/MathService.groovy
deleted file mode 100644
index 8d67db7..0000000
--- a/groovy/modules/groovysoap/src/test/MathService.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-//public class MathService {
-
-  double add(double op1, double op2) {
-    return (op1 + op2)
-  }
-
-  double square(double op1) {
-    return (op1 * op1)
-  }
-
-//}
diff --git a/groovy/modules/groovysoap/src/test/Person.java b/groovy/modules/groovysoap/src/test/Person.java
deleted file mode 100644
index c17b7bb..0000000
--- a/groovy/modules/groovysoap/src/test/Person.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Person.java
- *
- * Created on 13 février 2006, 13:29
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package test;
-
-/**
- *
- * @author Guillaume Alleon
- */
-public class Person {
-    private String firstName;
-    private String lastName;
-    private Integer id;
-    
-    public String getFirstName(){
-        return firstName;
-    }
-    
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-    
-    public String getLastName(){
-        return lastName;
-    }
-    
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-        
-    public Integer getId(){
-        return id;
-    }
-    
-    public void setId(Integer id) {
-        this.id = id;
-    }
-    
-    public String toString() {
-        return "["+id+"] "+firstName+" "+lastName;
-    }
-    
-}
diff --git a/groovy/modules/groovysoap/src/test/PersonService.java b/groovy/modules/groovysoap/src/test/PersonService.java
deleted file mode 100644
index 52b02cf..0000000
--- a/groovy/modules/groovysoap/src/test/PersonService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * NewInterface.java
- *
- * Created on 13 février 2006, 16:24
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package test;
-
-/**
- *
- * @author Guillaume Alleon
- */
-public interface PersonService {
-    Person findPerson(Integer id);
-    Person[] getPersons();
-}
diff --git a/groovy/modules/groovysoap/src/test/PersonServiceImpl.java b/groovy/modules/groovysoap/src/test/PersonServiceImpl.java
deleted file mode 100644
index a16c35f..0000000
--- a/groovy/modules/groovysoap/src/test/PersonServiceImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * PersonService.java
- *
- * Created on 13 février 2006, 14:38
- *
- * To change this template, choose Tools | Template Manager
- * and open the template in the editor.
- */
-
-package test;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.log4j.Logger;
-
-/**
- *
- * @author Guillaume Alleon
- */
-public class PersonServiceImpl implements PersonService {
-    
-    private static Logger logger=Logger.getLogger(PersonServiceImpl.class);
-    
-    private List directory;
-    
-    public PersonServiceImpl() {
-        directory = new ArrayList();
-        
-        Person person1 = new Person();
-        Person person2 = new Person();
-        Person person3 = new Person();
-        
-        person1.setFirstName("Guillaume");
-        person1.setLastName("Laforge");
-        person1.setId(new Integer(1));
-        
-        person2.setFirstName("Dan");
-        person2.setLastName("Diephouse");
-        person2.setId(new Integer(2));
-        
-        person3.setFirstName("Jochen");
-        person3.setLastName("Theodorou");
-        person3.setId(new Integer(3));
-        
-        directory.add(person1);
-        directory.add(person2);
-        directory.add(person3);
-        
-        logger.debug("org.codehaus.groovy.gsoap.test.PersonServiceImpl: "+person1.toString());
-    }
-    
-    public Person[] getPersons(){
-        return (Person[])directory.toArray(new Person[directory.size()]);
-    }
-    
-    public Person findPerson(Integer id){
-       
-        Person moa = new Person();
-        moa.setFirstName("Guillaume");
-        moa.setLastName("Alleon");
-        moa.setId(new Integer(7));
-        logger.debug("org.codehaus.groovy.gsoap.test.findPerson: "+moa.toString());
-        
-        Person p = null;
-        for (Iterator it = directory.iterator(); it.hasNext();){
-            p = (Person) it.next();
-            logger.debug("org.codehaus.groovy.gsoap.test.findPerson: "+p.toString());
-            if (p.getId() == id) return p;
-        }
-        
-        return moa;
-    }
-
-}
diff --git a/groovy/modules/groovysoap/src/test/Test1.groovy b/groovy/modules/groovysoap/src/test/Test1.groovy
deleted file mode 100644
index 2cb31ec..0000000
--- a/groovy/modules/groovysoap/src/test/Test1.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-import groovy.net.soap.SoapClient
-
-import org.codehaus.xfire.XFire
-import org.codehaus.xfire.XFireFactory
-import org.codehaus.xfire.server.http.XFireHttpServer
-import org.codehaus.xfire.service.Service
-import org.codehaus.xfire.service.invoker.ObjectInvoker
-import org.codehaus.xfire.service.binding.ObjectServiceFactory
-
-import test.PersonServiceImpl
-import test.PersonService
-
-//
-// Create a SoapClient using http://localhost:8090/PersonService?wsdl as WSDL
-// then it queries the method findPerson which returns one Person object
-// 
-class Test1 extends GroovyTestCase {
-
-    void testSoapClient() {
-        def serviceFactory = new ObjectServiceFactory()
-        def service = serviceFactory.create(PersonService.class)
-        // Set the implementation class
-        service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, PersonServiceImpl.class)
-        
-        // Register the service in the ServiceRegistry
-        def xfire = XFireFactory.newInstance().getXFire()
-        xfire.getServiceRegistry().register(service)
-        
-        // Start the HTTP server
-        def server = new XFireHttpServer()
-        server.setPort(6969)
-        System.out.println("start Server & run tests")
-        server.start()
-
-        try {
-            def proxy = new SoapClient("http://localhost:6969/PersonService?wsdl")
-            def result = proxy.findPerson(1)
-            assert (result.firstName == "Guillaume")
-
-            result = proxy.getPersons()
-            assert (result.Person.size() == 3)
-            assert (result.Person[0].firstName == "Guillaume")
-            assert (result.Person[2].firstName == "Jochen")
-        } finally {
-            server.stop()
-        }
-    }
-}
diff --git a/groovy/modules/groovysoap/src/test/Test2.groovy b/groovy/modules/groovysoap/src/test/Test2.groovy
deleted file mode 100644
index a37916a..0000000
--- a/groovy/modules/groovysoap/src/test/Test2.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-import groovy.net.soap.SoapServer
-import groovy.net.soap.SoapClient
-
-//
-// Create a SoapServer on localhost using port 6969.
-// Register serice represented by by the Groovy script MathService.groovy
-//
-class Test2 extends GroovyTestCase {
-
-    void testSoapClient() {
-        def server = new SoapServer("localhost", 6980)
-        server.setNode("MathService")
-        System.out.println("start Server & run tests")
-        server.start()
-
-        sleep 2000
-
-        try {
-            def proxy = new SoapClient("http://localhost:6980/MathServiceInterface?wsdl")
-            def result = proxy.add(1.0, 2.0)
-            assert (result == 3.0)
-
-            result = proxy.square(3.0)
-            assert (result == 9.0)
-        } finally {
-            server.stop()
-        }
-    }
-}
diff --git a/groovy/modules/groovysoap/src/test/log4j.properties b/groovy/modules/groovysoap/src/test/log4j.properties
deleted file mode 100644
index 6e34cdc..0000000
--- a/groovy/modules/groovysoap/src/test/log4j.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=ALL, TXT, HTML, STDOUT
-
-# developpers may change the logging level of a specific logger
-#log4j.logger.myclass=OFF, STDOUT
-
-# STDOUT is set to be a ConsoleAppender.
-log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
-log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
-log4j.appender.STDOUT.layout.ConversionPattern=[%p][%d] %m%n
-log4j.appender.STDOUT.target=System.err
-
-#Developer use this one
-#log4j.appender.STDOUT.layout.ConversionPattern=[%p][%d-%t-%l] %m%n
-
-# TXT is set to be a FileAppender.
-log4j.appender.TXT=org.apache.log4j.FileAppender
-log4j.appender.TXT.File=gsoap-log.txt
-log4j.appender.TXT.layout=org.apache.log4j.PatternLayout
-log4j.appender.TXT.layout.ConversionPattern=[%p][%d-%t-%l] %m%n
-
-# HTML
-log4j.appender.HTML=org.apache.log4j.FileAppender
-log4j.appender.HTML.File=gsoap-log.html
-log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
-
diff --git a/groovy/modules/gsql/build.xml b/groovy/modules/gsql/build.xml
deleted file mode 100644
index 20c7a44..0000000
--- a/groovy/modules/gsql/build.xml
+++ /dev/null
@@ -1,172 +0,0 @@
-<?xml version="1.0"?>
-<project name="gsql" default="default">
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   compile settings                -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="build.debug" value="on"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                   directories                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <property name="src.dir" value="src"/>
-  <property name="build.dir" value="build"/>
-  <property name="build.classes.dir" value="${build.dir}/classes"/>
-  <property name="dist.dir" value="dist"/>
-  <property name="lib.dir" value="../../groovy-core/target/install/lib"/>
-  		
-  <!-- javadoc properties -->
-  <property name="javadoc.dir" value="doc"/>
-  <property name="javadoc.packages" value="org.javanicus.*"/>
-
-  <!-- junit properties -->
-  <property name="test.src.dir"	value="test"/>
-  <property name="test.classes.dir" value="${build.dir}/classes"/>
-  <property name="test.reports.dir" value="reports"/>
-  
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                     datatypes                     -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <path id="compile.classpath">
-    <pathelement location="${build.classes.dir}"/>
-    <fileset dir="${lib.dir}">
-      <include name="**/*.jar" />
-      <include name="**/*.zip" />
-    </fileset>
-  </path>
-  
-  <path id="test.classpath">
-    <path refid="compile.classpath"/>
-    <pathelement location="${test.classes.dir}"/>  
-  </path>
-  
-  <taskdef name="groovyc" classname="org.codehaus.groovy.ant.Groovyc" classpathref="test.classpath"/>
-
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <!--                  targets                          -->
-  <!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
-  <target name="default" 
-          depends="run" 
-          description="default: run this groovy stuff"
-  />
-  
-  <target name="all" 
-          depends="test,dist" 
-          description="build and test everything"
-  />
-
-  <target name="clean" description="remove all built files">
-    <delete dir="${javadoc.dir}" />
-    <delete dir="${build.dir}" />
-    <delete dir="${dist.dir}" />
-    <delete dir="${test.reports.dir}" />
-  </target>
-
-  <target name="dist" 
-          depends="compile" 
-          description="create distributables (jars etc)">
-    <mkdir dir="${dist.dir}" />
-    <jar jarfile="${dist.dir}/gsql.jar" 
-         manifest="${src.dir}/manifest.txt">
-      <fileset dir="${build.classes.dir}"/>
-    </jar>
-  </target>
-
-  <target name="docs" depends="init" description="generate documentation">
-    <mkdir dir="${javadoc.dir}" />
-    <javadoc sourcepath="${src.dir}" 
-             destdir="${javadoc.dir}" 
-             packagenames="${javadoc.packages}"
-             use="true"
-             windowtitle="gsql"
-             private="true"/>
-  </target>
-
-  <target name="run" depends="compile" description="compile and run">
-    <java classname="org.javanicus.gsql.Column" 
-          fork="yes" 
-          classpathref="compile.classpath"/>
-  </target>
-
-  <target name="beautify" 
-          depends="init" 
-          description="apply jacobe beautifier to the java sources">
-    <apply executable="jacobe">
-      <arg value="-nobackup"/>
-      <arg value="-overwrite"/>
-      <srcfile/>
-      <fileset dir="." includes = "**/*.java"/>
-    </apply>
-  </target>
-
-  <target name="test" 
-          depends="test-compile" 
-          description="run all test cases">
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="plain" usefile="false"/>
-      <batchtest>
-        <fileset dir="${test.classes.dir}">
-          <include name="**/*Test.class" />
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
-        
-  <target name="pretty-test" 
-          depends="test-compile" 
-          description="HTML output of test cases">
-    <mkdir dir="${test.reports.dir}"/>
-    <junit haltonfailure="true" fork="yes">
-      <classpath refid="test.classpath"/>
-      <formatter type="xml" usefile="true"/>
-
-      <batchtest todir="${test.reports.dir}">
-        <fileset dir="${test.classes.dir}">
-          <include name="**/*Test.class" />
-        </fileset>
-      </batchtest>
-
-    </junit>
-
-    <junitreport todir="${test.reports.dir}">
-      <fileset dir="${test.reports.dir}">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report format="frames" todir="${test.reports.dir}"/>
-    </junitreport>
-  </target>
-  
-  <target name="compile" depends="init" description="compile java and groovy sources">
-    <mkdir dir="${build.classes.dir}" />
-    <groovyc destdir="${build.classes.dir}" 
-             srcdir="${src.dir}"
-             listfiles="true">          
-        <classpath refid="test.classpath"/>
-    </groovyc>
-    <javac srcdir="${src.dir}" 
-           destdir="${build.classes.dir}" 
-           classpathref="compile.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-  
-  <target name="test-compile" depends="compile" description="compile tests">
-    <mkdir dir="${test.classes.dir}" />
-    <groovyc destdir="${test.classes.dir}" 
-             srcdir="${test.src.dir}"
-             listfiles="true">          
-        <classpath refid="test.classpath"/>
-    </groovyc>
-    <javac srcdir="${test.src.dir}" 
-           destdir="${test.classes.dir}" 
-           classpathref="test.classpath" 
-           debug="${build.debug}" 
-           deprecation="on"/>
-  </target>
-
-  <target name="init">
-    <tstamp />
-  </target>
-       
-</project>
diff --git a/groovy/modules/gsql/src/manifest.txt b/groovy/modules/gsql/src/manifest.txt
deleted file mode 100644
index 48b4511..0000000
--- a/groovy/modules/gsql/src/manifest.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: org.javanicus.gsql.Column
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Column.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Column.groovy
deleted file mode 100644
index 7198c39..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Column.groovy
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * ported from commons-sql
- * @author Jeremy Rayner
- * @author Dierk Koenig, adapted to jsr-04
- */
-package org.javanicus.gsql
-
-public class Column implements Cloneable {
-    @Property name
-    @Property groovyName
-    @Property boolean primaryKey
-    @Property required
-    @Property autoIncrement
-    @Property typeCode
-    @Property type
-    @Property size
-    @Property defaultValue
-    @Property scale
-    @Property precisionRadix
-    @Property ordinalPosition
-    private typeMap
-
-    public Column(typeMap) {
-        this.typeMap = typeMap
-                  
-        primaryKey = false
-        required = false
-        autoIncrement = false
-        size = null
-        defaultValue = null
-        scale = 0
-        precisionRadix = 10
-        ordinalPosition = 0
-    }
-
-    public Object clone() { //todo: throws CloneNotSupportedException {
-        def result = new Column(typeMap)
-        
-        result.name            = name
-        result.groovyName      = groovyName
-        result.primaryKey      = primaryKey
-        result.required        = required
-        result.autoIncrement   = autoIncrement
-        result.typeCode        = typeCode
-        result.type            = type
-        result.size            = size
-        result.defaultValue    = defaultValue
-        result.scale           = scale
-        result.precisionRadix  = precisionRadix
-        result.ordinalPosition = ordinalPosition
-                  
-        return result
-    }
-
-    public Column(TypeMap typeMap, name, groovyName, int typeCode, size, required, primaryKey, autoIncrement, defaultValue) {
-        //bug?        this(typeMap)
-        this.typeMap = typeMap
-        this.setName(name)
-        this.setGroovyName(groovyName)
-        this.setTypeCode(typeCode)
-        this.setSize(size)
-        this.setRequired(required)
-        this.setPrimaryKey(primaryKey)
-        this.setAutoIncrement(autoIncrement)
-        this.setDefaultValue(defaultValue)
-    }
-    
-    public Column(typeMap, name, groovyName, String type, size, required, primaryKey, autoIncrement, defaultValue ) {
-        this(typeMap, name, groovyName, typeMap.getJdbcTypeCode(type), size, required, primaryKey, autoIncrement, defaultValue)
-    }
-
-    public Column(typeMap, name, groovyName, typeCode, size, required, primaryKey, autoIncrement, defaultValue, scale) {
-        //bug?        this(typeMap)
-        this.typeMap = typeMap
-        this.setName(name)
-        this.setGroovyName(groovyName)
-        this.setTypeCode(typeCode)
-        this.setSize(size)
-        this.setRequired(required)
-        this.setPrimaryKey(primaryKey)
-        this.setAutoIncrement(autoIncrement)
-        this.setDefaultValue(defaultValue)
-        this.setScale(scale)
-    }
-
-    public String toString() {
-        return "Column[name=${name};type=${type}]"
-    }
-
-    public void setTypeCode(int typeCode) {
-        this.typeCode = typeCode
-        this.type = typeMap.getJdbcTypeName(typeCode)
-    }
-
-    public void setType(String type) {
-        this.type = type
-        this.typeCode = typeMap.getJdbcTypeCode(type)
-    }
-
-    public void setSize(String size) {
-        int pos = size.indexOf(",")
-
-        if (pos < 0) {
-            this.size = size
-        } else {
-            this.size = size.substring(0, pos)
-            scale     = Integer.parseInt(size.substring(pos + 1))
-        }
-    }
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Database.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Database.groovy
deleted file mode 100644
index 861658a..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Database.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.javanicus.gsql
-
-//@todo should extend Expando, super.getProperty() will currently always return
-//        something, even if it's null. Expando could either throw GroovyRuntimeException
-//        or this class could check for null return, and findTable() instead
-public class Database extends GroovyObjectSupport {
-    @Property name
-    @Property version
-    @Property List tables
-
-    public Database(aName) {
-        this.name = aName
-        tables = []
-    }
-
-    public void mergeWith(Database otherDb) { //throws IllegalArgumentException {
-        otherDb.tables.each() {
-            if (findTable(it.name) != null) {
-                //@todo throw new IllegalArgumentException("Table ${table.name} already defined in this database");
-            } else {
-                tables << it.clone()
-            }
-        }
-    }
-
-    public Object getProperty(String propertyName) {
-        try {
-            return super.getProperty(propertyName)
-        } catch (Exception e) {
-            return findTable(propertyName)
-        }
-    }
-    public Table findTable(String aName) {
-        tables.find() {it.name.equalsIgnoreCase(aName)}
-    }
-
-    public String toString() {
-        "Database[name=${name};tableCount=${tables.size()}]"
-    }
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/ForeignKey.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/ForeignKey.groovy
deleted file mode 100644
index aed2670..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/ForeignKey.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.javanicus.gsql
-
-public class ForeignKey implements Cloneable {
-    @Property foreignTable
-    @Property List references
-    
-    public ForeignKey() {
-        references = []
-    }
-    
-    public Object clone() { // @todo throws CloneNotSupportedException {
-        def result = new ForeignKey()
-        
-        result.foreignTable = foreignTable
-        result.references   = references.clone()
-        return result
-    }
-}
-
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Index.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Index.groovy
deleted file mode 100644
index ee82608..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Index.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.javanicus.gsql
-
-public class Index implements Cloneable {
-    @Property name
-    @Property List indexColumns
-        
-    public Index() {
-        indexColumns = []
-    }
-        
-    public Object clone() { //@todo throws CloneNotSupportedException {
-        def result = new Index()
-            
-        result.name         = name
-        result.indexColumns = indexColumns.clone()
-                  
-        return result
-    }
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Reference.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Reference.groovy
deleted file mode 100644
index 8f2bae2..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Reference.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.javanicus.gsql
-
-public class Reference implements Cloneable {
-    @Property local
-    @Property foreign
-    
-    public Object clone() { // @todo throws CloneNotSupportedException {
-        def result = new Reference()
-        
-        result.local   = local
-        result.foreign = foreign
-        return result
-    }
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/RelationalBuilder.java b/groovy/modules/gsql/src/org/javanicus/gsql/RelationalBuilder.java
deleted file mode 100644
index 5e75766..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/RelationalBuilder.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Helper class to construct relational database schemas
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-package org.javanicus.gsql;
-
-import java.util.*;
-import groovy.lang.Closure;
-import groovy.util.BuilderSupport;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-public class RelationalBuilder extends BuilderSupport {
-    private TypeMap typeMap;
-    private Map factories;
-    //    private Logger log = Logger.getLogger(getClass().getName());
-    public RelationalBuilder(TypeMap typeMap) {
-        this.typeMap = typeMap;
-        factories = new HashMap();
-        factories.put("database",new DatabaseFactory());
-        factories.put("table",new TableFactory());
-        factories.put("column",new ColumnFactory());
-        factories.put("foreignKey",new ForeignKeyFactory());
-        factories.put("reference",new ReferenceFactory());
-    }
-    
-    private Map passThroughNodes = new HashMap();
-    
-    protected void setParent(Object parent, Object child) {
-//        System.out.println("setParent(" + parent + "," + child + ")");
-        
-        if (child instanceof Reference) {
-            if (parent instanceof ForeignKey) {
-                ForeignKey foreignKey = (ForeignKey)parent;
-                foreignKey.getReferences().add(child);
-            }
-        }
-        if (child instanceof Column) {
-            if (parent instanceof Table) {
-                Table table = (Table)parent;
-                table.getColumns().add(child);
-            }
-        }
-        if (child instanceof ForeignKey) {
-            if (parent instanceof Table) {
-                Table table = (Table)parent;
-                table.getForeignKeys().add(child);
-            }
-        }
-        if (child instanceof Table) {
-            if (parent instanceof Database) {
-                Database database = (Database)parent;
-                database.getTables().add(child);
-            }
-        }
-    }
-
-    protected void nodeCompleted(Object parent, Object node) {
-//        System.out.println("nodeCompleted(" + parent + "," + node + ")");
-    }
-
-    protected Object createNode(Object name) {
-//        System.out.println("createNode(name:" + name + ")");
-        return name;
-    }
-
-    protected Object createNode(Object name, Object value) {
-//        System.out.println("createNode(name:" + name + ",value:" + value + ")");
-        return name;
-    }
-
-    protected Object createNode(Object name, Map attributes, Object value) {
-//        System.out.println("createNode(name:" + name + ",attributes:" + attributes + ",value:" + value + ")");
-        return name;
-    }
-    
-    protected Object createNode(Object name, Map attributes) {
-        //@todo - is this a suitable return for unrecognised node types?
-        Object result = name;
-//        System.out.println("createNode(name:" + name + ",attributes:" + attributes + ")");
-        String nodeName = (String)attributes.get("name");
-        Factory factory = (Factory)factories.get(name);
-        if (factory != null) {
-            result = factory.make(nodeName,attributes,null);
-        }
-        return result;
-    }
-    
-    private void setAttributes(Object result, Map attributes) {
-        Iterator itr = attributes.entrySet().iterator();
-        while (itr.hasNext()) {
-            Map.Entry entry = (Map.Entry)itr.next();
-            try {
-                InvokerHelper.setProperty(result, (String)entry.getKey(), entry.getValue());
-            }
-            catch (Exception e) {
-                //ignore unknown attributes
-            }
-        }
-    }        
-    
-    private interface Factory {
-        Object make(String nodeName, Map attributes, Object value);
-    }
-    private class DatabaseFactory implements Factory {
-        public Object make(String nodeName, Map attributes, Object value) {
-            Database database = new Database(nodeName);
-            setAttributes(database,attributes);
-            return database;
-        }
-    }
-    private class TableFactory implements Factory {
-        public Object make(String nodeName, Map attributes, Object value) {
-            Table table = new Table(nodeName);
-            setAttributes(table,attributes);
-            return table;
-        }
-    }
-    private class ColumnFactory implements Factory {
-        public Object make(String nodeName, Map attributes, Object value) {
-            Column column = new Column(typeMap);
-            setAttributes(column,attributes);
-            return column;
-        }
-    }
-    private class ForeignKeyFactory implements Factory {
-        public Object make(String nodeName, Map attributes, Object value) {
-            ForeignKey foreignKey = new ForeignKey();
-            setAttributes(foreignKey,attributes);
-            return foreignKey;
-        }
-    }
-    private class ReferenceFactory implements Factory {
-        public Object make(String nodeName, Map attributes, Object value) {
-            Reference reference = new Reference();
-            setAttributes(reference,attributes);
-            return reference;
-        }
-    }
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/SqlGenerator.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/SqlGenerator.groovy
deleted file mode 100644
index 48273d9..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/SqlGenerator.groovy
+++ /dev/null
@@ -1,735 +0,0 @@
-/**
- * Generates generic SQL for Relational Structures
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- * 
- * ported from "commons-sql" [SqlBuilder.java] - revision 1.14
- * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
- * @author John Marshall/Connectria
- * 
- */
-package org.javanicus.gsql
-
-public class SqlGenerator {
-    @Property lineSeparator
-              
-    /** The current Writer used to output the SQL to */
-    @Property writer
-    
-    /** The indentation used to indent commands */
-    @Property indent
-    
-    /** Whether or not primary key constraints are embedded inside the create table statement, the default is true */
-    @Property primaryKeyEmbedded
-    
-    /** Whether or not foreign key constraints are embedded inside the create table statement */
-    @Property foreignKeysEmbedded
-              
-    /** Whether or not indexes are embedded inside the create table statement */
-    @Property indexesEmbedded
-    
-    /** Should foreign key constraints be explicitly named */
-    @Property foreignKeyConstraintsNamed
-    
-    /** Is an ALTER TABLE needed to drop indexes? */
-    @Property alterTableForDrop
-    
-    /** A counter used to count the constraints */
-    private counter
-              
-    /** type mappings */
-    private typeMap
-              
-//@todo jrr
-//    public SqlGenerator() {
-//        this(new TypeMap(),System.getProperty( "line.separator", "\n" ))
-//    }
-    
-    public SqlGenerator(TypeMap typeMap,String lineSeparator) {
-        this.typeMap = typeMap
-        this.lineSeparator = lineSeparator
-        indent = "    "
-        primaryKeyEmbedded = true          
-    }
-    
-    /**
-     * Outputs the DDL required to drop and recreate the database 
-     */
-//@todo jrr remove
-//    public void createDatabase(Database database) { //@todo throws IOException {
-//        createDatabase(database, true)
-//    }
-    
-    /**
-     * Outputs the DDL required to drop and recreate the database 
-     */
-    public void createDatabase(database, shouldDropTable) { //@todo throws IOException {
-        // lets drop the tables in reverse order as its less likely to cause
-        // problems with referential constraints
-        if (shouldDropTable) {
-            database.tables.reverseEach {
-                dropTable(it)
-            }
-        }
-        for (table in database.tables) {
-            tableComment(table)
-            createTable(table)
-        }
-//@todo <-- bug cannot see createTable(it) inside closure????        
-//        database.tables.each {
-//            tableComment(it)
-//            createTable(it)
-//        }
-        // we're writing the foreignkeys last to ensure that all referenced tables are already defined
-        for (table in database.tables) {
-            createExternalForeignKey(table)
-        }
-    }
-    
-    /**
-      * Outputs the DDL required to drop the database 
-      */
-    public void dropDatabase(Database database) { //@todo throws IOException {
-        // lets drop the tables in reverse order
-        database.tables.reverseEach {
-            tableComment(it)
-            dropTable(it)
-        }
-    }
-    
-    /** 
-      * Outputs a comment for the table
-      */
-    public void tableComment(table) { //@todo throws IOException {
-        wprintComment("-----------------------------------------------------------------------")
-        wprintComment(table.name)
-        wprintComment("-----------------------------------------------------------------------")
-        wprintln()
-    }
-    
-    /**
-      * Outputs the DDL to drop the table
-      */
-    public void dropTable(Table table) { //@todo throws IOException {
-        wprint("drop table ${table.name}")
-        wprintEndOfStatement()
-    }
-    
-    /** 
-      * Outputs the DDL to create the table along with any non-external constraints
-      */
-    public void createTable(table) { //@todo throws IOException {
-        wprintln("create table ${table.name} (")
-        
-        writeColumnTypes(table)
-        
-        if (primaryKeyEmbedded) {
-            writePrimaryKeys(table)
-        }
-//@todo jrr        if (foreignKeysEmbedded) {
-//            writeForeignKeys(table)
-//        }
-        if (indexesEmbedded) {
-            writeEmbeddedIndexes(table)
-        }
-        wprintln()
-        wprint(")")
-        wprintEndOfStatement()
-        
-        if (primaryKeyEmbedded) {
-            writePrimaryKeysAlterTable(table)
-        }
-        if (!indexesEmbedded) {
-            writeIndexes(table)
-        }
-    }
-    /** 
-      * Creates an external foreignkey definition.
-      */
-    public void createExternalForeignKey(Table table) { // @todo throws IOException {
-        if (!foreignKeysEmbedded) {
-            writeForeignKeysAlterTable(table)
-        }
-    }
-    /**
-     * Helper method to determine if two column specifications represent
-     * different types.  Type, nullability, size, scale, default value,
-     * and precision radix are the attributes checked.  Currently default
-     * values are compared where null and empty string are considered equal.
-     * See comments in the method body for explanation.
-     *
-     *
-     * @param first First column to compare
-     * @param second Second column to compare
-     * @return true if the columns differ
-     */
-    public boolean columnsDiffer(desired,current) {
-        def result = false
-
-        //The createColumn method leaves off the default clause if column.getDefaultValue()
-        //is null.  mySQL interprets this as a default of "" or 0, and thus the columns
-        //are always different according to this method.  alterDatabase will generate
-        //an alter statement for the column, but it will be the exact same definition
-        //as before.  In order to avoid this situation I am ignoring the comparison
-        //if the desired default is null.  In order to "un-default" a column you'll
-        //have to have a default="" or default="0" in the schema xml.
-        //If this is bad for other databases, it is recommended that the createColumn
-        //method use a "DEFAULT NULL" statement if that is what is needed.
-        //A good way to get this would be to require a defaultValue="<NULL>" in the
-        //schema xml if you really want null and not just unspecified.
-        def desiredDefault = desired.defaultValue
-        def currentDefault = current.defaultValue
-        def defaultsEqual = (desiredDefault == null || desiredDefault.equals(currentDefault))
-        def sizeMatters = (desired.size != null)
-        if ( desired.typeCode != current.typeCode ||
-                desired.required != current.required ||
-                (sizeMatters && desired.size != current.size) ||
-                desired.scale != current.scale ||
-                !defaultsEqual ||
-                desired.precisionRadix != current.precisionRadix ) {
-            result = true
-        }
-        return result
-    }
-    /**
-      * Determines whether this database requires the specification of NULL as the default value.
-      *  
-      * @return Whether the database requires NULL for the default value
-      */
-    boolean requiresNullAsDefault() {
-        return false
-    }
-    
-    /** 
-      * Outputs the DDL to add a column to a table.
-      */
-    public void createColumn(Table table, Column column) { //@todo throws IOException {
-        //see comments in columnsDiffer about null/"" defaults
-        wprint("${column.name} ${getSqlType(column)} ")
-        
-        if (column.defaultValue != null) {
-            wprint("DEFAULT '${column.defaultValue}' ")
-        }
-        if (column.required) {
-            wprintNotNullable()
-        } else if (requiresNullAsDefault()) {
-            wprintNullable()
-        }
-        wprint(" ")
-        if (column.autoIncrement) {
-            wprintAutoIncrementColumn(table, column)
-        }
-    }
-    
-    // Implementation methods
-    //-------------------------------------------------------------------------                
-    
-    /**
-      * @return true if we should generate a primary key constraint for the given
-      *  primary key columns. By default if there are no primary keys or the column(s) are 
-      *  all auto increment (identity) columns then there is no need to generate a primary key 
-      *  constraint.
-      */
-    boolean shouldGeneratePrimaryKeys(List primaryKeyColumns) {
-        return primaryKeyColumns.any { !it.autoIncrement }
-    }
-  /**
-    * Writes the column types for a table 
-   */
-    void writeColumnTypes(Table table) { // @todo throws IOException {
-        def first = true
-        for (column in table.columns) {
-            if (first) { first = false } else { wprintln(", ")}
-            wprintIndent()
-            createColumn(table, column)
-        }
-    }
-   /**
-     * @return the full SQL type string including the size
-     */
-    String getSqlType(Column column) {
-        nativeType = getNativeType(column)
-        sqlType = new StringBuffer()          
-        if (nativeType != null) {
-            sqlType.append(nativeType)
-            if ( column.size != null ) {
-                sqlType.append(" (${column.size}")
-                if ( typeMap.isDecimalType(column.type) ){
-                    sqlType.append(",${column.scale}")
-                }
-                sqlType.append(")")
-            }
-        }
-        return sqlType.toString()
-    }
-   /**
-     * Writes the primary key constraints inside a create table () clause.
-    */
-    void writePrimaryKeys(Table table) {// @todo throws IOException {
-    //@todo protected
-        
-        if (table.primaryKeyColumns.size() > 0 && shouldGeneratePrimaryKeys(table.primaryKeyColumns)) {
-            wprintln(",")
-            wprintIndent()
-            writePrimaryKeyStatement(table.primaryKeyColumns)
-        }
-    }
-    /**
-      * Writes the primary key constraints as an AlterTable clause.
-      */
-    void writePrimaryKeysAlterTable(table) { //@todo throws IOException {
-    //@todo protected
-        if (table.primaryKeyColumns.size() > 0 && shouldGeneratePrimaryKeys(table.primaryKeyColumns)) {
-            wprintln("ALTER TABLE ${table.name}")
-            wprintIndent()
-            wprintln("ADD CONSTRAINT ${table.name}_PK")
-            writePrimaryKeyStatement(table.primaryKeyColumns);
-            wprintEndOfStatement()
-            wprintln()
-        }
-    }
-    /**
-      * Writes the 'PRIMARY KEY(A,B,...,N)' statement
-      */
-        
-     void writePrimaryKeyStatement(primaryKeyColumns) {//@todo throws IOException {
-     //@todo protected
-        wprint("PRIMARY KEY (")
-        def first = true
-        for (column in primaryKeyColumns) {
-            if (first) { first = false } else { wprint(", ")}
-            wprint(column.name)
-        }
-         wprint(")")
-    }
-        
-   /**
-     * Writes the foreign key constraints inside a create table () clause.
-    */
-    // @todo jrr this whole method...
-    /*    void writeForeignKeys(table) { //@todo throws IOException {
-    //@todo protected
-        for (key in table.foreignKeys) {
-            if (key.foreignTable == null) {
-                //todo log.warn( "Foreign key table is null for key: ${key}")
-            } else {
-                wprintln(",")
-                wprintIndent()
-                if (foreignKeyConstraintsNamed) {
-                    wprint("CONSTRAINT ${table.name}_FK_${++counter} ")
-                }
-                wprint("FOREIGN KEY (")
-                writeLocalReferences(key)
-                wprintln(")")
-                wprintIndent()
-                wprint("REFERENCES ${key.foreignTable} (")
-                writeForeignReferences(key)
-                wprintln(")")
-            }
-        }
-    }*/
-   /**
-     * Writes the foreign key constraints as an AlterTable clause.
-     */
-   void writeForeignKeysAlterTable(Table table) { //@todo throws IOException {
-   //@todo protected     
-        counter = 0
-        for (key in table.foreignKeys) {
-//@todo jrr            writeForeignKeyAlterTable(table,key)
-        }
-    }
-        
-//    void writeForeignKeyAlterTable( Table table, ForeignKey key ) {//@todo throws IOException {
-//    //@todo protected
-//        if (key.foreignTable == null) {
-//            //@todo log.warn( "Foreign key table is null for key: ${key}")
-//        } else {
-//            wprintln("ALTER TABLE ${table.name}")
-//            wprintIndent()
-//            wprint("ADD CONSTRAINT ${table.name}_FK_${++counter}  FOREIGN KEY (")
-//            writeLocalReferences(key)
-//            wprintln(")")
-//            wprintIndent()
-//            wprint("REFERENCES ${key.foreignTable} (")
-//            writeForeignReferences(key)
-//            wprintln(")")
-//            wprintEndOfStatement()
-//                  
-//        }
-//    }
-   /**
-     * Writes the indexes.
-     */
-   void writeIndexes(Table table) { //@todo throws IOException{
-   //@todo protected     
-       for (index in table.indexes) {
-           writeIndex(table,index)
-       }
-    }
-    
-   /**
-     * Writes one index for a table
-    */
-    void writeIndex( table, index ) { //@todo throws IOException {
-    //@todo protected
-        if (index.name == null) {
-            //@todo log.warn( "Index Name is null for index: ${index}")
-        } else {
-            wprint("CREATE")
-            if ( index.unique ) {
-                wprint( " UNIQUE" )
-            }
-            wprint(" INDEX ${index.name} ON ${table.name} (")
-            def first = true          
-                      
-            for (column in index.indexColumns) {
-                if (first) { first = false } else { wprint(", ")}
-                wprint(column.name)
-            }
-            wprint(")")
-            wprintEndOfStatement()
-                  }
-    }
-   /**
-     * Writes the indexes embedded within the create table statement. not
-     * yet implemented
-    */
-    void writeEmbeddedIndexes(table) { // @todo throws IOException 
-        //@todo protected
-    }
-    
-   /**
-     * Writes a list of local references for the given key
-     */
-   void writeLocalReferences(ForeignKey key) { //@todo throws IOException {
-   //@todo protected     
-        def first = true
-        for (reference in key.references) {
-            if (first) { first = false } else { wprint(", ")}                    
-            wprint(reference.local)
-        }
-    }
-   /**
-     * Writes a list of foreign references for the given key
-    */
-    void writeForeignReferences(ForeignKey key) { //@todo throws IOException {
-    //@todo protected
-        def first = true
-        for (reference in key.references) {
-            if (first) { first = false } else { wprint(", ")}                    
-            wprint(reference.foreign)
-        }
-    }
-   /**
-     * Returns the string that denotes a comment if put at the beginning of a line.
-     *  
-     * @return The comment prefix
-     */
-    String getCommentPrefix() {
-        return "--"
-    }
-    
-   /**
-     * Prints an SQL comment to the current stream
-     */
-    void wprintComment(String text) {//@todo throws IOException { 
-    //@todo protected    
-        wprint(getCommentPrefix())
-        
-        // MySql insists on a space after the first 2 dashes.
-        // http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Comments
-        // dunno if this is a common thing
-        wprint(" ")
-        wprintln( text )
-    }
-    
-   /**
-     * Prints that a column is nullable 
-    */
-    void wprintNullable() {//@todo throws IOException {
-    //@todo protected
-        wprint("NULL")
-    }
-    
-   /**
-     * Prints that a column is not nullable
-     */
-    void wprintNotNullable() {//@todo throws IOException {
-    //@todo protected    
-        wprint("NOT NULL");
-    }
-
-   /** 
-     * Prints the end of statement text, which is typically a semi colon followed by 
-     * a carriage return
-    */
-    void wprintEndOfStatement() {//@todo throws IOException {
-    //@todo protected
-        wprintln(";")
-        wprintln()
-    }
-
-    /** 
-     * Prints a new line
-     */
-    void wprintln() {//@todo throws IOException {
-    //@todo protected
-        wprint( lineSeparator )
-    }
-
-    /**
-     * Prints some text
-     */
-    void wprint(text) {//@todo throws IOException {
-    //@todo protected    
-        writer.write(text)
-    }
-    
-    /**
-     * Prints some text then a newline
-     */
-    void wprintln(text) {//@todo throws IOException {
-    //@todo protected
-        wprint(text)
-        wprintln()
-    }
-
-    /**
-     * Prints the indentation used to indent SQL
-     */
-    void wprintIndent() {//@todo throws IOException {
-    //@todo protected    
-        wprint(getIndent())
-    }
-
-    /**
-     * Outputs the fact that this column is an auto increment column.
-     */ 
-    void wprintAutoIncrementColumn(table, column) {//@todo throws IOException {
-    //@todo protected
-        wprint( "IDENTITY" )
-    }
-
-    String getNativeType(Column column){
-        return column.type
-    }
-
-
-    /**
-     * Generates the DDL to modify an existing database so the schema matches
-     * the current specified database schema.  Drops and modifications will
-     * not be made.
-     *
-     * @param desiredDb The desired database schema
-     * @param cn A connection to the existing database that should be modified
-     *
-     * @throws IOException if the ddl cannot be output
-     * @throws SQLException if there is an error reading the current schema
-     */
-    void alterDatabase(Database desiredDb, cn) {//@todo throws IOException, SQLException {
-        alterDatabase( desiredDb, cn, false, false )
-    }
-
-    /**
-     * Generates the DDL to modify an existing database so the schema matches
-     * the current specified database schema.
-     *
-     * @param desiredDb The desired database schema
-     * @param cn A connection to the existing database that should be modified
-     * @param doDrops true if columns and indexes should be dropped, false if
-     *      just a message should be output
-     * @param modifyColumns true if columns should be altered for datatype, size, etc.,
-     *      false if just a message should be output
-     *
-     * @throws IOException if the ddl cannot be output
-     * @throws SQLException if there is an error reading the current schema
-     */
-    void alterDatabase(desiredDb, cn,doDrops, modifyColumns) {//@todo throws IOException, SQLException {
-        //        currentDb      = new JdbcModelReader(cn).database
-        //@todo line below is just test
-        def currentDb = new Database("wibble")
-                  
-        def deferredTables = []
-        for (desiredTable in desiredDb.tables) {
-            def currentTable = currentDb.findTable(desiredTable.name);
-//took out because if there were no changes to be made the execution had
-//errors because it tries to execute the comments as a statement
-//            tableComment(desiredTable)
-            if ( currentTable == null ) {
-                //@todo log.info( "creating table ${desiredTable.name}");
-                createTable( desiredTable )
-                // we're deferring foreignkey generation
-                deferredTables << desiredTable
-            } else {
-                //add any columns, indices, or constraints
-                for (desiredColumn in desiredTable.columns) {
-                    // ??? can we do currentTable.${desiredColumn.name} instead ????
-                    def currentColumn = currentTable.findColumn(desiredColumn.name)
-                    if ( null == currentColumn ) {
-                        //@todo log.info( "creating column ${desiredTable.name}.${desiredColumn.getName()}")
-                        alterColumn( desiredTable, desiredColumn, true )
-                    } else if ( columnsDiffer( desiredColumn, currentColumn ) ) {
-                        if ( modifyColumns ) {
-                            //@todo log.info( "altering column ${desiredTable.name}.${desiredColumn.name}" )
-                            //@todo log.info( "  desiredColumn=${desiredColumn.toStringAll()}" )
-                            //@todo log.info( "  currentColumn=${currentColumn.toStringAll()}" )
-                            alterColumn( desiredTable, desiredColumn, false )
-                        } else {
-                            String text = "Column ${currentColumn.name} in table ${currentTable.name} differs from current specification"
-                            //@todo log.info( text )
-                            wprintComment( text )
-                        }
-                    }
-                } //for columns
-
-                //@todo add constraints here...
-
-                //hmm, m-w.com says indices and indexes are both okay
-                //@todo should we check the index fields for differences?
-                for (desiredIndex in desiredTable.indexes) {
-                    def currentIndex = currentTable.findIndex(desiredIndex.name)
-                    if ( null == currentIndex ) {
-                        //@todo log.info( "creating index ${desiredTable.name}.${desiredIndex.name}" )
-                        writeIndex( desiredTable, desiredIndex )
-                    }
-                }
-
-                // Drops ///////////////////////
-                //@todo drop constraints - probably need names on them for this
-
-                //do any drops of columns
-                for (currentColumn in currentTable.columns) {
-                    def desiredColumn = desiredTable.findColumn(currentColumn.name)
-                    if ( null == desiredColumn ) {
-                        if ( doDrops ) {
-                            //@todo log.info( "dropping column ${currentTable.name}.${currentColumn.name}" )
-                            dropColumn( currentTable, currentColumn )
-                        } else {
-                            def text = "Column ${currentColumn.name} can be dropped from table ${currentTable.name}"
-                            //@todo log.info( text )
-                            wprintComment( text )
-                        }
-                    }
-                } //for columns
-
-                //drop indexes
-                for (currentIndex in currentTable.indexes) {
-                    def desiredIndex = desiredTable.findIndex(currentIndex.name)
-                    if ( null == desiredIndex ) {
-                        //make sure this isn't the primary key index (mySQL reports this at least)
-                        def isPk = true
-                        for (ic in currentIndex.indexColumns) {
-                            def c = currentTable.findColumn( ic.name )
-                            if ( !c.primaryKey ) {
-                                isPk = false
-                                break
-//@todo - does groovy break out of 'new' for loops or closures? 
-                            }
-                        }
-
-                        if ( !isPk ) {
-                            //@todo log.info( "dropping non-primary index ${currentTable.name}.${currentIndex.name}" )
-                            dropIndex( currentTable, currentIndex )
-                        }
-                    }
-                }
-
-            } //table exists?
-        } //for tables create
-
-        // generating deferred foreignkeys
-        for (table in deferredTables) {
-            createExternalForeignKey(table)
-        }
-        
-
-        //check for table drops
-        for (currentTable in currentDb.tables) {
-            def desiredTable = desiredDb.findTable(currentTable.name)
-
-            if ( desiredTable == null ) {
-                if ( doDrops ) {
-                    //@todo log.info( "dropping table ${currentTable.name}" )
-                    dropTable( currentTable )
-                } else {
-                    def text = "Table ${currentTable.name} can be dropped"
-                    //@todo log.info( text )
-                    wprintComment( text )
-                }
-            }
-
-        } //for tables drops
-    }
-
-    /**
-     * Generates the alter statement to add or modify a single column on a table.
-     *
-     * @param table The table the index is on
-     * @param column The column to drop
-     * @param add true if the column is new, false if it is to be changed
-     *
-     * @throws IOException if the statement cannot be written
-     */
-    void alterColumn( table, column, add ) {//@todo throws IOException {
-        writeAlterHeader( table )
-        wprint( add ? "ADD " : "MODIFY " )
-        createColumn( table, column )
-        wprintEndOfStatement()
-    }
-
-    /**
-     * Generates the statement to drop an column from a table.
-     *
-     * @param table The table the index is on
-     * @param column The column to drop
-     *
-     * @throws IOException if the statement cannot be written
-     */
-    void dropColumn( Table table, Column column ) {//@todo throws IOException {
-        writeAlterHeader( table )
-        wprint( "DROP COLUMN ${column.getName}" )
-        wprintEndOfStatement()
-    }
-
-   /**
-     * Generates the first part of the ALTER TABLE statement including the
-     * table name.
-     *
-     * @param table The table being altered
-     *
-     * @throws IOException if the statement cannot be written
-     */
-    void writeAlterHeader( Table table ) {//@todo throws IOException {
-    //@todo protected    
-        wprintln("ALTER TABLE ${table.name}")
-        wprintIndent()
-    }
-   /**
-     * Generates the statement to drop an index from the database.  The
-     * <code>alterTableForDrop</code> property is checked to determine what
-     * style of drop is generated.
-     *
-     * @param table The table the index is on
-     * @param index The index to drop
-     *
-     * @throws IOException if the statement cannot be written
-     *
-     * @see SqlGenerator#useAlterTableForDrop
-     */
-    void dropIndex( Table table, Index index ) {//@todo throws IOException {
-        if ( getAlterTableForDrop() ) {
-            writeAlterHeader( table )
-        }
-        wprint( "DROP INDEX ${index.name}")
-        if ( !getAlterTableForDrop() ) {
-            wprint( " ON ${table.name}" )
-        }
-        wprintEndOfStatement()
-    }
-
-//used to check for code to be changed when changing signatures
-//protected final void wprintAutoIncrementColumn() throws IOException {};
-//protected final void createColumn(Column column) throws IOException {};
-        
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Table.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Table.groovy
deleted file mode 100644
index ffc4798..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Table.groovy
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.javanicus.gsql
-
-public class Table extends GroovyObjectSupport implements Cloneable {
-    @Property catalog
-    @Property name
-    @Property groovyName
-    @Property schema
-    @Property remarks
-    @Property type
-    @Property List columns
-    @Property List foreignKeys
-    @Property List indexes
-    
-    public Table(aName) {
-        catalog = null
-        name = aName
-        groovyName = null
-        schema = null
-        remarks = null
-        type = null
-        columns = []
-        foreignKeys = []
-        indexes = []
-    }
-
-    public Object clone() { // throws CloneNotSupportedException {
-        def result = new Table(name)
-
-        result.catalog     = catalog
-        result.name        = name
-        result.groovyName  = groovyName
-        result.schema      = schema
-        result.remarks     = remarks
-        result.type        = type
-        result.columns     = columns.clone()
-        result.foreignKeys = foreignKeys.clone()
-        result.indexes     = indexes.clone()
-        
-        return result
-    }
-
-// @todo - cannot override property getter succesfully
-//    public String getType() {
-//        return (type == null) ? "(null)" : type
-//    }
-
-    public List getUniques() {
-        indexes.findAll() {it.isUnique()}
-    }
-    
-    
-    public boolean hasPrimaryKey() {
-        def aPrimaryKeyColumn = getColumns().find() {it.isPrimaryKey()}
-        return aPrimaryKeyColumn != null
-    }   
-    public Object getProperty(String propertyName) {
-        try {
-            return super.getProperty(propertyName);
-        } catch (Exception e) {
-            return findColumn(propertyName);
-        }
-    }
-    public Column findColumn(aName) {
-        // @todo
-        // warning 'name' inside closure refers to 'this.name', not method parameter called 'name' (in groovy 1.0b6) !!!
-        getColumns().find() {it.name.equalsIgnoreCase(aName)}
-    }
-
-    public Index findIndex(aName) {
-        getIndexes().find() {it.name.equalsIgnoreCase(aName)}
-    }
-
-    public List getPrimaryKeyColumns() {
-        getColumns().findAll() {it.isPrimaryKey()}
-    }
-
-    public Column getAutoIncrementColumn() {
-        getColumns().find() {it.isAutoIncrement()}
-    }
-    
-    public String toString() {
-        "Table[name=${name};columnCount=${columns.size()}]"
-    }
-
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/TypeMap.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/TypeMap.groovy
deleted file mode 100644
index 7dac627..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/TypeMap.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.javanicus.gsql
-
-import java.sql.Types
-
-public class TypeMap {
-    @Property nameToCode
-    @Property codeToName
-    @Property decimalTypes
-    @Property textTypes
-    @Property otherTypes
-              
-    public TypeMap() {
-        nameToCode = [:]
-        codeToName = [:]
-                  
-        decimalTypes = [
-            "numeric" : Types.NUMERIC,
-            "decimal" : Types.DECIMAL,
-            "float" : Types.FLOAT,
-            "real" : Types.REAL,
-            "double" : Types.DOUBLE
-        ]
-        textTypes = [
-            "char" : Types.CHAR,
-            "varchar" : Types.VARCHAR,
-            "longvarchar" : Types.LONGVARCHAR,
-            "clob" : Types.CLOB,
-            "date" : Types.DATE,
-            "time" : Types.TIME,
-            "timestamp" : Types.TIMESTAMP
-        ]
-        otherTypes = [
-            "bit" : Types.BIT,
-            "tinyint" : Types.TINYINT,
-            "smallint" : Types.SMALLINT,
-            "integer" : Types.INTEGER,
-            "bigint" : Types.BIGINT,
-            "binary" : Types.BINARY,
-            "varbinary" : Types.VARBINARY,
-            "longvarbinary" : Types.LONGVARBINARY,
-            "null" : Types.NULL,
-            "other" : Types.OTHER,
-            "java_object" : Types.JAVA_OBJECT,
-            "distinct" : Types.DISTINCT,
-            "struct" : Types.STRUCT,
-            "array" : Types.ARRAY,
-            "blob" : Types.BLOB,
-            "ref" : Types.REF,
-            "datalink" : Types.DATALINK,
-            "boolean" : Types.BOOLEAN
-        ]
-        for (entries in decimalTypes.entrySet()) {
-            crossRef(entries.key,entries.value)          
-        }          
-        for (entries in textTypes.entrySet()) {
-            crossRef(entries.key,entries.value)          
-        }          
-        for (entries in otherTypes.entrySet()) {
-            crossRef(entries.key,entries.value)          
-        }          
-  
-    }
-    
-    private crossRef(name,code) {
-        nameToCode.put(name,code)
-        codeToName.put(code,name)
-    }
-    
-    public int getJdbcTypeCode(String name) {
-        return nameToCode.get(name,Types.OTHER)
-    }
-
-    public String getJdbcTypeName(int code) {
-        return codeToName.get(code,"unknown")
-    }
-    
-    /**
-      * Returns true if values for the type need have size and scale measurements
-      *
-      * @param type The type to check.
-      */
-    public boolean isDecimalType(int type) {
-        return isDecimalType(getJdbcTypeName(type));
-    }
-    
-    /**
-      * Returns true if values for the type need have size and scale measurements
-      *
-      * @param type The type to check.
-      */
-    public boolean isDecimalType(String type) {
-        return decimalTypes.keySet().any {
-            type.equalsIgnoreCase(it)
-        }
-    }
-    
-}
diff --git a/groovy/modules/gsql/src/org/javanicus/gsql/Unique.groovy b/groovy/modules/gsql/src/org/javanicus/gsql/Unique.groovy
deleted file mode 100644
index 12773e6..0000000
--- a/groovy/modules/gsql/src/org/javanicus/gsql/Unique.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.javanicus.gsql
-
-public class Unique extends Index {
-}
diff --git a/groovy/modules/gsql/test/org/javanicus/gsql/ColumnTest.groovy b/groovy/modules/gsql/test/org/javanicus/gsql/ColumnTest.groovy
deleted file mode 100644
index 7c9c2c4..0000000
--- a/groovy/modules/gsql/test/org/javanicus/gsql/ColumnTest.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.javanicus.gsql
-
-class ColumnTest extends GroovyTestCase {
-    @Property column
-    @Property idColumn
-    @Property nameColumn
-    @Property yearOfBirthColumn          
-              
-    void setUp() {
-        TypeMap typeMap = new TypeMap()          
-        column = new Column(typeMap)
-        idColumn = new Column(typeMap,"id","id",0,"10",true,true,true,null)     
-        nameColumn = new Column(typeMap,"name","name",0,"250",true,false,false,"<no name>")
-        yearOfBirthColumn = new Column(typeMap,"year of birth","yearOfBirth",0,"4",false,false,false,null,0)
-    }
-    
-    void testPrimaryKey() { //todo: throws Exception {
-        assert false == column.isPrimaryKey()
-    }
-    
-    void testSizeAndScale() {
-        column.size = "10,2"
-        assert 2 == column.scale
-        //bug? can't initialise properly (null not zero) - see constructor in Column.groovy
-        //assert 0 == nameColumn.scale          
-        assert 0 == yearOfBirthColumn.scale          
-    }
-    
-    void testTypeNameHasBeenInitialisedWhenOnlyColumnTypeHasBeenSet() {
-        assert "null" == idColumn.type
-    }
-    
-    
-}
diff --git a/groovy/modules/gsql/test/org/javanicus/gsql/DatabaseTest.groovy b/groovy/modules/gsql/test/org/javanicus/gsql/DatabaseTest.groovy
deleted file mode 100644
index 0085b46..0000000
--- a/groovy/modules/gsql/test/org/javanicus/gsql/DatabaseTest.groovy
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.javanicus.gsql
-
-class DatabaseTest extends GroovyTestCase {
-    @Property table
-    @Property idColumn
-    @Property fred
-    @Property barney
-    @Property wilma
-    @Property db1
-    @Property db2
-              
-    void setUp() {
-        typeMap = new TypeMap()          
-        idColumn = new Column(typeMap,"id","id",0,"10",true,true,true,null)     
-                  
-        fred = new Table("fred")
-        fred.columns << idColumn
-                  
-        barney = new Table("barney")
-        barney.columns << idColumn          
-                  
-        wilma = new Table("wilma")
-        wilma.columns << idColumn
-                  
-        db1 = new Database("db1")
-        db1.tables << fred
-        db1.tables << barney
-                  
-        db2 = new Database("db2")
-        db2.tables << wilma
-        db2.tables << barney
-    }
-    
-    void testMergeDatabasesTogether() {
-        db1.mergeWith(db2);
-        assert 3 == db1.tables.size()
-        assert db1.tables.contains(fred)
-        assert db1.tables.contains(barney)
-        assert null != db1.tables.find(){it.name == "wilma"}
-    }
-}
diff --git a/groovy/modules/gsql/test/org/javanicus/gsql/RelationalBuilderTest.groovy b/groovy/modules/gsql/test/org/javanicus/gsql/RelationalBuilderTest.groovy
deleted file mode 100644
index 1a3ea29..0000000
--- a/groovy/modules/gsql/test/org/javanicus/gsql/RelationalBuilderTest.groovy
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Test to verify that builder constructs valid Relational Schema
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-
-package org.javanicus.gsql
-
-class RelationalBuilderTest extends GroovyTestCase {
-    @Property database
-    @Property table
-              
-    void setUp() {
-        build = new RelationalBuilder(new TypeMap())
-                  
-        database = build.database(name:'fred') {
-            table(name:'wilma') {
-                column(name:'pebbles',size:'10,2',required:true)
-                column(name:'bambam',size:'20')
-            }
-        }
-        
-        table = build.table(name:'individual') {
-            column(name:'individual_id', type:'integer', required:true, primaryKey:true, autoIncrement:true)
-            column(name:'surname', type:'varchar', size:15, required:true)
-            column(name:'event_id', type:'integer')
-            foreignKey(foreignTable:'event') {
-                reference(local:'event_id',foreign:'event_id')
-            }
-            index(name:'surname_index') {
-                indexColumn(name:'surname')
-            }
-        }
-                  
-    }
-    
-    void testFinders() {
-        assert null != database
-        assert "pebbles" == database.wilma.pebbles.name
-        assert 10 == database.wilma.pebbles.size
-        assert 2 == database.wilma.pebbles.scale
-    }
-    
-    void testForeignKeys() {
-        assert "event" == table.foreignKeys[0].foreignTable
-        assert "event_id" == table.foreignKeys[0].references[0].local
-        assert "event_id" == table.foreignKeys[0].references[0].foreign
-    }          
-}
diff --git a/groovy/modules/gsql/test/org/javanicus/gsql/SqlGeneratorTest.groovy b/groovy/modules/gsql/test/org/javanicus/gsql/SqlGeneratorTest.groovy
deleted file mode 100644
index a4dfdd6..0000000
--- a/groovy/modules/gsql/test/org/javanicus/gsql/SqlGeneratorTest.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Test to verify valid construction of default DDL
- * 
- * @author <a href="mailto:jeremy.rayner@bigfoot.com">Jeremy Rayner</a>
- * @version $Revision$
- */
-package org.javanicus.gsql
-
-import java.io.*
-
-class SqlGeneratorTest extends GroovyTestCase {
-    @Property database
-    @Property sqlGenerator
-              
-    void setUp() {
-        typeMap = new TypeMap()          
-        build = new RelationalBuilder(typeMap)
-        sqlGenerator = new SqlGenerator(typeMap,System.getProperty( "line.separator", "\n" ))
-                  
-        database = build.database(name:'genealogy') {
-          table(name:'event') {
-              column(name:'event_id', type:'integer', size:10, primaryKey:true, required:true)
-              column(name:'description', type:'varchar', size:30)          
-          }
-          table(name:'individual') {
-            column(name:'individual_id', type:'integer', size:10, required:true, primaryKey:true, autoIncrement:true)
-            column(name:'surname', type:'varchar', size:15, required:true)
-            column(name:'event_id', type:'integer', size:10)
-            foreignKey(foreignTable:'event') {
-                reference(local:'event_id',foreign:'event_id')
-            }
-            index(name:'surname_index') {
-                indexColumn(name:'surname')
-            }
-          }
-        }
-    }
-    
-    void testGenerateDDL() {
-        testWriter = new PrintWriter(new FileOutputStream("SqlGeneratorTest.sql"))
-        sqlGenerator.writer = testWriter
-        sqlGenerator.createDatabase(database,true)
-        testWriter.flush()
-   }
-
-}
diff --git a/groovy/modules/gsql/test/org/javanicus/gsql/TableTest.groovy b/groovy/modules/gsql/test/org/javanicus/gsql/TableTest.groovy
deleted file mode 100644
index 66820c2..0000000
--- a/groovy/modules/gsql/test/org/javanicus/gsql/TableTest.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.javanicus.gsql
-
-class TableTest extends GroovyTestCase {
-    @Property table
-    @Property idColumn
-    @Property nameColumn
-              
-    void setUp() {
-        typeMap = new TypeMap()          
-        idColumn = new Column(typeMap,"id","id",0,"10",true,true,true,null)     
-        nameColumn = new Column(typeMap,"name","name",0,"250",true,false,false,"<no name>")
-        table = new Table("wheelbarrow")
-        table.columns << idColumn          
-        table.columns << nameColumn     
-    }
-    
-    void testPrimaryKey() { //todo: throws Exception {
-        
-        // @todo wouldn't it be groovy to have the inverse of
-        // the contains() method, on Object, such that you
-        // could express "if idColumn.isIn(table.primaryKeyColumns) {"
-        // i.e. add to DefaultGroovyMethods something along the
-        // lines of public static boolean isIn(Object obj,Collection cltn) ...
-        
-        assert table.primaryKeyColumns.contains(idColumn)
-    }
-    
-    void testFindColumnUsingCaseInsensitiveName() {
-        assert nameColumn == table.findColumn("NaMe")
-    }
-}
diff --git a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPage.java b/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPage.java
deleted file mode 100644
index 55753b8..0000000
--- a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPage.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package groovy.modules.pages;
-
-import groovy.lang.Script;
-import groovy.lang.Binding;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Default base class of pages.  Provides access to many useful functions for web page writers.
- * Note: Currently unused due to a bug in Groovy not allowing classes derived indirectly from Script
- * to receive their Binding data.  Also, many functions to be added soon.
- */
-public abstract class GroovyPage extends Script {
-
-/*	private final ThreadLocal bindings = new ThreadLocal();
-
-	public Binding getBinding() {
-	    return (Binding)bindings.get();
-	} // getBinding()
-
-	public void setBinding(Binding binding) {
-	    bindings.set(binding);
-	} // setBinding()
-
-	public Object getProperty(String property) {
-	    return getBinding().getVariable(property);
-	}
-
-	public void setProperty(String property, Object newValue) {
-	    getBinding().setVariable(property, newValue);
-	}
-*/
-	/**
-	 * Defaults to deflt if value is null.
-	 */
-	public Object ensure(Object value, Object deflt) {
-		return value == null ? deflt : value;
-	} // ensure()
-
-	/**
-	 * Convert from HTML to Unicode text.  This function converts many of the encoded HTML
-	 * characters to normal Unicode text.  Example: &amp;lt&semi; to &lt;.  This is the opposite
-	 * of showHtml().
-	 * @see showHtml(String)
-	 */
-	public static String fromHtml(String text)
-	{
-		int ixz;
-		if (text == null || (ixz = text.length()) == 0) return text;
-		StringBuffer buf = new StringBuffer(ixz);
-		String rep = null;
-		for (int ix = 0; ix < ixz; ix++)
-		{
-			char c = text.charAt(ix);
-			if (c == '&');
-			{
-				String sub = text.substring(ix + 1).toLowerCase();
-				if (sub.startsWith("lt;"))
-				{
-					c = '<';
-					ix += 3;
-				}
-				else
-				if (sub.startsWith("gt;"))
-				{
-					c = '>';
-					ix += 3;
-				}
-				else
-				if (sub.startsWith("amp;"))
-				{
-					c = '&';
-					ix += 4;
-				}
-				else
-				if (sub.startsWith("nbsp;"))
-				{
-					c = ' ';
-					ix += 5;
-				}
-				else
-				if (sub.startsWith("semi;"))
-				{
-					c = ';';
-					ix += 5;
-				}
-				else
-				if (sub.startsWith("#"))
-				{
-					char c2 = 0;
-					for (int iy = ix + 1; iy < ixz; iy++)
-					{
-						char c1 = text.charAt(iy);
-						if (c1 >= '0' && c1 <= '9')
-						{
-							c2 = (char)(c2 * 10 + c1);
-							continue;
-						}
-						if (c1 == ';')
-						{
-							c = c2;
-							ix = iy;
-						}
-						break;
-					}
-				}
-			}
-			if (rep != null)
-			{
-				buf.append(rep);
-				rep = null;
-			}
-			else buf.append(c);
-		}
-		return buf.toString();
-	} // fromHtml()
-
-	/**
-	 * Substring Replacer. For each instance of <b>sub</b> found in <b>str</b>, it is replaced
-	 * by <b>rep</b>.  The resulting String is returned.
-	 */
-	public static String replace(String str, String sub, String rep)
-	{
-		StringBuffer buf = null;
-		int lenS = sub.length();
-		for (int last = 0;;)
-		{
-			int ix = str.indexOf(sub, last);
-			if (ix < 0)
-			{
-				if (buf != null)
-				{
-					buf.append(str.substring(last));
-					str = buf.toString();	// return str as result
-				}
-				break;
-			}
-			if (buf == null) buf = new StringBuffer(str.length() * 3 / 2);
-			buf.append(str.substring(last, ix));
-			buf.append(rep);
-			last = ix + lenS;
-		}
-		return str;
-	} // replace()
-
-	/**
-	 * Substring Replacer. For each instance of <b>sub</b> found in <b>str</b>, it is replaced
-	 * by <b>rep</b>.  The buffer argument itself is modifed and returned.  This is faster than
-	 * replace(), especially useful when called multiple times for various replacements.
-	 */
-	public static StringBuffer replaceBuf(StringBuffer buf, String sub, String rep)
-	{
-		String str = buf.toString();
-		int lenS = sub.length();
-		int diff = rep.length() - lenS;
-		int offset = 0;
-		for (int last = 0;;)
-		{
-			int ix = str.indexOf(sub, last);
-			if (ix < 0) break;
-			buf.replace(ix + offset, ix + offset + lenS, rep);
-			last = ix + lenS;
-			offset += diff;
-		}
-		return buf;
-	} // replaceBuf()
-
-} // GroovyPage
-
diff --git a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPages.java b/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPages.java
deleted file mode 100644
index 44d18d5..0000000
--- a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyPages.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright 2003 (C) Troy Heninger. All Rights Reserved.
- *
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- *
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *
- */
-package groovy.modules.pages;
-
-import groovy.lang.Binding;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.Script;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.modules.pages.Loader;
-import org.codehaus.groovy.modules.pages.Parse;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.*;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Main servlet class.  Example usage in web.xml:
- * 	<servlet>
- *       <servlet-name>GroovyPages</servlet-name>
- *       <servlet-class>groovy.modules.pages.GroovyPages</servlet-class>
- *		<init-param>
- *			<param-name>allowSpilling</param-name>
- *			<param-value>1</param-value>
- *			<description>
- *             Allows developers to view the intermediade source code, when they pass
- *				a spillGroovy argument in the URL.
- *          </description>
- *		</init-param>
- *    </servlet>
- */
-
-public class GroovyPages extends HttpServlet /*implements GroovyObject*/ {
-	Object x;
-	private ServletContext context;
-	private boolean allowSpilling = false;
-
-	private static Map pageCache = Collections.synchronizedMap(new HashMap());
-	private static ClassLoader parent;
-
-	/**
-	 * @return the servlet context
-	 */
-	public ServletContext getServletContext() { return context; }
-
-	private static class PageMeta {
-		private Class servletScriptClass;
-		private long lastModified;
-		private Map dependencies = new HashMap();
-		private InputStream groovySource;
-	} // PageMeta
-
-	/**
-	 * Initialize the servlet, set it's parameters.
-	 * @param config servlet settings
-	 */
-	public void init(ServletConfig config) {
-		// Get the servlet context
-		context = config.getServletContext();
-		context.log("Groovy servlet initialized");
-
-		// Ensure that we use the correct classloader so that we can find
-		// classes in an application server.
-		parent = Thread.currentThread().getContextClassLoader();
-		if (parent == null) parent = getClass().getClassLoader();
-
-		allowSpilling = config.getInitParameter("allowSpilling") != null;
-	} // init()
-
-	/**
-	 * Handle HTTP GET requests.
-	 * @param request
-	 * @param response
-	 * @throws ServletException
-	 * @throws IOException
-	 */
-	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-		doPage(request, response);
-	} // doGet()
-
-	/**
-	 * Handle HTTP POST requests.
-	 * @param request
-	 * @param response
-	 * @throws ServletException
-	 * @throws IOException
-	 */
-	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-		doPage(request, response);
-	} // doPost()
-
-	/**
-	 * Execute page and produce output.
-	 * @param request
-	 * @param response
-	 * @throws ServletException
-	 * @throws IOException
-	 */
-	public void doPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-		String pageId = getPageId(request);
-		URL pageUrl = getPageUrl(pageId);
-		if (pageUrl == null) {
-			context.log("GroovyPages:  \"" + pageUrl + "\" not found");
-			response.sendError(404, "\"" + pageUrl + "\" not found.");
-			return;
-		}
-
-		boolean spillGroovy = allowSpilling && request.getParameter("spillGroovy") != null;
-		PageMeta pageMeta = getPage(pageId, pageUrl, request.getServletPath(), spillGroovy);
-		Writer out = GroovyWriter.getInstance(response, 8192);
-		try {
-			if (spillGroovy) {
-					// Set it to TEXT
-				response.setContentType("text/plain"); // must come before response.getOutputStream()
-				send(pageMeta.groovySource, out);
-				pageMeta.groovySource = null;
-			} else {
-		System.out.println("Start");
-					// Set it to HTML by default
-				response.setContentType("text/html"); // must come before response.getWriter()
-				Binding binding = getBinding(request, response, out);
-				Script page = InvokerHelper.createScript(pageMeta.servletScriptClass, binding);
-//				page.setBinding(binding);
-				page.run();
-			}
-		} finally {
-			if (out != null) out.close();
-	System.out.println("Done");
-		}
-	} // doPage()
-
-	/**
-	 * Prepare Bindings before instantiating page.
-	 * @param request
-	 * @param response
-	 * @param out
-	 * @return the Bindings
-	 * @throws IOException
-	 */
-	protected Binding getBinding(HttpServletRequest request, HttpServletResponse response, Writer out)
-	        throws IOException {
-		// Set up the script context
-		Binding binding = new Binding();
-		binding.setVariable("request", new GroovyRequest(request));
-		binding.setVariable("response", response);
-		binding.setVariable("application", context);
-		binding.setVariable("session", new GroovySession(request));
-		binding.setVariable("out", out);
-
-		// Form parameters. If there are multiple its passed as a list.
-		for (Enumeration paramEnum = request.getParameterNames(); paramEnum.hasMoreElements();) {
-			String key = (String) paramEnum.nextElement();
-			if (binding.getVariable(key) == null) {
-				String[] values = request.getParameterValues(key);
-				if (values.length == 1) {
-					binding.setVariable(key, values[0]);
-				} else {
-					binding.setVariable(key, values);
-				}
-			}
-		}
-		return binding;
-	} // getBinding()
-
-	/**
-	 * Lookup page class or load new one if needed.
-	 * @param pageId
-	 * @param pageUrl
-	 * @param servletPath
-	 * @param spillGroovy
-	 * @return
-	 * @throws IOException
-	 * @throws ServletException
-	 */
-	protected PageMeta getPage(String pageId, URL pageUrl, String servletPath, boolean spillGroovy)
-	        throws IOException, ServletException  {
-			// Lock on the pageId to ensure that only one compile occurs for any script
-		synchronized (pageId) {
-				// Get the URLConnection
-			URLConnection groovyScriptConn = pageUrl.openConnection();
-				// URL last modified
-			long lastModified = groovyScriptConn.getLastModified();
-				// Check the cache for the script
-			PageMeta pageMeta = (PageMeta)pageCache.get(pageId);
-				// If the pageMeta isn't null check all the dependencies
-			boolean dependencyOutOfDate = false;
-			if (pageMeta != null && !spillGroovy) {
-				isPageNew(pageMeta);
-			}
-			if (pageMeta == null || pageMeta.lastModified < lastModified || dependencyOutOfDate || spillGroovy) {
-				pageMeta = newPage(pageId, servletPath, groovyScriptConn, lastModified, spillGroovy);
-			}
-			return pageMeta;
-		}
-	} // getPage()
-
-	/**
-	 * Is page new or changed?
-	 * @param pageMeta page data
-	 * @return true if compile needed
-	 */
-	private boolean isPageNew(PageMeta pageMeta) {
-		for (Iterator i = pageMeta.dependencies.keySet().iterator(); i.hasNext(); ) {
-			URLConnection urlc = null;
-			URL url = (URL)i.next();
-			try {
-				urlc = url.openConnection();
-				urlc.setDoInput(false);
-				urlc.setDoOutput(false);
-				long dependentLastModified = urlc.getLastModified();
-				if (dependentLastModified > ((Long)pageMeta.dependencies.get(url)).longValue()) {
-					return true;
-				}
-			} catch (IOException ioe) {
-				return true;
-			}
-		}
-		return false;
-	} // isPageNew()
-
-	/**
-	 * Load and compile new page.
-	 * @param pageId
-	 * @param servletPath
-	 * @param groovyScriptConn
-	 * @param lastModified
-	 * @param spillGroovy
-	 * @return
-	 * @throws IOException
-	 * @throws ServletException
-	 */
-	private PageMeta newPage(String pageId, String servletPath, URLConnection groovyScriptConn, long lastModified,
-	                         boolean spillGroovy) throws IOException, ServletException {
-		Parse parse = new Parse(pageId, groovyScriptConn.getInputStream());
-		InputStream in = parse.parse();
-
-			// Make a new pageMeta
-		PageMeta pageMeta = new PageMeta();
-
-			// just return groovy and don't compile if asked
-		if (spillGroovy) {
-			pageMeta.groovySource = in;
-			return pageMeta;
-		}
-			// Compile the script into an object
-		GroovyClassLoader groovyLoader = new Loader(parent, context, servletPath, pageMeta.dependencies);
-		Class scriptClass;
-		try {
-			scriptClass =
-				groovyLoader.parseClass(in, pageId.substring(1));
-		} catch (SyntaxException e) {
-			throw new ServletException("Could not parse script: " + pageId, e);
-		}
-		pageMeta.servletScriptClass = scriptClass;
-		pageMeta.lastModified = lastModified;
-		pageCache.put(pageId, pageMeta);
-		return pageMeta;
-	} // newPage()
-
-	/**
-	 * Return the page identifier.
-	 * @param request
-	 * @return
-	 */
-	protected String getPageId(HttpServletRequest request) {
-		// Get the name of the Groovy script (intern the name so that we can
-		// lock on it)
-		int contextLength = request.getContextPath().length();
-		return request.getRequestURI().substring(contextLength).intern();
-	} // getPageId()
-
-	/**
-	 * Return the page URL from the request path.
-	 * @param pageId
-	 * @return
-	 * @throws MalformedURLException
-	 */
-	protected URL getPageUrl(String pageId) throws MalformedURLException {
-		// Check to make sure that the file exists in the web application
-		return context.getResource(pageId);
-	} // getPageUrl()
-
-	/**
-	 * Copy all of input to output.
-	 * @param in
-	 * @param out
-	 * @throws IOException
-	 */
-	public static void send(InputStream in, Writer out) throws IOException {
-		try {
-			Reader reader = new InputStreamReader(in);
-			char[] buf = new char[8192];
-			for (;;) {
-				int read = reader.read(buf);
-				if (read <= 0) break;
-				out.write(buf, 0, read);
-			}
-		} finally {
-			out.close();
-			in.close();
-		}
-	} // send()
-	
-} // GroovyPages
diff --git a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyRequest.java b/groovy/modules/pages/src/main/groovy/modules/pages/GroovyRequest.java
deleted file mode 100644
index 1bd233e..0000000
--- a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyRequest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package groovy.modules.pages;
-
-import groovy.util.Proxy;
-
-import java.util.*;
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 13, 2004
- * Proxy for ServletRequest.  All calls get forwarded to actual request, but also provides Map
- * functionality to request parameters.
- */
-public class GroovyRequest extends Proxy implements Map {
-	public static final String PREFIX = "groovy.var.";
-	public static final int PREFIX_LEN = PREFIX.length();
-	public static final Null NULL = new Null();
-
-	private Map map = new HashMap();
-
-	/**
-	 * Singleton to represent a nulled out/cleared parameter at runtime.
-	 */
-	static class Null {
-		Null() {}
-		public boolean equals(Object obj) {
-			return obj instanceof Null;
-		}
-	} // Null
-
-	/**
-	 * Constructor.  All request attributes, parameters, and headers become members.
-	 * @param request encapsulated request
-	 */
-	GroovyRequest(HttpServletRequest request) {
-		super(request);
-		String name;
-		Enumeration en = request.getHeaderNames();
-		while (en.hasMoreElements()) {
-			name = (String)en.nextElement();
-			String header = request.getHeader(name);
-			if (!header.equals(NULL)) {
-				map.put(name, header);
-			}
-		}
-		en = request.getParameterNames();
-		while (en.hasMoreElements()) {
-			name = (String)en.nextElement();
-			String[] values = request.getParameterValues(name);
-			if (values == null) continue;
-			if (values.length == 1) map.put(name, values[0]);
-			else map.put(name, Arrays.asList(values));
-		}
-		en = request.getAttributeNames();
-		while (en.hasMoreElements()) {
-			name = (String)en.nextElement();
-			if (name.startsWith(PREFIX)) {
-				Object value = request.getAttribute(name);
-				if (!value.equals(NULL)) {
-					map.put(name.substring(PREFIX_LEN), value);
-				}
-			}
-		}
-	} // GroovyRequest()
-
-	/**
-	 * Clear all parameters.
-	 */
-	public void clear() { map.clear(); }
-
-	/**
-	 * Returns true if parameter key has or had a value.
-	 */
-	public boolean containsKey(Object key) { return map.containsKey(key); }
-
-	/**
-	 * Returns true if value exists.
-	 * @param value
-	 * @return
-	 */
-	public boolean containsValue(Object value) { return map.containsValue(value); }
-
-	/**
-	 * Returns the complete set of parameters.
-	 * @return
-	 */
-	public Set entrySet() { return map.entrySet(); }
-
-	/**
-	 * Returns the parameter or null.
-	 * @param key
-	 * @return
-	 */
-	public Object get(Object key) { return map.get(key); }
-
-	/**
-	 * Lookup parameter or bean property.
-	 * @param property
-	 * @return
-	 */
-	public Object getProperty(String property) {
-		Object result = super.getProperty(property);
-		if (result.equals(NULL)) result = null;
-		return result;
-	} // getProperty()
-
-	/**
-	 * Returns the original request.
-	 * @return
-	 */
-	public ServletRequest getRequest() { return (ServletRequest)getRealObject(); }
-
-	/**
-	 * Probably never true, because there's always some headers.
-	 * @return
-	 */
-	public boolean isEmpty() { return map.isEmpty(); }
-
-	/**
-	 * Returns the complete set of keys.
-	 * @return
-	 */
-	public Set keySet() { return map.keySet(); }
-
-	/**
-	 * Change a parameter for later use in the page or for sending to a called page.
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public Object put(Object key, Object value) {
-		if (value == null) value = NULL;
-		getRequest().setAttribute(PREFIX + key, value);
-		if (value.equals(NULL)) return map.remove(key);
-		else return map.put(key, value);
-	} // put()
-
-	/**
-	 * Change all included parameters.
-	 * @param t
-	 */
-	public void putAll(Map t) {
-		Iterator it = t.entrySet().iterator();
-		while (it.hasNext()) {
-			Map.Entry entry = (Map.Entry)it.next();
-			put(entry.getKey(), entry.getValue());
-		}
-	}
-
-	/**
-	 * Set's the parameter to null.
-	 * @param key
-	 * @return
-	 */
-	public Object remove(Object key) { return put(key, null); }
-
-	/**
-	 * Returns the number of parameters.
-	 * @return
-	 */
-	public int size() { return map.size(); }
-
-	/**
-	 * Returns the complete set of values.
-	 * @return
-	 */
-	public Collection values() { return map.values(); }
-
-} // GroovyRequest
diff --git a/groovy/modules/pages/src/main/groovy/modules/pages/GroovySession.java b/groovy/modules/pages/src/main/groovy/modules/pages/GroovySession.java
deleted file mode 100644
index 7493acd..0000000
--- a/groovy/modules/pages/src/main/groovy/modules/pages/GroovySession.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package groovy.modules.pages;
-
-import groovy.util.Proxy;
-
-import javax.servlet.http.HttpSession;
-import javax.servlet.http.HttpServletRequest;
-import java.util.*;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 13, 2004
- * Proxy for HttpSession.  All calls get forwarded to actual session, but also provides Map
- * functionality to session variables.
- */
-public class GroovySession extends Proxy implements Map {
-	private Map map = Collections.synchronizedMap(new HashMap());
-
-	/**
-	 * Constructor, takes request, extracts and encapsulates the session.
-	 * @param request
-	 */
-	GroovySession(HttpServletRequest request) {
-		super(request.getSession(true));
-		HttpSession session = getSession();
-		Enumeration en = session.getAttributeNames();
-		while (en.hasMoreElements()) {
-			String name = (String)en.nextElement();
-			map.put(name, session.getAttribute(name));
-		}
-	} // GroovySession()
-
-	/**
-	 * Clear all variables.
-	 */
-	public void clear() {
-		map.clear();
-		Collection names = new HashSet();
-		HttpSession session = getSession();
-		Enumeration en = session.getAttributeNames();
-		while (en.hasMoreElements()) {
-			names.add(en.nextElement());
-		}
-		Iterator it = names.iterator();
-		while (it.hasNext()) {
-			remove(it.next());
-		}
-	} // clear()
-
-	/**
-	 * Return true if the variables is set.
-	 * @param key
-	 * @return
-	 */
-	public boolean containsKey(Object key) { return map.containsKey(key); }
-
-	/**
-	 * Return true if value is in one of the variables.
-	 * @param value
-	 * @return
-	 */
-	public boolean containsValue(Object value) { return map.containsValue(value); }
-
-	/**
-	 * Return the complete set of variables.
-	 * @return
-	 */
-	public Set entrySet() { return map.entrySet(); }
-
-	/**
-	 * Get the variable.
-	 * @param key
-	 * @return
-	 */
-	public Object get(Object key) { return map.get(key); }
-
-	/**
-	 * Return the real session object.
-	 * @return
-	 */
-	public HttpSession getSession() { return (HttpSession)getRealObject(); }
-
-	/**
-	 * Return true if no variables have been set.
-	 * @return
-	 */
-	public boolean isEmpty() { return map.isEmpty(); }
-
-	/**
-	 * Return the complete set of variable names.
-	 * @return
-	 */
-	public Set keySet() { return map.keySet(); }
-
-	/**
-	 * Set the variable, or clear it if value = null.
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public Object put(Object key, Object value) {
-		getSession().setAttribute(String.valueOf(key), value);
-		if (value == null) return map.remove(key);
-		else return map.put(key, value);
-	} // put()
-
-	/**
-	 * Copy all members of t in.
-	 * @param t
-	 */
-	public void putAll(Map t) {
-		Iterator it = t.entrySet().iterator();
-		while (it.hasNext()) {
-			Map.Entry entry = (Map.Entry)it.next();
-			put(entry.getKey(), entry.getValue());
-		}
-	}
-
-	/**
-	 * Remove the variable.
-	 * @param key
-	 * @return
-	 */
-	public Object remove(Object key) {
-		return put(key, null);
-	}
-
-	/**
-	 * Return the number of variables.
-	 * @return
-	 */
-	public int size() { return map.size(); }
-
-	/**
-	 * Return the complete collection of values.
-	 * @return the values
-	 */
-	public Collection values() { return map.values(); }
-	
-} // GroovySession
diff --git a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyWriter.java b/groovy/modules/pages/src/main/groovy/modules/pages/GroovyWriter.java
deleted file mode 100644
index 44b4031..0000000
--- a/groovy/modules/pages/src/main/groovy/modules/pages/GroovyWriter.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package groovy.modules.pages;
-
-import javax.servlet.ServletResponse;
-import java.io.*;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 13, 2004
- * A buffered writer that won't commit the response until the buffer has reached the high
- * water mark, or until flush() or close() is called.
- */
-public class GroovyWriter extends PrintWriter {
-	private ServletResponse response;
-	private CharArrayWriter out0 = new CharArrayWriter();
-	private Writer out1;
-	private int max;
-	private boolean trouble = false;
-
-	/**
-	 * Private constructor.  Use getInstance() instead.
-	 * @param response
-	 * @param out
-	 * @param max
-	 */
-	private GroovyWriter(ServletResponse response, CharArrayWriter out, int max) {
-		super(out);
-		this.response = response;
-		this.out0 = out;
-		this.max = max;
-	} // GroovyWriter
-
-	/**
-	 * Make sure streams get closed eventually.
-	 * @throws Throwable
-	 */
-	protected void finalize() throws Throwable {
-		close();
-		super.finalize();
-	} // finalize()
-
-	/**
-	 * Flush the stream if it's not closed and check its error state.
-	 * Errors are cumulative; once the stream encounters an error, this
-	 * routine will return true on all successive calls.
-	 *
-	 * @return True if the print stream has encountered an error, either on the
-	 * underlying output stream or during a format conversion.
-	 */
-	public boolean checkError() {
-		if (super.checkError()) return true;
-		return trouble;
-	} // checkError()
-
-	/**
-	 * Close the stream.
-	 * @see #checkError()
-	 */
-	public void close() {
-//		System.out.println("GroovyWriter.close()");
-		if (!response.isCommitted()) {
-			response.setContentLength(out0.size());
-		System.out.println("Content Length = " + out0.size());
-		}
-		flush();
-		super.close();
-	} // close()
-
-	/**
-	 * Flush the stream.
-	 * @see #checkError()
-	 */
-	public synchronized void flush() {
-//		System.out.println("GroovyWriter.flush()");
-		if (trouble) return;
-		super.flush();
-		if (out1 == null) {
-			try {
-				out1 = response.getWriter();
-			} catch (IOException e) {
-				trouble = true;
-				return;
-			}
-		}
-		try {
-			out1.write(out0.toCharArray());
-			out0.reset();
-		} catch (IOException e) {
-			trouble = true;
-		}
-	} // flush()
-
-	/**
-	 * Static factory method to create the writer.
-	 * @param response
-	 * @param max
-	 * @return
-	 */
-	static GroovyWriter getInstance(ServletResponse response, int max) {
-		return new GroovyWriter(response, new CharArrayWriter(max), max);
-	} // getInstance()
-
-	/**
-	 * Print an object.  The string produced by the <code>{@link
-	 * java.lang.String#valueOf(Object)}</code> method is translated into bytes
-	 * according to the platform's default character encoding, and these bytes
-	 * are written in exactly the manner of the <code>{@link #write(int)}</code>
-	 * method.
-	 *
-	 * @param      obj   The <code>Object</code> to be printed
-	 * @see        java.lang.Object#toString()
-	 */
-	public void print(Object obj) {
-		if (obj == null) obj = "";
-		write(String.valueOf(obj));
-	}
-
-	/**
-	 * Print a string.  If the argument is <code>null</code> then the string
-	 * <code>""</code> is printed.  Otherwise, the string's characters are
-	 * converted into bytes according to the platform's default character
-	 * encoding, and these bytes are written in exactly the manner of the
-	 * <code>{@link #write(int)}</code> method.
-	 *
-	 * @param      s   The <code>String</code> to be printed
-	 */
-	public void print(String s) {
-		if (s == null) s = "";
-		write(s);
-	} // print()
-
-	/**
-	 * Write a single character.
-	 * @param c int specifying a character to be written.
-	 */
-	public void write(int c) {
-		if (trouble) return;
-		super.write(c);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-	/**
-	 * Write a portion of an array of characters.
-	 * @param buf Array of characters
-	 * @param off Offset from which to start writing characters
-	 * @param len Number of characters to write
-	 */
-	public void write(char buf[], int off, int len) {
-		if (trouble || buf == null || len == 0) return;
-		super.write(buf, off, len);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-	/**
-	 * Write a portion of a string.
-	 * @param s A String
-	 * @param off Offset from which to start writing characters
-	 * @param len Number of characters to write
-	 */
-	public void write(String s, int off, int len) {
-		if (trouble || s == null || s.length() == 0) return;
-		super.write(s, off, len);
-		if (out0.size() >= max) {
-			flush();
-		}
-	} // write()
-
-} // GroovyWriter
diff --git a/groovy/modules/pages/src/main/groovy/util/Proxy.java b/groovy/modules/pages/src/main/groovy/util/Proxy.java
deleted file mode 100644
index 09eb87a..0000000
--- a/groovy/modules/pages/src/main/groovy/util/Proxy.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package groovy.util;
-
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.MetaClass;
-import groovy.lang.MissingPropertyException;
-import groovy.lang.MissingMethodException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * Created by IntelliJ IDEA.
- * User: Troy Heninger
- * Date: Jan 21, 2004
- * Proxy for another object.  All property accesses and method invokations get forwarded to actual object.
- * This class is abstract because it is meant to be subclassed, with new properties and methods provided.
- */
-public class Proxy extends GroovyObjectSupport {
-
-	private Object real;
-	private MetaClass meta;
-
-	/**
-	 * Constructor.  Takes real object to be excapsulated.
-	 * @param real
-	 */
-	public Proxy(Object real) {
-		this.real = real;
-		this.meta = InvokerHelper.getMetaClass(real);
-	} // Proxy()
-
-	/**
-	 * Get the property of this proxy, or the real object if property doesn't exist.
-	 * @param property
-	 * @return
-	 */
-	public Object getProperty(String property) {
-		try {
-			return getMetaClass().getProperty(this, property);
-		} catch (MissingPropertyException e) {
-			return meta.getProperty(real, property);
-		}
-	} // getProperty()
-
-	/**
-	 * Set the property of this proxy, or the real object if property doesn't exist.
-	 * @param property
-	 * @param newValue
-	 */
-	public void setProperty(String property, Object newValue) {
-		try {
-			getMetaClass().setProperty(this, property, newValue);
-		} catch (MissingPropertyException e) {
-			meta.setProperty(real, property, newValue);
-		} catch (MissingMethodException e) {
-			meta.setProperty(real, property, newValue);
-		}
-	} // setProperty()
-
-	/**
-	 * Returns the encapsulated object.
-	 * @return
-	 */
-	public Object getRealObject() { return real; }
-
-	/**
-	 * Call a method of this proxy, or the real object if method doesn't exist.
-	 * @param name
-	 * @param args
-	 * @return
-	 */
-	public Object invokeMethod(String name, Object args) {
-		try {
-			return getMetaClass().invokeMethod(this, name, args);
-		} catch (MissingMethodException e) {
-			return meta.invokeMethod(this, name, args);
-		}
-	} // invokeMethod()
-
-} // Proxy
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Loader.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Loader.java
deleted file mode 100644
index 474083c..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Loader.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.net.MalformedURLException;
-import java.net.URLConnection;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-
-import groovy.lang.GroovyClassLoader;
-
-import org.codehaus.groovy.syntax.SyntaxException;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Class loader that knows about loading from a servlet context and about class dependancies.
- */
-public class Loader extends GroovyClassLoader {
-
-	private String servletPath;
-	private ServletContext context;
-	private Map dependencies;
-
-	/**
-	 * Constructor.
-	 * @param parent
-	 * @param context
-	 * @param servletPath
-	 * @param dependencies
-	 */
-	public Loader(ClassLoader parent, ServletContext context, String servletPath, Map dependencies) {
-		super(parent);
-		this.context = context;
-		this.servletPath = servletPath;
-		this.dependencies = dependencies;
-	} // Loader()
-
-	/**
-	 * Load the class.
-	 * @todo Fix this to work with .gsp extensions
-	 * @param className
-	 * @return
-	 * @throws ClassNotFoundException
-	 */
-	protected Class findClass(String className) throws ClassNotFoundException {
-		String filename = className.replace('.', File.separatorChar) + ".groovy";
-		URL dependentScript;
-		try {
-			dependentScript = context.getResource("/WEB-INF/groovy/" + filename);
-			if (dependentScript == null) {
-				String current = servletPath.substring(0, servletPath.lastIndexOf("/") + 1);
-				dependentScript = context.getResource(current + filename);
-			}
-		} catch (MalformedURLException e) {
-			throw new ClassNotFoundException(className + ": " + e);
-		}
-		if (dependentScript == null) {
-			throw new ClassNotFoundException("Could not find " + className + " in webapp");
-		} else {
-			URLConnection dependentScriptConn;
-			try {
-				dependentScriptConn = dependentScript.openConnection();
-				dependencies.put(dependentScript, new Long(dependentScriptConn.getLastModified()));
-			} catch (IOException e1) {
-				throw new ClassNotFoundException("Could not read " + className + ": " + e1);
-			}
-			try {
-				return parseClass(dependentScriptConn.getInputStream(), filename);
-			} catch (SyntaxException e2) {
-				throw new ClassNotFoundException("Syntax error in " + className + ": " + e2);
-			} catch (IOException e2) {
-				throw new ClassNotFoundException("Problem reading " + className + ": " + e2);
-			}
-		}
-	}
-}
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Parse.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Parse.java
deleted file mode 100644
index f1b3d0d..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Parse.java
+++ /dev/null
@@ -1,265 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-import groovy.modules.pages.GroovyPage;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Parser for GroovyPages.
- */
-public class Parse implements Tokens {
-	public static final boolean DEBUG = false;
-
-	private static final Pattern paraBreak = Pattern.compile("/p>\\s*<p[^>]*>", Pattern.CASE_INSENSITIVE);
-	private static final Pattern rowBreak = Pattern.compile("((/td>\\s*</tr>\\s*<)?tr[^>]*>\\s*<)?td[^>]*>", Pattern.CASE_INSENSITIVE);
-
-	private Scan scan;
-	private StringBuffer buf;
-	private String className;
-	private boolean finalPass = false;
-
-	public Parse(String name, InputStream in) throws IOException {
-		scan = new Scan(readStream(in));
-		makeName(name);
-	} // Parse()
-
-	public InputStream parse() {
-		buf = new StringBuffer();
-		page();
-		finalPass = true;
-		scan.reset();
-		page();
-//		if (DEBUG) System.out.println(buf);
-		InputStream out = new ByteArrayInputStream(buf.toString().getBytes());
-		buf = null;
-		scan = null;
-		return out;
-	} // parse()
-
-	private void declare(boolean gsp) {
-		if (finalPass) return;
-		if (DEBUG) System.out.println("parse: declare");
-		buf.append("\n");
-		write(scan.getToken().trim(), gsp);
-		buf.append("\n\n");
-	} // declare()
-
-	private void direct() {
-		if (finalPass) return;
-		if (DEBUG) System.out.println("parse: direct");
-		String text = scan.getToken();
-		text = text.trim();
-//		System.out.println("direct(" + text + ')');
-		if (text.startsWith("page ")) directPage(text);
-	} // direct()
-
-	private void directPage(String text) {
-		text = text.substring(5).trim();
-//		System.out.println("directPage(" + text + ')');
-		Pattern pat = Pattern.compile("(\\w+)\\s*=\\s*\"([^\"]*)\"");
-		Matcher mat = pat.matcher(text);
-		for (int ix = 0;;) {
-			if (!mat.find(ix)) return;
-			String name = mat.group(1);
-			String value = mat.group(2);
-			if (name.equals("import")) pageImport(value);
-			ix = mat.end();
-		}
-	} // directPage()
-
-	private void expr() {
-		if (!finalPass) return;
-		if (DEBUG) System.out.println("parse: expr");
-		buf.append("out.print(");
-		String text = scan.getToken().trim();
-		buf.append(GroovyPage.fromHtml(text));
-		buf.append(")\n");
-	} // expr()
-
-	private void html() {
-		if (!finalPass) return;
-		if (DEBUG) System.out.println("parse: html");
-		StringBuffer text = new StringBuffer(scan.getToken());
-		while (text.length() > 80) {
-			int end = 80;
-				// don't end a line with a '\'
-			while (text.charAt(end - 1) == '\\') end--;
-			print(text.subSequence(0, end));
-			text.delete(0, end);
-		}
-		if (text.length() > 0) {
-			print(text);
-		}
-	} // html()
-
-	private void makeName(String name) {
-		int slash = name.lastIndexOf('/');
-		if (slash >= 0) name = name.substring(slash + 1);
-		StringBuffer buf = new StringBuffer(name.length());
-		for (int ix = 0, ixz = name.length(); ix < ixz; ix++) {
-			char c = name.charAt(ix);
-			if (c < '0' || (c > '9' && c < '@') || (c > 'Z' && c < '_') || (c > '_' && c < 'a') || c > 'z') c = '_';
-			else if (ix == 0 && c >= '0' && c <= '9') c = '_';
-			buf.append(c);
-		}
-		className = buf.toString();
-	} // makeName()
-
-	private static boolean match(CharSequence pat, CharSequence text, int start) {
-		int ix = start, ixz = text.length(), ixy = start + pat.length();
-		if (ixz > ixy) ixz = ixy;
-		if (pat.length() > ixz - start) return false;
-		for (; ix < ixz; ix++) {
-			if (Character.toLowerCase(text.charAt(ix)) != Character.toLowerCase(pat.charAt(ix - start))) {
-				return false;
-			}
-		}
-		return true;
-	} // match()
-
-	private static int match(Pattern pat, CharSequence text, int start) {
-		Matcher mat = pat.matcher(text);
-		if (mat.find(start) && mat.start() == start) {
-			return mat.end();
-		}
-		return 0;
-	} // match()
-
-	private void page() {
-		if (DEBUG) System.out.println("parse: page");
-		if (finalPass) {
-			buf.append("\nclass ");
-			buf.append(className);
-//			buf.append(" extends GroovyPage {\n");
-			buf.append(" extends Script {\n");  //implements GroovyPage {\n");
-			buf.append("run() {\n");
-		} else {
-			buf.append("import groovy.modules.pages.GroovyPage\n");
-		}
-		loop: for (;;) {
-			int state = scan.nextToken();
-			switch (state) {
-				case EOF: break loop;
-				case HTML: html(); break;
-				case JEXPR: expr(); break;
-				case JSCRIPT: script(false); break;
-				case JDIRECT: direct(); break;
-				case JDECLAR: declare(false); break;
-				case GEXPR: expr(); break;
-				case GSCRIPT: script(true); break;
-				case GDIRECT: direct(); break;
-				case GDECLAR: declare(true); break;
-			}
-		}
-		if (finalPass) {
-			buf.append("}\n}\n");
-//			buf.append("} // run()\n");
-		}
-	} // page()
-
-	private void pageImport(String value) {
-//		System.out.println("pageImport(" + value + ')');
-		String[] imports = Pattern.compile(";").split(value.subSequence(0, value.length()));
-		for (int ix = 0; ix < imports.length; ix++) {
-			buf.append("import ");
-			buf.append(imports[ix]);
-			buf.append('\n');
-		}
-	} // pageImport()
-
-	private void print(CharSequence text) {
-		buf.append("out.print('");
-		for (int ix = 0, ixz = text.length(); ix < ixz; ix++) {
-			char c = text.charAt(ix);
-			String rep = null;
-			if (c == '\n') rep = "\\n";
-			else if (c == '\r') rep = "\\r";
-			else if (c == '\t') rep = "\\t";
-			else if (c == '\'') rep = "\\'";
-			else if (c == '\\') rep = "\\\\";
-			if (rep != null) buf.append(rep);
-			else buf.append(c);
-		}
-		buf.append("')\n");
-	} // print()
-
-	private String readStream(InputStream in) throws IOException {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try {
-			byte[] buf = new byte[8192];
-			for (;;) {
-				int read = in.read(buf);
-				if (read <= 0) break;
-				out.write(buf, 0, read);
-			}
-			return out.toString();
-		} finally {
-			out.close();
-			in.close();
-		}
-	} // readStream()
-
-	private void script(boolean gsp) {
-		if (!finalPass) return;
-		if (DEBUG) System.out.println("parse: script");
-		buf.append("\n");
-		write(scan.getToken().trim(), gsp);
-		buf.append("\n\n");
-	} // script()
-
-	private void write(CharSequence text, boolean gsp) {
-		if (!gsp) {
-			buf.append(text);
-			return;
-		}
-		for (int ix = 0, ixz = text.length(); ix < ixz; ix++) {
-			char c = text.charAt(ix);
-			String rep = null;
-			if (Character.isWhitespace(c)) {
-				for (ix++; ix < ixz; ix++) {
-					if (Character.isWhitespace(text.charAt(ix))) continue;
-					ix--;
-					rep = " ";
-					break;
-				}
-			} else if (c == '&') {
-				if (match("&semi;", text, ix)) {
-					rep = ";";
-					ix += 5;
-				} else if (match("&amp;", text, ix)) {
-					rep = "&";
-					ix += 4;
-				} else if (match("&lt;", text, ix)) {
-					rep = "<";
-					ix += 3;
-				} else if (match("&gt;", text, ix)) {
-					rep = ">";
-					ix += 3;
-				}
-			} else if (c == '<') {
-				if (match("<br>", text, ix) || match("<hr>", text, ix)) {
-					rep = "\n";
-					ix += 3;
-				} else {
-					int end = match(paraBreak, text, ix);
-					if (end <= 0) end = match(rowBreak, text, ix);
-					if (end > 0) {
-						rep = "\n";
-						ix = end;
-					}
-				}
-			}
-			if (rep != null) buf.append(rep);
-			else buf.append(c);
-		}
-	} // write()
-
-} // Parse
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Reverse.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Reverse.java
deleted file mode 100644
index 7d66d04..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Reverse.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 16, 2004
- * Utility class to reverse a char sequence.
- */
-class Reverse implements CharSequence {
-	private CharSequence text;
-	private int start, end, anchor;
-
-	Reverse(CharSequence text) {
-		this(text, 0, text.length());
-	}
-
-	Reverse(CharSequence text, int start, int end) {
-		this.text = text;
-		this.start = start;
-		this.end = end;
-		anchor = end - 1;
-	}
-	public char charAt(int index) {
-		return text.charAt(anchor - index);
-	}
-
-	public int length() {
-		return end - start;
-	}
-
-	public CharSequence subSequence(int start, int end) {
-		return new Reverse(text, anchor - end, anchor - start);
-	}
-
-	public String toString() {
-		int len = length();
-		StringBuffer buf = new StringBuffer(len);
-		for (int ix = anchor; ix >= start; ix--) {
-			buf.append(text.charAt(ix));
-		}
-		return buf.toString();
-	}
-} // Reverse
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Scan.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Scan.java
deleted file mode 100644
index 7029f98..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Scan.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Lexer for GroovyPages.
- */
-class Scan implements Tokens {
-	private String text;
-	private int end1, begin1, end2, begin2, state = HTML, len, level;
-	private boolean str1, str2;
-
-	Scan(String text) {
-		Strip strip = new Strip(text);
-		strip.strip(0);
-		this.text = strip.toString();
-		len = this.text.length();
-	} // Scan()
-
-	private int found(int newState, int skip) {
-		begin2 = begin1;
-		end2 = --end1;
-		begin1 = end1 += skip;
-		int lastState = state;
-		state = newState;
-		return lastState;
-	} // found()
-
-	String getToken() {
-		return text.substring(begin2, end2);
-	} // getToken()
-
-	int nextToken() {
-		for (;;) {
-			int left = len - end1;
-			if (left == 0) {
-				end1++; // in order to include the last letter
-				return found(EOF, 0);
-			}
-			char c = text.charAt(end1++);
-			char c1 = left > 1 ? text.charAt(end1) : 0;
-			char c2 = left > 2 ? text.charAt(end1 + 1) : 0;
-
-			if (str1) {
-				if (c == '\\') end1++;
-				else if (c == '\'') str1 = false;
-				continue;
-			} else if (str2) {
-				if (c == '\\') end1++;
-				else if (c == '"') str2 = false;
-				continue;
-			} else if (level > 0 && (c == ')' || c == '}' || c == ']')) {
-				level--;
-				continue;
-			}
-
-			switch (state) {
-				case HTML:
-					if (c == '<' && left > 3) {
-						if (c1 == '%') {
-							if (c2 == '=') {
-								return found(JEXPR, 3);
-							} else if (c2 == '@') {
-								return found(JDIRECT, 3);
-							} else if (c2 == '!') {
-								return found(JDECLAR, 3);
-							} else if (c2 == '-' && left > 3 && text.charAt(end1 + 2) == '-') {
-								if (skipJComment()) continue;
-							}
-							return found(JSCRIPT, 2);
-						}
-					} else if (c == '$' && c1 == '{') {
-						return found(GEXPR, 2);
-					} else if (c == '%' && c1 == '{') {
-						if (c2 == '-' && left > 3 && text.charAt(end1 + 2) == '-') {
-							if (skipGComment()) continue;
-						}
-						return found(GSCRIPT, 2);
-					} else if (c == '!' && c1 == '{') {
-						return found(GDECLAR, 2);
-					} else if (c == '@' && c1 == '{') {
-						return found(GDIRECT, 2);
-					}
-					break;
-				case JEXPR:
-				case JSCRIPT:
-				case JDIRECT:
-				case JDECLAR:
-					if (c == '%' && c1 == '>') {
-						return found(HTML, 2);
-					}
-					break;
-				case GEXPR:
-				case GDIRECT:
-					if (c == '}' && !str1 && !str2 && level == 0) {
-						return found(HTML, 1);
-					}
-					break;
-				case GSCRIPT:
-					if (c == '}' && c1 == '%' && !str1 && !str2 && level == 0) {
-						return found(HTML, 2);
-					}
-					break;
-				case GDECLAR:
-					if (c == '}' && (c1 == '!' || c1 == '%') && !str1 && !str2 && level == 0) {
-						return found(HTML, 2);
-					}
-					break;
-			}
-		}
-	} // nextToken()
-
-	private boolean skipComment(char c3, char c4) {
-		int ix = end1 + 3;
-		for (int ixz = len - 4; ; ix++) {
-			if (ix >= ixz) return false;
-			if (text.charAt(ix) == '-' && text.charAt(ix + 1) == '-' && text.charAt(ix + 2) == c3
-			        && text.charAt(ix + 3) == c4) break;
-		}
-		text = text.substring(0, --end1) + text.substring(ix + 4);
-		len = text.length();
-		return true;
-	} // skipComment()
-
-	private boolean skipGComment() {
-		return skipComment('}', '%');
-	} // skipGComment()
-
-	private boolean skipJComment() {
-		return skipComment('%', '>');
-	} // skipJComment()
-
-	void reset() {
-		end1= begin1 = end2 = begin2 = level = 0;
-		state = HTML;
-	} // reset()
-
-} // Scan
-
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Strip.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Strip.java
deleted file mode 100644
index 2fff35b..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Strip.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Utility class to strip HTML from around tags that specify it.
- */
-class Strip {
-	private static Pattern stripTag = Pattern.compile("\\^([a-zA-Z]+)%\\{([^}]|\\}[^%])*\\}%");
-	private static Pattern anyTag = Pattern.compile("((\\^[a-zA-Z])?%\\{([^}]|\\}[^%])*\\}%|[$@]\\{[^}]*\\})");
-
-	private StringBuffer text;
-
-	Strip(CharSequence text) {
-		this.text = new StringBuffer(text.toString());
-	} // Scan()
-
-	void strip(int index) {
-		Matcher match = stripTag.matcher(text);
-		if (match.find(index)) {
-			strip(match.end());
-			String tag = match.group(1);
-			int start = match.start() + 1 + tag.length(); // begin after '^tag'; at the '%{'
-			int end = match.end();
-			Pattern patAfter = Pattern.compile("</" + tag + "(>|[^>a-zA-Z][^>]*>)\\s*", Pattern.CASE_INSENSITIVE);
-			Matcher matchAfter = patAfter.matcher(text);
-			if (matchAfter.find(end)) {
-				int end2 = matchAfter.end();
-				Matcher matchAny = anyTag.matcher(text.subSequence(0, end2));
-				if (matchAny.find(end)) end2 = matchAny.start();
-				Pattern nextTagPat = Pattern.compile("<" + tag + "(\\s|>)", Pattern.CASE_INSENSITIVE);
-				Matcher matchNext = nextTagPat.matcher(text.subSequence(0, end2));
-				if (matchNext.find(end)) end2 = matchNext.start();
-					// System.out.println("Stripping " + text.subSequence(end, end2));
-				text.delete(end, end2);
-			}
-			Pattern patBefore = Pattern.compile(new Reverse("*s\\<" + tag).toString(),
-					Pattern.CASE_INSENSITIVE);
-			Matcher matchBefore = patBefore.matcher(new Reverse(text, 0, start));
-			if (matchBefore.find()) {
-				int start2 = start - matchBefore.end();
-				Matcher matchAny = anyTag.matcher(text.subSequence(0, start));
-				if (matchAny.find(start2)) start2 = matchAny.end();
-					// System.out.println("Stripping " + text.subSequence(start2, start));
-				text.delete(start2, start);
-			}
-		}
-	} // strip()
-
-	public String toString() {
-		return text.toString();
-	}
-
-} // Strip
diff --git a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Tokens.java b/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Tokens.java
deleted file mode 100644
index d4bfc59..0000000
--- a/groovy/modules/pages/src/main/org/codehaus/groovy/modules/pages/Tokens.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.codehaus.groovy.modules.pages;
-
-/**
- * Created by IntelliJ IDEA.
- * Author: Troy Heninger
- * Date: Jan 10, 2004
- * Token constants for lexer and parser.
- */
-interface Tokens {
-	static final int EOF = -1;
-	static final int HTML = 0;
-	static final int JEXPR = 1;   // <%= ... %>
-	static final int JSCRIPT = 2; // <% .... %>
-	static final int JDIRECT = 3; // <%@ ... %>
-	static final int JDECLAR = 4; // <%! ... %>
-	static final int GEXPR = 11;   // ${ ... }
-	static final int GSCRIPT = 12; // %{ ... }%
-	static final int GDIRECT = 13; // @{ ... }
-	static final int GDECLAR = 14; // !{ ... }!
-}
diff --git a/groovy/modules/pages/src/web/WEB-INF/web.xml b/groovy/modules/pages/src/web/WEB-INF/web.xml
deleted file mode 100644
index 29845c2..0000000
--- a/groovy/modules/pages/src/web/WEB-INF/web.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<web-app>
-	<display-name>GroovyPages Test</display-name>
-	<description>GroovyPages Test</description>
-	<servlet>
-        <servlet-name>GroovyPages</servlet-name>
-        <servlet-class>groovy.modules.pages.GroovyPages</servlet-class>
-		<init-param>
-			<param-name>allowSpilling</param-name>
-			<param-value>1</param-value>
-			<description>
-             Allows developers to view the intermediade source code, when they pass
-				a spillGroovy argument in the URL.
-          </description>
-		</init-param>
-    </servlet>
-	<servlet>
-        <servlet-name>GroovyServlet</servlet-name>
-        <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
-    </servlet>
-	<servlet-mapping>
-        <servlet-name>GroovyPages</servlet-name>
-        <url-pattern>*.gsp</url-pattern>
-    </servlet-mapping>
-	<servlet-mapping>
-        <servlet-name>GroovyServlet</servlet-name>
-        <url-pattern>*.groovy</url-pattern>
-    </servlet-mapping>
-	<welcome-file-list>
-		<welcome-file>default.htm</welcome-file>
-		<welcome-file>index.html</welcome-file>
-		<welcome-file>index.htm</welcome-file>
-	</welcome-file-list>
-</web-app>
diff --git a/groovy/modules/pages/src/web/default.htm b/groovy/modules/pages/src/web/default.htm
deleted file mode 100644
index 12c3474..0000000
--- a/groovy/modules/pages/src/web/default.htm
+++ /dev/null
@@ -1,45 +0,0 @@
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="en-us">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
-<title>GroovyPages Examples</title>
-</head>
-
-<body>
-
-<h2 align="center">GroovyPages Examples Home</h2>
-
-<p>Here are some pages that demonstrate GroovyPages in action.&nbsp; These 
-examples are running live and include the source code as well.&nbsp; Note: if 
-you wish to view the intermediate groovy code, pass a spillGroovy parameter in 
-the URL then view the source to the page.&nbsp; <a href="simple.gsp?spillGroovy">Click here for an example.</a></p>
-<div align="center">
-  <center>
-  <table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" id="AutoNumber1">
-    <tr>
-      <td align="right">
-      <a href="http://www.investortech.com/emp/troy/groovypages.htm">GroovyPages</a></td>
-      <td>Back to the GroovyPages development site</td>
-    </tr>
-    <tr>
-      <td align="right"><a href="simple.gsp">Simple Example</a></td>
-      <td>A very basic example</td>
-    </tr>
-    <tr>
-      <td align="right"><a href="jsp.gsp">JSP Syntax</a></td>
-      <td>Shows how GroovyPages supports the JSP syntax</td>
-    </tr>
-    <tr>
-      <td align="right"><a href="visible.gsp">Visible Syntax</a></td>
-      <td>Shows how GroovyPages supports an alternate syntax</td>
-    </tr>
-  </table>
-  </center>
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/groovy/modules/pages/src/web/jsp.gsp b/groovy/modules/pages/src/web/jsp.gsp
deleted file mode 100644
index ef7e585..0000000
--- a/groovy/modules/pages/src/web/jsp.gsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<html>

-<head>

-<title>GroovyPages Test</title>

-</head>

-<body>

-<h2 align="center">JSP Syntax</h2>

-<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4">

-  <tr>

-    <td>

-	<i>Links:</i></td>

-    <td>

-	<i>

-	<a href="default.htm">Examples Home</a></i></td>

-    <td>

-	<i> <a href="simple.gsp">Simple Example</a></i></td>

-    <td>

-	<i>

-    <a href="visible.gsp?arg=This+is+a+test+argument&lastCount=${session.count}">

-    Visible Syntax</a></i></td>

-    <td>

-	<i>

-    <a href="jsp.gsp?arg=This+is+a+test+argument&lastCount=<%=session.count%>">

-    JSP Syntax</a></i></td>

-  </tr>

-</table>

-<p>&nbsp;&nbsp;&nbsp; This is an example of GroovyPages showing the use of the 

-JSP syntax.&nbsp; This syntax is exactly like JSP except that the code portions 

-are Groovy, rather than Java.&nbsp; GroovyPages also support an alternate 

-editor-visible syntax which is sometimes preferable when the programmer is also the 

-page designer or when they want to see and edit their in the web editor's 

-formatted, normal view, rather than in raw, noisy HTML all of the time.</p>

-<% // Make sure count is set

-if (session.count == null) session.count = 1 

-%>

-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

-  <tr>

-    <td valign="top" width="50%">

-    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">

-      <tr>

-        <td colspan="2" align="center"><b>Page Arguments</b></td>

-      </tr>

-      <tr>

-        <td>Argument</td>

-        <td>Value</td>

-      </tr>

-		<% // For each parameter

-		for (it in request) { %>

-      <tr>

-        <td><%= it.key %>&nbsp;</td>

-        <td><%= it.value %>&nbsp;</td>

-      </tr>

-		<% } %>

-    </table>

-    </td>

-    <td valign="top" width="50%">

-    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3">

-      <tr>

-        <td colspan="2" align="center"><b>Session Variables</b></td>

-      </tr>

-      <tr>

-        <td>Variable</td>

-        <td>Value</td>

-      </tr>

-		<% // For each session variable

-		session.each() { %>

-      <tr>

-        <td><%= it.key %>&nbsp;</td>

-        <td><%= it.value %>&nbsp;</td>

-      </tr>

-		<% } %>

-    </table>

-    </td>

-  </tr>

-</table>

-<% // Increment the count on each refresh

-session.count++ 

-%>

-<h3>The Source Code</h3>

-<pre><span style="background-color: #99FF99">&lt;% // Make sure count is set<br>if (session.count == null) session.count = 1<br>%&gt;</span><br>&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: 

-collapse&quot; bordercolor=&quot;#111111&quot; width=&quot;100%&quot; id=&quot;AutoNumber1&quot;&gt;<br>  &lt;tr&gt;<br>    &lt;td valign=&quot;top&quot; width=&quot;50%&quot;&gt;<br>      &lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse&quot;

-        bordercolor=&quot;#111111&quot; width=&quot;100%&quot; id=&quot;AutoNumber2&quot;&gt;<br>        &lt;tr&gt;<br>          &lt;td colspan=&quot;2&quot; align=&quot;center&quot;&gt;&lt;b&gt;Page Arguments&lt;/b&gt;&lt;/td&gt;<br>        &lt;/tr&gt;<br>        &lt;tr&gt;<br>          &lt;td&gt;Argument&lt;/td&gt;<br>          &lt;td&gt;Value&lt;/td&gt;<br>        &lt;/tr&gt;<br>        <span style="background-color: #99FF99">&lt;% // For each parameter<br>        for (it in request) { %&gt;</span><br>        &lt;tr&gt;<br>          &lt;td&gt;<span style="background-color: #99FF99">&lt;%= it.key %&gt;</span>&amp;nbsp;&lt;/td&gt;<br>          &lt;td&gt;<span style="background-color: #99FF99">&lt;%= it.value %&gt;</span>&amp;nbsp;&lt;/td&gt;<br>        &lt;/tr&gt;<br>        <span style="background-color: #99FF99">&lt;% } %&gt;</span><br>      &lt;/table&gt;<br>    &lt;/td&gt;<br>    &lt;td valign=&quot;top&quot; width=&quot;50%&quot;&gt;<br>      &lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse: collapse&quot;

-        bordercolor=&quot;#111111&quot; width=&quot;100%&quot; id=&quot;AutoNumber3&quot;&gt;<br>        &lt;tr&gt;<br>          &lt;td colspan=&quot;2&quot; align="center"&gt;&lt;b&gt;Session Variables&lt;/b&gt;&lt;/td&gt;<br>        &lt;/tr&gt;<br>        &lt;tr&gt;<br>          &lt;td&gt;Variable&lt;/td&gt;<br>          &lt;td&gt;Value&lt;/td&gt;<br>        &lt;/tr&gt;<br>        <span style="background-color: #99FF99">&lt;% // For each session variable<br>        session.each() { %&gt;</span><br>        &lt;tr&gt;<br>          &lt;td&gt;<span style="background-color: #99FF99">&lt;%= it.key %&gt;</span>&amp;nbsp;&lt;/td&gt;<br>          &lt;td&gt;<span style="background-color: #99FF99">&lt;%= it.value %&gt;</span>&amp;nbsp;&lt;/td&gt;<br>        &lt;/tr&gt;<br>        <span style="background-color: #99FF99">&lt;% } %&gt;</span><br>      &lt;/table&gt;<br>    &lt;/td&gt;<br>  &lt;/tr&gt;<br>&lt;/table&gt;

-<span style="background-color: #99FF99">&lt;% // Increment the count on each refresh<br>session.count++<br>%&gt;</span></pre>

-</body>

-</html>
\ No newline at end of file
diff --git a/groovy/modules/pages/src/web/simple.groovy b/groovy/modules/pages/src/web/simple.groovy
deleted file mode 100644
index 76a967c..0000000
--- a/groovy/modules/pages/src/web/simple.groovy
+++ /dev/null
@@ -1,57 +0,0 @@
-import java.util.Date
-if (session.count == null) {
-	session.count = 1
-}
-out.println(<<<EOS
-<html>
-<head>
-<title>Groovlet Example</title>
-</head>
-<body>
-<h2 align="center">Groovelet Example</h2>
-<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4">
-  <tr>
-    <td>
-	<i>Links:</i></td>
-    <td>
-	<i>
-	<a href="default.htm">Examples Home</a></i></td>
-    <td>
-	<i> <a href="simple.gsp">Simple Example</a></i></td>
-    <td>
-	<i>
-    <a href="visible.gsp?arg=This+is+a+test+argument&lastCount=${session.count}">
-    Visible Syntax</a></i></td>
-    <td>
-	<i>
-    <a href="jsp.gsp?arg=This+is+a+test+argument&lastCount=${session.count}">
-    JSP Syntax</a></i></td>
-  </tr>
-</table>
-<p>&nbsp;&nbsp;&nbsp; This is a simple example of a Groovlet using GroovyServlet.&nbsp; This page
-does the same thing as the GroovyPages <a href="simple.gsp">Simple Example</a>.&nbsp;
-From the source code below, you can see that it doesn't take much to write a simple servlet with
-Groovy.  But for more complex servlets, GroovyPages can be a great benefit because it is embedded
-in your HTML, like JSP.</p>
-<p>Hello, ${request.remoteHost}: ${session.count}! ${new Date()}</p>
-<h3>The Source Code</h3>
-<pre><span style="background-color: #99FF99">import java.util.Date
-if (session.count == null) {
-	session.count = 1
-}
-out.println(<<<&#69;OS</span>
-&lt;html>
-&lt;head>
-&lt;title>Groovlet Example&lt;/title>
-&lt;/head>
-&lt;body>
-&lt;p>Hello, <span style="background-color: #99FF99">$&#123;request.remoteHost}</span>: <span style="background-color: #99FF99">$&#123;session.count}</span>! <span style="background-color: #99FF99">$&#123;new Date()}</span>&lt;/p>
-&lt;/body>
-&lt;/html>
-<span style="background-color: #99FF99">&#69;OS)
-session.count = session.count + 1</span>
-</pre>
-</body>
-</html>
-EOS)
-session.count = session.count + 1
diff --git a/groovy/modules/pages/src/web/simple.gsp b/groovy/modules/pages/src/web/simple.gsp
deleted file mode 100644
index 887af1e..0000000
--- a/groovy/modules/pages/src/web/simple.gsp
+++ /dev/null
@@ -1,50 +0,0 @@
-<html>

-<head>

-<title>Simple GroovyPages Example</title>

-</head>

-<body>

-<h2 align="center">Simple Example</h2>

-<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4">

-  <tr>

-    <td>

-	<i>Links:</i></td>

-    <td>

-	<i>

-	<a href="default.htm">Examples Home</a></i></td>

-    <td>

-	<i> <a href="simple.gsp">Simple Example</a></i></td>

-    <td>

-	<i>

-    <a href="visible.gsp?arg=This+is+a+test+argument&lastCount=${session.count}">

-    Visible Syntax</a></i></td>

-    <td>

-	<i>

-    <a href="jsp.gsp?arg=This+is+a+test+argument&lastCount=<%=session.count%>">

-    JSP Syntax</a></i></td>

-  </tr>

-</table>

-<p>&nbsp;&nbsp;&nbsp; This is a simple example of GroovyPages.&nbsp; This page 

-does the same thing as the <a href="simple.groovy">Groovlet Example</a>.&nbsp; 

-From the source code below, you can see that GroovyPages are very similar to JSP, 

-except much easier to use because Groovy is underneath.</p>

-<%@ page import="java.util.Date" %>

-

-<% if (session.count == null) session.count = 1 %>

-<p>Hello, ${request.remoteHost}: ${session.count}! ${new Date()}</p>

-<% session.count++ %>

-<h3>The Source Code</h3>

-<pre>&lt;html>

-&lt;head>

-&lt;title>Simple Example&lt;/title>

-&lt;/head>

-&lt;body>

-<span style="background-color: #99FF99">&lt;%@ page import="java.util.Date" %&gt;</span>

-

-<span style="background-color: #99FF99">&lt;% if session.count == null

-session.count = 1 %&gt;</span>

-&lt;p&gt;Hello, <span style="background-color: #99FF99">$&#123;request.remoteHost}</span>: <span style="background-color: #99FF99">$&#123;session.count}</span>! <span style="background-color: #99FF99">$&#123;new Date()}</span>&lt;/p&gt;

-<span style="background-color: #99FF99">&lt;% session.count++ %&gt;</span>

-&lt;/body>

-&lt;/html></pre>

-</body>

-</html>
\ No newline at end of file
diff --git a/groovy/modules/pages/src/web/sql.gsp b/groovy/modules/pages/src/web/sql.gsp
deleted file mode 100644
index a96b78b..0000000
--- a/groovy/modules/pages/src/web/sql.gsp
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>

- <head>

- <title>Test Database Access</title>

- </head>

- <body>

- <p>^p@{page import=&quot;groovy.sql.Sql, test.groovy.sql.TestHelper&quot;}</p>

- <p>^p%{sql = TestHelper.makeSql()<br>

- type = 'cheese'<br>

- sql.queryEach(&quot;select * from FOOD where type = ${type}&quot;) 

- { }%</p>

- <p>Found cheese ${it.name}</p>

- <p>^p%{ } }%</p>

- </body>

-</html>
\ No newline at end of file
diff --git a/groovy/modules/pages/src/web/test1.groovy b/groovy/modules/pages/src/web/test1.groovy
deleted file mode 100644
index 936ce05..0000000
--- a/groovy/modules/pages/src/web/test1.groovy
+++ /dev/null
@@ -1,11 +0,0 @@
-html = <<<EOS
-<html>
-<head>
-<title>Groovlet Example</title>
-</head>
-<body>
-<p>Hello</p>
-</body>
-</html>
-EOS
-out.println(html)
diff --git a/groovy/modules/pages/src/web/test2.groovy b/groovy/modules/pages/src/web/test2.groovy
deleted file mode 100644
index c81acb7..0000000
--- a/groovy/modules/pages/src/web/test2.groovy
+++ /dev/null
@@ -1,10 +0,0 @@
-out.println(<<<EOS
-<html>
-<head>
-<title>Groovlet Example</title>
-</head>
-<body>
-<p>Hello</p>
-</body>
-</html>
-EOS)
diff --git a/groovy/modules/pages/src/web/visible.gsp b/groovy/modules/pages/src/web/visible.gsp
deleted file mode 100644
index eed96c3..0000000
--- a/groovy/modules/pages/src/web/visible.gsp
+++ /dev/null
@@ -1,155 +0,0 @@
-<html>

-<head>

-<title>GroovyPages Test</title>

-</head>

-<body>

-<h2 align="center">Visible Syntax</h2>

-<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4">

-  <tr>

-    <td>

-	<i>Links:</i></td>

-    <td>

-	<i>

-	<a href="default.htm">Examples Home</a></i></td>

-    <td>

-	<i> <a href="simple.gsp">Simple Example</a></i></td>

-    <td>

-	<i>

-    <a href="visible.gsp?arg=This+is+a+test+argument&lastCount=${session.count}">

-    Visible Syntax</a></i></td>

-    <td>

-	<i>

-    <a href="jsp.gsp?arg=This+is+a+test+argument&lastCount=<%=session.count%>">

-    JSP Syntax</a></i></td>

-  </tr>

-</table>

-<p>&nbsp;&nbsp;&nbsp; This is an example of GroovyPages showing the use of the editor 

-visible syntax.&nbsp; This syntax uses curly braces like %&#123; groovlet }% and $&#123; 

-expression }, instead of the less-than greater-than of JSP, like &lt;% groovlet %&gt; 

-and &lt;%= expression %&gt;.&nbsp; Though both syntaxes are supported in GroovyPages, 

-using visible syntax is sometimes preferable when the programmer is also the 

-page designer or when they want to see and edit their in the web editor's 

-formatted, normal view, rather than in raw, noisy HTML all of the time.&nbsp; 

-It's perfectly acceptable to mix both syntaxes on the same page.</p>

-<p><i><b>Make sure count is set and increment it on each refresh</b></i><br>

-^p%{<br>

-if (session.count == null) session.count = 1<br>

-}%</p>

-<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">

-  <tr>

-    <td valign="top" width="50%">

-    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">

-      <tr>

-        <td colspan="2" align="center"><b>Page Arguments</b></td>

-      </tr>

-      <tr>

-        <td>Argument</td>

-        <td>Value</td>

-      </tr>

-      <tr>

-        <td colspan="2"><i><b>For each parameter</b></i><br>

-^tr%{ for (it in request) { }%</td>

-      </tr>

-      <tr>

-        <td>${ it.key }</td>

-        <td>${ it.value }</td>

-      </tr>

-      <tr>

-        <td colspan="2">^tr%{ } }% <i><b>Comments are safe before and after 

-        stripping tags</b></i></td>

-      </tr>

-    </table>

-    </td>

-    <td valign="top" width="50%">

-    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3">

-      <tr>

-        <td colspan="2" align="center"><b>Session Variables</b></td>

-      </tr>

-      <tr>

-        <td>Variable</td>

-        <td>Value</td>

-      </tr>

-      <tr>

-        <td colspan="2"><i><b>For each session variable</b></i><br>

-^tr%{ session.each() { }%</td>

-      </tr>

-      <tr>

-        <td>${ it.key }</td>

-        <td>${ it.value }</td>

-      </tr>

-      <tr>

-        <td colspan="2">^tr%{ } }% <i><b>because they will get 

-        stripped off</b></i></td>

-      </tr>

-    </table>

-    </td>

-  </tr>

-</table>

-<p><i><b>Increment the count on each refresh</b></i><br>

-^p%{

-session.count++

-}%</p>

-<h3>The Source Code</h3>

-<p>&nbsp;&nbsp; You will note that the source code below appears more noisy when 

-compared with JSP syntax.&nbsp; It is when you look at the raw HTML.&nbsp; But 

-web editors help you to stay out of HTML mode, and when you edit your page that 

-way most of the noise goes away.</p>

-<pre>&lt;p&gt;&lt;i&gt;&lt;b&gt;Make sure count is set&lt;/b&gt;&lt;/i&gt;&lt;br&gt;

-<span style="background-color: #99FF99">^p%&#123;&lt;br&gt;

-if (session.count == null) session.count = 1&lt;br&gt;

-}%</span>&lt;/p&gt;

-&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1"&gt;

-  &lt;tr&gt;

-    &lt;td valign="top" width="50%"&gt;

-    &lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2"&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2" align="center"&gt;&lt;b&gt;Page Arguments&lt;/b&gt;&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td&gt;Argument&lt;/td&gt;

-        &lt;td&gt;Value&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2"&gt;<span style="background-color: #99FF99">&lt;i&gt;&lt;b&gt;For each parameter&lt;/b&gt;&lt;/i&gt;&lt;br&gt;

-          ^tr%&#123; for (it in request) &#123; }%</span>&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td&gt;<span style="background-color: #99FF99">$&#123; it.key }</span>&lt;/td&gt;

-        &lt;td&gt;<span style="background-color: #99FF99">$&#123; it.value }</span>&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2"&gt;<span style="background-color: #99FF99">^tr%&#123; } }% &lt;i&gt;&lt;b&gt;Comments are safe before and after 

-        stripping tags&lt;/b&gt;&lt;/i&gt;</span>&lt;/td&gt;

-      &lt;/tr&gt;

-    &lt;/table&gt;

-    &lt;/td&gt;

-    &lt;td valign="top" width="50%"&gt;

-    &lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3"&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2" align="center"&gt;&lt;b&gt;Session Variables&lt;/b&gt;&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td&gt;Variable&lt;/td&gt;

-        &lt;td&gt;Value&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2"&gt;<span style="background-color: #99FF99">&lt;i&gt;&lt;b&gt;For each session variable&lt;/b&gt;&lt;/i&gt;&lt;br&gt;

-          ^tr%&#123; session.each() &#123; }%</span>&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td&gt;<span style="background-color: #99FF99">$&#123; it.key }</span>&lt;/td&gt;

-        &lt;td&gt;<span style="background-color: #99FF99">$&#123; it.value }</span>&lt;/td&gt;

-      &lt;/tr&gt;

-      &lt;tr&gt;

-        &lt;td colspan="2"&gt;<span style="background-color: #99FF99">^tr%&#123; } }% &lt;i&gt;&lt;b&gt;because they will get 

-        stripped off&lt;/b&gt;&lt;/i&gt;</span>&lt;/td&gt;

-      &lt;/tr&gt;

-    &lt;/table&gt;

-    &lt;/td&gt;

-  &lt;/tr&gt;

-&lt;/table&gt;

-&lt;p&gt;&lt;i&gt;&lt;b&gt;Increment the count on each refresh&lt;/b&gt;&lt;/i&gt;&lt;br&gt;

-<span style="background-color: #99FF99">^p%&#123; session.count++ }%</span>&lt;/p&gt;

-</pre>

-</body>

-</html>
\ No newline at end of file
diff --git a/groovy/modules/process/.classpath b/groovy/modules/process/.classpath
deleted file mode 100644
index 543e599..0000000
--- a/groovy/modules/process/.classpath
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="src"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="lib" path="lib/concurrent.jar"/>
-    <classpathentry kind="lib" path="/home/yuri/local/groovy/lib/asm-1.4.1.jar"/>
-    <classpathentry kind="lib" path="/home/yuri/local/groovy/lib/asm-attrs-1.4.1.jar"/>
-    <classpathentry kind="lib" path="/home/yuri/local/groovy/lib/asm-util-1.4.1.jar"/>
-    <classpathentry kind="lib" path="/home/yuri/local/groovy/lib/groovy-1.0-beta-3-snapshot.jar"/>
-    <classpathentry kind="lib" path="/home/yuri/local/groovy/lib/junit-3.8.1.jar"/>
-    <classpathentry kind="output" path="build/classes"/>
-</classpath>
diff --git a/groovy/modules/process/.project b/groovy/modules/process/.project
deleted file mode 100644
index 6c847c5..0000000
--- a/groovy/modules/process/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>groosh</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/groovy/modules/process/lib/concurrent.jar b/groovy/modules/process/lib/concurrent.jar
deleted file mode 100644
index 51872bf..0000000
--- a/groovy/modules/process/lib/concurrent.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/process/src/conf/groovy-classworlds.conf b/groovy/modules/process/src/conf/groovy-classworlds.conf
deleted file mode 100644
index f6c5934..0000000
--- a/groovy/modules/process/src/conf/groovy-classworlds.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-##############################################################################
-##                                                                          ##
-##  Groovy Shell Classworlds Configuration                                  ##
-##                                                                          ##
-##############################################################################
-
-##
-## $Revision: 1.3 $ $Date: 2003/10/31 12:30:57 $
-##
-
-# The main entry-point
-main is groovy.lang.GroovyShell from groovy
-
-# The core Groovy class-realm
-[groovy]
-    # Allow access to resources
-    load ${groovy.home}/conf
-    
-    # Load required libraries
-    load ${groovy.home}/lib/*.jar
-    load /home/yuri/workspace/groosh/lib/*.jar
-    load /home/yuri/workspace/groosh/build/classes/
diff --git a/groovy/modules/process/src/conf/groovyc-classworlds.conf b/groovy/modules/process/src/conf/groovyc-classworlds.conf
deleted file mode 100644
index d90bc68..0000000
--- a/groovy/modules/process/src/conf/groovyc-classworlds.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-##############################################################################
-##                                                                          ##
-##  Groovy Compiler Classworlds Configuration                               ##
-##                                                                          ##
-##############################################################################
-
-##
-## $Revision: 1.2 $ $Date: 2003/10/06 20:42:55 $
-##
-
-# The main entry-point
-main is org.codehaus.groovy.tools.FileSystemCompiler from groovy
-
-# The core Groovy class-realm
-[groovy]
-    # Allow access to resources
-    load ${groovy.home}/conf
-    
-    # Load required libraries
-    load ${groovy.home}/lib/*.jar
-    load /home/yuri/workspace/groosh/lib/*.jar
-    load /home/yuri/workspace/groosh/build/classes/
diff --git a/groovy/modules/process/src/include/nativeprocess.h b/groovy/modules/process/src/include/nativeprocess.h
deleted file mode 100644
index e23db30..0000000
--- a/groovy/modules/process/src/include/nativeprocess.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* DO NOT EDIT THIS FILE - it is machine generated */
-#include <jni.h>
-/* Header for class com_baulsupp_process_NativeProcess */
-
-#ifndef _Included_com_baulsupp_process_NativeProcess
-#define _Included_com_baulsupp_process_NativeProcess
-#ifdef __cplusplus
-extern "C" {
-#endif
-/* Inaccessible static: initialised */
-/*
- * Class:     com_baulsupp_process_NativeProcess
- * Method:    startProcess
- * Signature: (Ljava/lang/String;[Ljava/lang/String;III)I
- */
-JNIEXPORT jint JNICALL Java_com_baulsupp_process_NativeProcess_startProcess
-  (JNIEnv *, jobject, jstring, jobjectArray, jint, jint, jint);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GridClosureProcess.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GridClosureProcess.java
deleted file mode 100644
index 4378a88..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GridClosureProcess.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import java.util.Arrays;
-import java.util.List;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-
-import groovy.lang.Closure;
-
-public class GridClosureProcess extends StreamClosureProcess {
-  public GridClosureProcess(Closure closure) {
-    super(closure);
-  }
-
-  protected void process(final InputStream is, final OutputStream os) throws IOException {
-    BufferedReader ris = new BufferedReader(new InputStreamReader(is));
-    Writer wos = new PrintWriter(new OutputStreamWriter(os, "ISO-8859-1"));
-    
-    String line;
-    
-    List l = new ArrayList();
-    
-    while ((line = ris.readLine()) != null) {
-      String[] content = line.split("\\s+");
-      List contentList = Arrays.asList(content);
-      
-      l.clear();
-      l.add(contentList);
-      l.add(wos);
-      closure.call(l);
-      wos.flush();
-    }
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/Groosh.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/Groosh.java
deleted file mode 100644
index 2ef0c02..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/Groosh.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import java.io.IOException;
-import java.lang.reflect.Constructor;
-import java.util.HashMap;
-import java.util.Map;
-
-
-import EDU.oswego.cs.dl.util.concurrent.Executor;
-import EDU.oswego.cs.dl.util.concurrent.ThreadedExecutor;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObjectSupport;
-
-public class Groosh extends GroovyObjectSupport {
-  private Executor executor = new ThreadedExecutor();
-  private static Map registeredProcesses = new HashMap();
-  
-  static {
-    registerProcess("groovy", StreamClosureProcess.class);
-    registerProcess("each_line", LineClosureProcess.class);
-    registerProcess("grid", GridClosureProcess.class);
-  }
-
-  public static void registerProcess(String name, Class clazz) {
-    registeredProcesses.put(name, clazz);
-  }
-
-  public Object invokeMethod(String name, Object args) { 
-    GrooshProcess process;
-    try {
-      if (registeredProcesses.containsKey(name)) {
-        process = createProcess((Class) registeredProcesses.get(name), args);  
-      } else {
-        process = new ShellProcess(name, args);
-      }
-    } catch (IOException e) {
-      throw new RuntimeException(e);
-    }
-    
-    return process;
-  }
-
-  private GrooshProcess createProcess(Class class1, Object arg) {
-    GrooshProcess process = null;
-    
-    try {
-      Constructor c = class1.getConstructor(new Class[] {Closure.class});
-      process = (GrooshProcess) c.newInstance((Object[]) arg);
-    } catch (Exception e) {
-      throw new RuntimeException(e);
-    }
-    
-    return process;
-  }
-
-  public void execute(Runnable r) {
-    try {
-      executor.execute(r);
-    } catch (InterruptedException e) {
-      throw new RuntimeException(e);
-    }
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GrooshProcess.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GrooshProcess.java
deleted file mode 100644
index 36a3228..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/GrooshProcess.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import java.io.File;
-import java.io.IOException;
-
-import com.baulsupp.process.FileStreams;
-import com.baulsupp.process.Sink;
-import com.baulsupp.process.Source;
-import com.baulsupp.process.StandardStreams;
-import com.baulsupp.process.StringStreams;
-
-// TODO class should not be reentrant 
-// that is if output is already set, don't let it be done twice.
-public abstract class GrooshProcess {  
-  protected abstract Sink getSink();
-  
-  protected abstract Source getSource();
-  
-  public String toStringOut() throws IOException {
-    StringStreams.StringSink sink = StringStreams.stringSink();
-
-    getSource().connect(sink);
-    start();
-    
-    return sink.toString();
-  }
-
-  // TODO should this be asynchronous, would be less obvious though!
-  public void toFile(File f) throws IOException {
-    Sink sink = FileStreams.sink(f, false);
-  
-    getSource().connect(sink);
-    start();
-    
-    waitForExit();
-  }
-  
-  // needs to be asynchronous so they can continue the chain
-  public GrooshProcess pipeTo(GrooshProcess process) throws IOException {
-    getSource().connect(process.getSink());
-    
-    start();
-    
-    // return other process so chaining is possible
-    return process;
-  }
-
-  // TODO should this be asynchronous, would be less obvious though!
-  public void toStdOut() throws IOException {
-    Sink sink = StandardStreams.stdout();
-  
-    getSource().connect(sink);
-    start();
-    
-    waitForExit();
-  }
-  
-  public GrooshProcess fromStdIn() throws IOException {
-    Source source = StandardStreams.stdin();
-    
-    source.connect(getSink());  
-    
-    return this;
-  }
-  
-  public GrooshProcess fromString(String s) throws IOException {
-    Source source = StringStreams.stringSource(s);
-    
-    source.connect(getSink());  
-    
-    return this;
-  }
-  
-  public abstract void start() throws IOException;
-  
-  public abstract void waitForExit() throws IOException;
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/LineClosureProcess.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/LineClosureProcess.java
deleted file mode 100644
index bbaeecd..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/LineClosureProcess.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import java.util.List;
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-
-import groovy.lang.Closure;
-
-public class LineClosureProcess extends StreamClosureProcess {
-  public LineClosureProcess(Closure closure) {
-    super(closure);
-  }
-
-  protected void process(final InputStream is, final OutputStream os) throws IOException {
-    BufferedReader ris = new BufferedReader(new InputStreamReader(is));
-    Writer wos = new PrintWriter(new OutputStreamWriter(os, "ISO-8859-1"));
-    
-    String line;
-    
-    List l = new ArrayList();
-    
-    while ((line = ris.readLine()) != null) {
-      l.clear();
-      l.add(line);
-      l.add(wos);
-      closure.call(l);
-      wos.flush();
-    }
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/ShellProcess.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/ShellProcess.java
deleted file mode 100644
index 9b3a824..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/ShellProcess.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import java.io.IOException;
-
-import com.baulsupp.process.AppProcess;
-import com.baulsupp.process.ProcessFactory;
-import com.baulsupp.process.Sink;
-import com.baulsupp.process.Source;
-
-public class ShellProcess extends GrooshProcess {
-  private AppProcess process = null;
-  private String name;
-  private String[] args;
-  
-  public ShellProcess(String name, Object arg1) throws IOException {    
-    this.name = name;
-    this.args = getArgs(arg1);
-    
-    process = ProcessFactory.buildProcess(name, args);
-  }
-
-  private String[] getArgs(Object arg1) {
-    if (arg1 == null)
-      return new String[0];
-    else if (arg1 instanceof String[])
-      return (String[]) arg1;
-    else if (arg1 instanceof Object[]) {
-      Object[] argsO = (Object[]) arg1;
-      String[] argsS = new String[argsO.length];
-      for (int i = 0; i < argsO.length; i++) {
-        argsS[i] = String.valueOf(argsO[i]);
-      }
-      return argsS;
-    } else if (arg1 instanceof String)
-      return new String[] {(String) arg1};
-    else 
-      throw new IllegalStateException("no support for args of type " + arg1.getClass());
-  }
-  
-  public void waitForExit() throws IOException { 
-    process.result();
-  }
-  
-  public void start() throws IOException {
-    process.start();
-  }
-
-  public Sink getSink() {
-    return process.getInput();
-  }
-
-  public Source getSource() {
-    return process.getOutput();
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/StreamClosureProcess.java b/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/StreamClosureProcess.java
deleted file mode 100644
index f3635d8..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/groovy/groosh/StreamClosureProcess.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.baulsupp.groovy.groosh;
-
-import groovy.lang.Closure;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.channels.Channels;
-import java.nio.channels.Pipe;
-import java.util.ArrayList;
-import java.util.List;
-
-import EDU.oswego.cs.dl.util.concurrent.FutureResult;
-
-import com.baulsupp.process.IOUtil;
-import com.baulsupp.process.Sink;
-import com.baulsupp.process.Source;
-import com.baulsupp.process.StandardStreams;
-
-public class StreamClosureProcess extends GrooshProcess implements Runnable {
-  protected Closure closure;
-  private InputStream is;
-  private OutputStream os;
-  private FutureResult result = new FutureResult();
-
-  public StreamClosureProcess(Closure closure) {
-    this.closure = closure;
-  }
-
-  public void start() {
-    if (is == null)
-      throw new RuntimeException("closure processes need a source");    
-      
-    if (os == null)
-      os = StandardStreams.stdout().getStream();
-      
-    try {
-      IOUtil.executor.execute(new Runnable() {
-        public void run() {
-          StreamClosureProcess.this.run();
-        }
-      });
-    } catch (InterruptedException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  public void waitForExit() throws IOException { 
-    try {
-      result.get();
-    } catch (Exception e) {
-      // TODO handle the exceptions
-      throw new RuntimeException(e);
-    }
-  }
-
-  public void run() {    
-    try {
-      process(is, os);
-      result.set(Boolean.TRUE);
-    } catch (IOException e) {
-      // TODO remove debug once caller handle exception
-      System.out.println("ASYNC EXCEPTION (SCP.run): " + e);
-      result.setException(e);
-    } finally {
-      try {
-        os.flush();
-        os.close();
-        is.close();
-      } catch (IOException e) {
-        if (result.getException() == null) {
-          // TODO remove debug once caller handle exception
-          System.out.println("ASYNC EXCEPTION (SCP.run): " + e);
-          result.setException(e);
-        }
-      }
-    }
-  }
-
-  protected void process(final InputStream is, final OutputStream os) throws IOException {
-    List l = new ArrayList();
-    l.add(is);
-    l.add(os);
-    closure.call(l);
-    os.flush();
-  }
-  
-  public class ClosureSink extends Sink {
-
-    public void setStream(InputStream is) {
-      StreamClosureProcess.this.is = is;
-    }
-
-    public boolean receivesStream() {
-      return true;
-    }
-  }
-
-  protected Sink getSink() {
-    return new ClosureSink();
-  }
-  
-  public class ClosureSource extends Source {
-    public void connect(Sink sink) throws IOException {
-      if (sink.providesStream()) {
-        StreamClosureProcess.this.os = sink.getStream();
-      } else if (sink.receivesStream()) {
-        Pipe pipe = Pipe.open();
-        StreamClosureProcess.this.os = Channels.newOutputStream(pipe.sink());
-        sink.setStream(Channels.newInputStream(pipe.source()));  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-
-  protected Source getSource() {
-    return new ClosureSource();
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/AppProcess.java b/groovy/modules/process/src/main/com/baulsupp/process/AppProcess.java
deleted file mode 100644
index 9087b3a..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/AppProcess.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.IOException;
-
-// TODO how does the completion of the input/output i.e. to a file get monitored?
-public interface AppProcess {
-  Sink getInput();
-  Source getOutput();
-  Source getError();
-  
-  void start() throws IOException;
-  int result();
-  boolean hadError();
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/CharSequenceSource.java b/groovy/modules/process/src/main/com/baulsupp/process/CharSequenceSource.java
deleted file mode 100644
index 9c3d5fb..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/CharSequenceSource.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baulsupp.process;
-
-public class CharSequenceSource extends Source {
-  public void connect(Sink sink) {
-    throw new RuntimeException();
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/DevNull.java b/groovy/modules/process/src/main/com/baulsupp/process/DevNull.java
deleted file mode 100644
index b42dbbb..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/DevNull.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public class DevNull {
-  public static class NullSink extends Sink {
-    public OutputStream getStream() {
-      return new OutputStream() {
-        public void write(int b) throws IOException {
-          // do nothing
-        }
-      };
-    }
-    
-    public void setStream(final InputStream is) {
-      // TODO handle result/exception?
-      IOUtil.pumpAsync(is, getStream());
-    }
-
-    public boolean providesStream() {
-      return true;
-    }
-
-    public boolean receivesStream() {
-      return true;
-    }
-  }
-  
-  public static class NullSource extends Source {
-    public void connect(Sink sink) {
-      if (sink.providesStream()) {
-        try {
-          sink.getStream().close();
-        } catch (IOException e) {
-          throw new RuntimeException(e);
-        }  
-      } else if (sink.receivesStream()) {
-        sink.setStream(new ByteArrayInputStream(new byte[0]));  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-  
-  public static Sink createSink() {
-    return new NullSink();
-  }
-  
-  public static Source createSource() {
-    return new NullSource();
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/FileStreams.java b/groovy/modules/process/src/main/com/baulsupp/process/FileStreams.java
deleted file mode 100644
index 49f8056..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/FileStreams.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-
-public class FileStreams {
-  public static class FileSource extends Source {
-    private File file;
-    private FileInputStream is;
-
-    public FileSource(File f) throws FileNotFoundException {
-      this.file = f;  
-      this.is = new FileInputStream(f);
-    }
-    
-    public void connect(Sink sink) {      
-      if (sink.providesStream()) {
-        // TODO handle result
-        IOUtil.pumpAsync(is, sink.getStream());
-      } else if (sink.receivesStream()) {
-        sink.setStream(is);  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-  
-  public static Source source(File file) throws FileNotFoundException {
-    return new FileSource(file);
-  }
-  
-  public static class FileSink extends Sink {
-    private File file;
-    private FileOutputStream os;
-
-    public FileSink(File f, boolean append) throws FileNotFoundException {
-      this.file = f;  
-      this.os = new FileOutputStream(f, append);
-    }
-    
-    public OutputStream getStream() {
-      return os;
-    }
-
-    public boolean providesStream() {
-      return true;
-    }
-  }
-  
-  public static Sink sink(File file, boolean append) throws FileNotFoundException {
-    return new FileSink(file, append);
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/IOUtil.java b/groovy/modules/process/src/main/com/baulsupp/process/IOUtil.java
deleted file mode 100644
index c219ece..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/IOUtil.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import EDU.oswego.cs.dl.util.concurrent.Executor;
-import EDU.oswego.cs.dl.util.concurrent.FutureResult;
-import EDU.oswego.cs.dl.util.concurrent.ThreadedExecutor;
-
-public class IOUtil {
-  private static final int BUFFER_SIZE = 8192;
-  public static final Executor executor = new ThreadedExecutor();
-
-  public static int pump(InputStream is, OutputStream stream) throws IOException {
-    int pumped = 0;
-    byte[] buffy = new byte[BUFFER_SIZE];
-    
-    int read = 0;
-    while ((read = is.read(buffy)) != -1) {
-      stream.write(buffy, 0, read);
-      pumped += read;  
-    }
-    
-    return read;
-  }
-
-  public static FutureResult pumpAsync(final InputStream is, final OutputStream os) {
-    final FutureResult result = new FutureResult();
-    try {
-      executor.execute(new Runnable() {
-        public void run() {
-          try {
-            int read = IOUtil.pump(is, os);
-            result.set(new Integer(read));
-          } catch (IOException e) {
-            // TODO remove debug once caller handle exception
-            System.out.println("ASYNC EXCEPTION (IOU.pumpAsync): " + e);
-            result.setException(e);
-          } finally {
-            try {
-              os.close();
-              is.close();
-            } catch (IOException e) {
-              // TODO remove debug once caller handle exception
-              System.out.println("ASYNC EXCEPTION (IOU.pumpAsync): " + e);
-              result.setException(e);
-            }
-          }
-        }
-      });
-    } catch (InterruptedException e) {
-      throw new RuntimeException(e);
-    }
-    
-    return result;
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/JavaProcess.java b/groovy/modules/process/src/main/com/baulsupp/process/JavaProcess.java
deleted file mode 100644
index f9e3a67..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/JavaProcess.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-public class JavaProcess implements AppProcess {      
-  private String[] command;
-  private Process process;
-  
-  private boolean errHandled = false;
-  private boolean outHandled = false;
-  private boolean inHandled = false;
-
-  private JavaProcess(String[] command) throws IOException {
-    this.command = command;
-    process = Runtime.getRuntime().exec(command);
-  }
-
-  public static JavaProcess createProcess(String command, String[] args) throws IOException { 
-    String[] commandArgs = concat(command, args);
-       
-    return new JavaProcess(commandArgs);
-  }
-
-  private static String[] concat(String command, String[] args) {
-    String[] commandArgs = new String[args.length + 1];
-    commandArgs[0] = command;
-    System.arraycopy(args, 0, commandArgs, 1, args.length);
-    return commandArgs;
-  }
-
-  public void start() throws IOException {    
-    if (!inHandled) {
-      process.getOutputStream().close();
-    }
-
-    // Should we throw away, it would make it explicit to direct the output somewhere.
-    if (!outHandled)
-      IOUtil.pumpAsync(process.getInputStream(), StandardStreams.stderr().getStream());
-      
-    if (!errHandled)
-      IOUtil.pumpAsync(process.getErrorStream(), StandardStreams.stderr().getStream());
-  }
-
-  public Sink getInput() {
-    return new InSink();
-  }
-
-  public Source getOutput() {
-    return new OutSource();
-  }
-
-  public Source getError() {
-    return new ErrSource();
-  }
-
-  public int result() {
-    try {
-      return process.waitFor();
-    } catch (InterruptedException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  public boolean hadError() {
-    return result() != 0;
-  }
-  
-  public class InSink extends Sink {
-    public OutputStream getStream() {
-      inHandled = true;
-      return process.getOutputStream();
-    }
-
-    public boolean providesStream() {
-      return true;
-    }
-  }
-  
-  public class OutSource extends Source {
-    public void connect(Sink sink) {
-      if (sink.providesStream()) {
-        outHandled = true;
-        // TODO handle result
-        IOUtil.pumpAsync(process.getInputStream(), sink.getStream());
-      } else if (sink.receivesStream()) {
-        outHandled = true;
-        sink.setStream(process.getInputStream());  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-  
-  public class ErrSource extends Source {
-    public void connect(Sink sink) {
-      if (sink.providesStream()) {
-        errHandled = true;
-        // TODO handle result
-        IOUtil.pumpAsync(process.getInputStream(), sink.getStream());
-      } else if (sink.receivesStream()) {
-        errHandled = true;
-        sink.setStream(process.getInputStream());  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/ProcessFactory.java b/groovy/modules/process/src/main/com/baulsupp/process/ProcessFactory.java
deleted file mode 100644
index 00fff0d..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/ProcessFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.IOException;
-
-public class ProcessFactory {
-  public static AppProcess buildProcessPipeline(String commandLine) {
-    throw new UnsupportedOperationException();
-  }
-  
-  public static AppProcess buildProcess(String command, String[] args) throws IOException {
-    return JavaProcess.createProcess(command, args);
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/Sink.java b/groovy/modules/process/src/main/com/baulsupp/process/Sink.java
deleted file mode 100644
index 3459e0a..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/Sink.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-// TODO need an isFinished method
-// in general process.waitForExit() knows when input has finished
-// but not aware of output has reached destination neccesarily! 
-public class Sink {  
-  public boolean receivesStream() {
-    return false;  
-  }
-  
-  public boolean providesStream() {
-    return false;  
-  }
-  
-  public OutputStream getStream() {
-    throw new UnsupportedOperationException();  
-  }
-  
-  public void setStream(InputStream channel) {
-    throw new UnsupportedOperationException();  
-  }
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/Source.java b/groovy/modules/process/src/main/com/baulsupp/process/Source.java
deleted file mode 100644
index de38013..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/Source.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.IOException;
-
-public abstract class Source {  
-  public abstract void connect(Sink sink) throws IOException;
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/StandardStreams.java b/groovy/modules/process/src/main/com/baulsupp/process/StandardStreams.java
deleted file mode 100644
index 2b49f48..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/StandardStreams.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-// TODO don't let stdout, stderr be closed
-public class StandardStreams {
-  public static class InSource extends Source {
-    public void connect(Sink sink) {
-      InputStream is = new FileInputStream(FileDescriptor.in);
-      
-      if (sink.providesStream()) {
-        // TODO feels better if this is line based, rather than fixed buffer size based
-        // TODO handle result
-        IOUtil.pumpAsync(is, sink.getStream());
-      } else if (sink.receivesStream()) {
-        sink.setStream(is);  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-  
-  public static Source stdin() {
-    return new InSource();
-  }
-  
-  public static class ErrSink extends Sink {
-    public OutputStream getStream() {
-      return new FileOutputStream(FileDescriptor.err) {
-        public void close() throws IOException {
-          // ignore close
-          flush();  
-        }  
-      };
-    }
-
-    public boolean providesStream() {
-      return true;
-    }
-  }
-  
-  public static Sink stderr() {
-    return new ErrSink();
-  }
-  
-  public static class OutSink extends Sink {
-    public OutputStream getStream() {
-      return new FileOutputStream(FileDescriptor.out) {
-        public void close() throws IOException {
-          // ignore close
-          flush();  
-        }  
-      };
-    }
-
-    public boolean providesStream() {
-      return true;
-    }
-  }
-  
-  public static Sink stdout() {
-    return new OutSink();
-  }
-
-}
diff --git a/groovy/modules/process/src/main/com/baulsupp/process/StringStreams.java b/groovy/modules/process/src/main/com/baulsupp/process/StringStreams.java
deleted file mode 100644
index af0656b..0000000
--- a/groovy/modules/process/src/main/com/baulsupp/process/StringStreams.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.baulsupp.process;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-
-import EDU.oswego.cs.dl.util.concurrent.FutureResult;
-
-public class StringStreams {
-  public static class StringSink extends Sink {
-    private ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    private FutureResult result = new FutureResult();
-  
-    public boolean receivesStream() {
-      return true;
-    }
-
-    public void setStream(InputStream is) {
-      result = IOUtil.pumpAsync(is, baos);
-    }
-  
-    public String toString() {
-      try {
-        result.get();
-      } catch (Exception e) {
-        // TODO handle better
-        throw new RuntimeException(e);
-      }
-    
-      try {
-        return baos.toString("ISO-8859-1");
-      } catch (UnsupportedEncodingException e) {
-        throw new RuntimeException(e);
-      } 
-    }
-  }
-  
-  public static StringSink stringSink() {
-    return new StringSink();  
-  }
-  
-  public static class StringSource extends Source {
-    private InputStream is;
-
-    public StringSource(String s) {
-      byte[] buffy;
-      
-      try {
-        buffy = s.getBytes("ISO-8859-1");
-      } catch (UnsupportedEncodingException e) {
-        throw new RuntimeException(e);
-      }
-      
-      this.is = new ByteArrayInputStream(buffy);
-    }
-    
-    public void connect(Sink sink) {      
-      if (sink.providesStream()) {
-        // TODO handle result
-        IOUtil.pumpAsync(is, sink.getStream());
-      } else if (sink.receivesStream()) {
-        sink.setStream(is);  
-      } else {
-        throw new UnsupportedOperationException("sink type unknown");  
-      }
-    }
-  }
-  
-  public static StringSource stringSource(String s) {
-    return new StringSource(s);  
-  }
-}
diff --git a/groovy/modules/process/src/test_scripts/basic_cat.groovy b/groovy/modules/process/src/test_scripts/basic_cat.groovy
deleted file mode 100644
index fef7b54..0000000
--- a/groovy/modules/process/src/test_scripts/basic_cat.groovy
+++ /dev/null
@@ -1,4 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-c = gsh.cat('test_scripts/blah.txt').toStdOut();
-
diff --git a/groovy/modules/process/src/test_scripts/blah.txt b/groovy/modules/process/src/test_scripts/blah.txt
deleted file mode 100644
index 2a52b65..0000000
--- a/groovy/modules/process/src/test_scripts/blah.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-a
-b
-ba
-c
-d
-
diff --git a/groovy/modules/process/src/test_scripts/cat_to_file.groovy b/groovy/modules/process/src/test_scripts/cat_to_file.groovy
deleted file mode 100644
index d1d1cf8..0000000
--- a/groovy/modules/process/src/test_scripts/cat_to_file.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-gsh.cat('test_scripts/blah.txt').toFile(new java.io.File('blah.out'));
-
-
diff --git a/groovy/modules/process/src/test_scripts/dict.groovy b/groovy/modules/process/src/test_scripts/dict.groovy
deleted file mode 100644
index 17db64e..0000000
--- a/groovy/modules/process/src/test_scripts/dict.groovy
+++ /dev/null
@@ -1,5 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-gsh.cat('/usr/share/dict/words').pipeTo(gsh.grep('lexia')).toStdOut();
-
-
diff --git a/groovy/modules/process/src/test_scripts/dict_args.groovy b/groovy/modules/process/src/test_scripts/dict_args.groovy
deleted file mode 100644
index 5c19708..0000000
--- a/groovy/modules/process/src/test_scripts/dict_args.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-if (args.length == 0) {
-  System.err.println("please provide a search pattern");
-  System.err.println("usage: dict_args querystring");
-} else {
-  gsh.cat('/usr/share/dict/words').pipeTo(gsh.grep(args[0])).toStdOut();
-}
-
diff --git a/groovy/modules/process/src/test_scripts/each_line.groovy b/groovy/modules/process/src/test_scripts/each_line.groovy
deleted file mode 100644
index f1105e6..0000000
--- a/groovy/modules/process/src/test_scripts/each_line.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-cat = gsh.cat('test_scripts/blah.txt');
-lines = gsh.each_line { line,w | 
-  w.write("*");
-  w.write(line);
-  w.write("\n");
-};
-
-cat.pipeTo(lines);
-lines.toStdOut();
-
-
diff --git a/groovy/modules/process/src/test_scripts/find_grid.groovy b/groovy/modules/process/src/test_scripts/find_grid.groovy
deleted file mode 100644
index 0fb5741..0000000
--- a/groovy/modules/process/src/test_scripts/find_grid.groovy
+++ /dev/null
@@ -1,19 +0,0 @@
-// BUG?? java.util.Arrays.asList fails with util on null!
-// changed java code to send List
-
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-f = gsh.find('.', '-name', '*.java', '-ls');
-total = 0;
-lines = gsh.grid { values,w |
-  x = values[2,4,6,10]; 
-  s = x.join('	');
-  w.println(s);
-  total += Integer.parseInt(values[6]);
-};
-
-f.pipeTo(lines);
-lines.toStdOut();
-
-System.out.println("Total: " + total);
-
diff --git a/groovy/modules/process/src/test_scripts/stdin_cat.groovy b/groovy/modules/process/src/test_scripts/stdin_cat.groovy
deleted file mode 100644
index fdbecb0..0000000
--- a/groovy/modules/process/src/test_scripts/stdin_cat.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-// does this fail if you change c to cat?
-gsh.cat().fromStdIn().toStdOut();
-
-
diff --git a/groovy/modules/process/src/test_scripts/tostring.groovy b/groovy/modules/process/src/test_scripts/tostring.groovy
deleted file mode 100644
index c6f44f6..0000000
--- a/groovy/modules/process/src/test_scripts/tostring.groovy
+++ /dev/null
@@ -1,6 +0,0 @@
-gsh = new com.baulsupp.groovy.groosh.Groosh();
-
-s = gsh.cat('test_scripts/blah.txt').pipeTo(gsh.grep('a')).toStringOut();
-
-System.out.println('->' + s.toString() + '<-');
-
diff --git a/groovy/modules/process/todo.txt b/groovy/modules/process/todo.txt
deleted file mode 100644
index 49d8b75..0000000
--- a/groovy/modules/process/todo.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-H - Change encoding from ISO-8859-1.  ISO-8859-1 is a marker to search for, rather than using the implicit methods.
-
-M - Various TODOs in the code.
-M - Line based stdin, rather than buffer based.  More intuitive for users.
-M - Handle process completion including sink?  Source can be ignored?
-M - Groovy operator overloading.
-M - Throw error if source/sink retrieved twice etc.  Or after start() called.
-
-E - Pipeline parsing i.e |, `.
-E - Tee Process for duplicating output
-E - Concat for joining multiple inputs.  With ThreadLocal input name!
-E - Sink/Source dealing with Reader/Writer?
-
-General
-
-bin/groovy test_scripts/dict_args.groovy 2>&1 | grep -v NativeMethod | grep -v Delegating | grep -v Launcher | grep -v Method.invoke | grep -v Invoker | grep -v MetaClass
-
-Caught: java.lang.ArrayIndexOutOfBoundsException: 0
-java.lang.ArrayIndexOutOfBoundsException: 0
-        at org.codehaus.groovy.runtime.DefaultGroovyMethods.get(DefaultGroovyMethods.java:741)
-        at dict_args.run(test_scripts/dict_args.groovy:7)
-        at dict_args.invokeMethod(test_scripts/dict_args.groovy)
-        at dict_args.main(test_scripts/dict_args.groovy)
-        at groovy.lang.GroovyShell.run(GroovyShell.java:166)
-        at groovy.lang.GroovyShell.main(GroovyShell.java:85)
-
diff --git a/groovy/modules/scriptom/lib/jacob.dll b/groovy/modules/scriptom/lib/jacob.dll
deleted file mode 100644
index 88029b3..0000000
--- a/groovy/modules/scriptom/lib/jacob.dll
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/scriptom/lib/jacob.jar b/groovy/modules/scriptom/lib/jacob.jar
deleted file mode 100644
index 56714df..0000000
--- a/groovy/modules/scriptom/lib/jacob.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/scriptom/maven.xml b/groovy/modules/scriptom/maven.xml
deleted file mode 100644
index 65647aa..0000000
--- a/groovy/modules/scriptom/maven.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<project default="default" xmlns:j="jelly:core" xmlns:u="jelly:util" xmlns:maven="jelly:maven" xmlns:ant="jelly:ant">
-
-    <goal name="default" prereqs="install-scriptom"/>
-
-    <preGoal name="java:compile">
-        <ant:path id="jacob.classpath">
-            <ant:pathelement path="${project.home}lib/jacob.jar"/>
-        </ant:path>
-        <maven:addPath id="maven.dependency.classpath" refid="jacob.classpath"/>
-    </preGoal>
-
-    <goal name="install-scriptom" prereqs="jar">
-
-        <echo>Installing scriptom</echo>
-        <echo>Creating directories</echo>
-        <mkdir dir="${groovy.install.staging.dest}"/>
-        <mkdir dir="${groovy.install.staging.dest}/lib"/>
-        <mkdir dir="${groovy.install.staging.dest}/bin"/>
-
-        <echo>${project.home}</echo>
-
-        <echo>Copying scriptom.jar</echo>
-        <copy file="${maven.build.dir}/${maven.final.name}.jar" toDir="${groovy.install.staging.dest}/lib"/>
-        <echo>Copying jacob.jar</echo>
-        <copy file="${project.home}lib/jacob.jar" toDir="${groovy.install.staging.dest}/lib"/>
-        <echo>Copying jacob.dll</echo>
-        <copy file="${project.home}lib/jacob.dll" toDir="${groovy.install.staging.dest}/bin"/>
-
-    </goal>
-
-</project>
\ No newline at end of file
diff --git a/groovy/modules/scriptom/project.properties b/groovy/modules/scriptom/project.properties
deleted file mode 100644
index 954a62c..0000000
--- a/groovy/modules/scriptom/project.properties
+++ /dev/null
@@ -1,46 +0,0 @@
-maven.compile.source=1.4
-maven.compile.target=1.4
-maven.test.source=1.4
-maven.compile.deprecation=true
-maven.compile.debug=true
-maven.compile.optimize=true
-
-maven.javadoc.links=http://java.sun.com/j2se/1.4.1/docs/api/
-maven.javadoc.source=1.4
-
-maven.test.search.classdir = true
-
-maven.junit.fork=true
-maven.junit.usefile=true
-
-groovy.install.staging.dest=${maven.build.dir}/install/
-maven.html2xdoc.dir=${maven.build.dir}/html
-
-maven.xdoc.date = left
-
-#####################################################
-# codehaus theme
-#####################################################
-maven.xdoc.theme.url=http://codehaus.org/codehaus-style.css
-
-#####################################################
-# Where the jars are uploaded
-#####################################################
-#maven.repo.central = dist.codehaus.org
-#maven.repo.central.directory = /dist
-
-#maven.repo.remote=http://www.ibiblio.org/maven
-#maven.repo.remote=http://dist.codehaus.org
-
-
-#####################################################
-# swt platform
-# possible values, win32, linux-gtk, macosx
-#
-# for linux-gtk enable gtk deps in project.xml
-#####################################################
-platform=win32
-#platform=linux-gtk
-#platform=macosx
-
-
diff --git a/groovy/modules/scriptom/project.xml b/groovy/modules/scriptom/project.xml
deleted file mode 100644
index d75b5c5..0000000
--- a/groovy/modules/scriptom/project.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<project>
-    <pomVersion>3</pomVersion>
-    <id>scriptom</id>
-    <groupId>groovy</groupId>
-    <artifactId>scriptom</artifactId>
-    <name>scriptom</name>
-    <currentVersion>1.1-SNAPSHOT</currentVersion>
-    <organization>
-        <name>The Codehaus</name>
-        <url>http://codehaus.org</url>
-        <logo>http://codehaus.org/codehaus-small.gif</logo>
-    </organization>
-    <inceptionYear>2004</inceptionYear>
-    <package>org.codehaus.scriptom</package>
-    <description>sCriptOM is a dynamic proxy around COM objects leveraging the Jacob library</description>
-    <url>http://groovy.codehaus.org/</url>
-    <issueTrackingUrl>http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242&amp;report=roadmap</issueTrackingUrl>
-
-    <siteAddress>beaver.codehaus.org</siteAddress>
-    <siteDirectory>/home/projects/groovy/public_html/scriptom/maven</siteDirectory>
-    <distributionDirectory>/home/projects/groovy/dist</distributionDirectory>
-
-    <repository>
-        <connection>scm:cvs:pserver:anonymous@cvs.codehaus.org:/scm/cvspublic:groovy/modules/scriptom</connection>
-        <developerConnection>scm:cvs:ext:${maven.username}@cvs.codehaus.org:/scm/cvspublic:groovy/modules/scriptom</developerConnection>
-        <url>http://cvs.groovy.codehaus.org/viewcvs.cgi/groovy/modules/scriptom</url>
-    </repository>
-    <versions/>
-    <branches/>
-    <mailingLists/>
-    <developers>
-        <developer>
-            <id>glaforge</id>
-            <name>Guillaume Laforge</name>
-            <roles>
-                <role>Developer</role>
-                <role>Founder</role>
-            </roles>
-        </developer>
-    </developers>
-
-    <dependencies>
-        <dependency>
-            <groupId>groovy</groupId>
-            <artifactId>groovy-all</artifactId>
-            <version>1.0-jsr-05</version>
-            <type>jar</type>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <nagEmailAddress>scm@groovy.codehaus.org</nagEmailAddress>
-        <sourceDirectory>src/main</sourceDirectory>
-        <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-        <unitTest>
-            <includes>
-                <include>**/*Test.*</include>
-                <include>**/*Bug.*</include>
-            </includes>
-            <resources>
-                <resource>
-                    <directory>src/test</directory>
-                    <filtering>false</filtering>
-                    <includes>
-                        <include>**/*.properties</include>
-                        <include>**/*.xml</include>
-                    </includes>
-                </resource>
-            </resources>
-        </unitTest>
-        <resources>
-            <resource>
-                <directory>src/main</directory>
-                <filtering>false</filtering>
-                <includes>
-                    <include>**/*.properties</include>
-                    <include>**/*.xml</include>
-                </includes>
-            </resource>
-        </resources>
-    </build>
-    <reports>
-<!--        <report>maven-license-plugin</report>            -->
-<!--        <report>maven-checkstyle-plugin</report>         -->
-<!--        <report>maven-pmd-plugin</report>                -->
-<!--        <report>maven-jdepend-plugin</report>            -->
-<!--        <report>maven-changelog-plugin</report>          -->
-<!--        <report>maven-file-activity-plugin</report>      -->
-<!--        <report>maven-developer-activity-plugin</report> -->
-<!--        <report>maven-jxr-plugin</report>                -->
-        <report>maven-javadoc-plugin</report>
-        <report>maven-junit-report-plugin</report>
-<!--        <report>maven-faq-plugin</report>                -->
-<!--        <report>maven-clover-plugin</report>             -->
-<!--        <report>maven-changes-plugin</report>            -->
-    </reports>
-</project>
\ No newline at end of file
diff --git a/groovy/modules/scriptom/scriptom.iml b/groovy/modules/scriptom/scriptom.iml
deleted file mode 100644
index 4802ec1..0000000
--- a/groovy/modules/scriptom/scriptom.iml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4" relativePaths="true" type="JAVA_MODULE">
-  <component name="ModuleRootManager" />
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <exclude-output />
-    <exclude-exploded />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="Groovy" />
-    <orderEntry type="module-library">
-      <library>
-        <CLASSES>
-          <root url="jar://$MODULE_DIR$/lib/jacob.jar!/" />
-        </CLASSES>
-        <JAVADOC />
-        <SOURCES>
-          <root url="file://D:/java/lib/jacob" />
-        </SOURCES>
-      </library>
-    </orderEntry>
-    <orderEntryProperties />
-  </component>
-</module>
-
diff --git a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/ActiveXProxy.java b/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/ActiveXProxy.java
deleted file mode 100644
index 6074848..0000000
--- a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/ActiveXProxy.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2005 (C) Guillaume Laforge. All Rights Reserved.
- *
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- *
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *
- */
-package org.codehaus.groovy.scriptom;
-
-import com.jacob.activeX.ActiveXComponent;
-import com.jacob.com.Variant;
-import com.jacob.com.Dispatch;
-import com.jacob.com.DispatchEvents;
-import com.jacob.com.ComThread;
-import groovy.lang.GroovyObjectSupport;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * <p>Dynamic Groovy proxy around ActiveX COM components.</p>
- *
- * @author Guillaume Laforge
- * @author Dierk Koenig, adapted to Jacob 1.9
- * @author Marc Guillemot
- */
-public class ActiveXProxy extends GroovyObjectSupport
-{
-    private ActiveXComponent activex;
-    private EventSupport eventSupport;
-    private boolean released = false;
-
-    /**
-     * <p>Build a GroovyObject proxy for an ActiveX component,
-     * leveraging Groovy's metaprogramming facilities</p>
-     * <p/>
-     * <p>Example:</p>
-     * <code>
-     * excel = new ActiveXProxy("Excel.Application")
-     * explorer = new ActiveXProxy("InternetExplorer.Application")
-     * // call with Internet Explorer clsid
-     * explorer = new ActiveXProxy("clsid:{0002DF01-0000-0000-C000-000000000046}")
-     * </code>
-     *
-     * @param clsId the name of the application or the Class ID of the component.
-     */
-    public ActiveXProxy(final String clsId)
-    {
-        ComThread.InitMTA();
-        activex = new ActiveXComponent(clsId);
-        eventSupport = new EventSupport(activex);
-    }
-
-    /**
-     * Get the property
-     *
-     * @param propName the name of the property
-     * @return the value associated with the property name
-     */
-    public Object getProperty(final String propName)
-    {
-    	checkReleased();
-
-    	if ("events".equals(propName))
-            return eventSupport;
-
-        return toReturn(activex.getProperty(propName));
-    }
-
-    /**
-     * Invoke a method on an ActiveX component
-     *
-     * @param methodName name of the method to call
-     * @param parameters parameters of the method call
-     * @return the value returned by the method call
-     */
-    public Object invokeMethod(String methodName, Object parameters)
-    {
-    	checkReleased();
-    	
-    	if ("getEvents".equals(methodName))
-            return eventSupport;
-
-        Object[] objs = InvokerHelper.getInstance().asArray(parameters);
-        Variant[] variants = new Variant[objs.length];
-        for (int i = 0; i < variants.length; i++)
-        {
-            variants[i] = new Variant(VariantProxy.toValue(objs[i]));
-        }
-        return toReturn(activex.invoke(methodName, variants));
-    }
-
-    /**
-     * Sets a property
-     *
-     * @param propertyName name of the property to set
-     * @param newValue     new value of the property
-     */
-    public void setProperty(String propertyName, Object newValue)
-    {
-    	checkReleased();
-
-    	if ("events".equals(propertyName))
-            new DispatchEvents(activex, newValue);
-        activex.setProperty(propertyName, new Variant(VariantProxy.toValue(newValue)));
-    }
-
-    private Object toReturn(Object obj)
-    {
-    	checkReleased();
-
-    	if (obj instanceof Variant)
-        {
-            return new VariantProxy((Variant) obj);
-        }
-        else if (obj instanceof Dispatch)
-        {
-            final Variant v = new Variant();
-            v.putDispatch((Dispatch) obj);
-            return new VariantProxy(v);
-        }
-        else
-        {
-            return obj;
-        }
-    }
-    
-    /**
-     * Checks if the object has already been released
-     * @throws IllegalStateException if already released
-     */
-    protected void checkReleased() {
-    	if (released) {
-    		throw new IllegalStateException("Object has already been released");
-    	}
-    }
-
-    /**
-     * Frees the COM resources used by this proxy.
-     * This method is called by {@link #finalize()} but it is safer to explicitely release
-     * the associated resources in particular when used in a script as the JVM may decide that
-     * it is not necessary to call {@link #finalize()}. 
-     */
-    public void release() {
-    	if (!released) {
-	        activex.safeRelease();
-	        ComThread.Release();
-    	}
-    }
-    
-    protected void finalize() throws Throwable
-    {
-    	release();
-        super.finalize();
-    }
-}
diff --git a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/EventSupport.java b/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/EventSupport.java
deleted file mode 100644
index cdb0cba..0000000
--- a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/EventSupport.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2005 (C) Guillaume Laforge. All Rights Reserved.
- *
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- *
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *
- */
-package org.codehaus.groovy.scriptom;
-
-import com.jacob.activeX.ActiveXComponent;
-import com.jacob.com.DispatchEvents;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.GroovyShell;
-import groovy.lang.Binding;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Iterator;
-import java.util.Date;
-
-import org.codehaus.groovy.control.CompilationFailedException;
-
-/**
- * Provides a hooking mechanism to use an "events" property belonging to the ActiveXProxy,
- * containing closures for the event handling.
- * <p/>
- * This "events" is backed by a Map that contains keys representing the event to subscribe to,
- * and closures representing the code to execute when the event is triggered.
- * <p/>
- * Jacob allows only to pass to the <code>DispatchEvents</code> class.
- * But Scriptom pass a dynamically generated class in Groovy through GroovyShell,
- * which delegates calls to the closures stored in the Map.
- * <p/>
- *
- * <p>
- * Event support can be done by adding closures to the event object,
- * then calling listen() method will subscribe to all events:
- * <code>
- * comProxy.events.SomeEvent = { // do something }
- * comProxy.events.OtherEvent = { // do something else }
- * comProxy.events.listen()
- * </code>
- * </p>
- *
- * @author Guillaume Laforge
- */
-public class EventSupport extends GroovyObjectSupport
-{
-    /**
-     * Map containing closures for each events which has been subscribed to
-     */
-    private Map eventHandlers = new HashMap();
-
-    /**
-     * Underlying Jacob ActiveXComponent
-     */
-    private ActiveXComponent activex;
-
-    /**
-     * Source code of the class dealing with event support
-     */
-    private String eventClassSourceCode = "// no event support script generated";
-
-    /**
-     * In the constructor, we pass the reference to the <code>ActiveXComponent</code>.
-     *
-     * @param activex the component
-     */
-    EventSupport(ActiveXComponent activex)
-    {
-        this.activex = activex;
-    }
-
-    /**
-     * Invokes directly a closure in the <code>eventHandlers</code> Map,
-     * or call the <code>listen()</code> pseudo-method that triggers the creation of the <code>EventHandler</code>
-     * and registers it with <code>DispatchEvents</code>.
-     *
-     * @param name name of the closure to call, or the "listen" pseudo-method.
-     * @param args arguments to be passed to the closure
-     * @return result returned by the closre
-     */
-    public Object invokeMethod(String name, Object args)
-    {
-        if ("listen".equals(name))
-        {
-            try {
-                StringBuffer methods = new StringBuffer();
-                for (Iterator iterator = eventHandlers.keySet().iterator(); iterator.hasNext();) {
-                    String eventName = (String) iterator.next();
-                    methods.append("    void ")
-                    .append(eventName)
-                    .append("(Variant[] variants) {\n")
-                    .append("        evtHandlers['")
-                    .append(eventName)
-                    .append("'].call( VariantProxy.defineArray(variants) )\n    }\n");
-                }
-
-                // time token to avoid duplicate classes with the same name
-                long time = new Date().getTime();
-                StringBuffer classSource = new StringBuffer();
-                classSource.append("import com.jacob.com.*\n")
-                .append("import org.codehaus.groovy.scriptom.VariantProxy\n")
-                .append("class EventHandler")
-                .append(time)
-                .append(" {\n")
-                .append("    def evtHandlers\n")
-                .append("    EventHandler")
-                .append(time)
-                .append("(scriptBinding) {\n")
-                .append("        evtHandlers = scriptBinding\n")
-                .append("    }\n")
-                .append(methods.toString())
-                .append("}\n")
-                .append("new EventHandler")
-                .append(time)
-                .append("(binding)\n");
-
-                Map eventHandlersContainer = new HashMap();
-                eventHandlersContainer.put("eventHandlers", eventHandlers);
-                Binding binding = new Binding(eventHandlers);
-                eventClassSourceCode = classSource.toString();
-                Object generatedInstance = new GroovyShell(binding).evaluate(eventClassSourceCode);
-
-                new DispatchEvents(this.activex, generatedInstance);
-            } catch (CompilationFailedException e) {
-                e.printStackTrace();
-            }
-            return null;
-
-        }
-        else
-        {
-            // call the closure from the eventHandlers Map
-            return ((Closure) eventHandlers.get(name)).call(args);
-        }
-    }
-
-    /**
-     * Sets the property only if a <code>Closure</code> for event handling is passed as value.
-     * The name of the property represents the name of the events triggered by the ActiveX/COM component.
-     * The closure is the code to be executed upon the event being triggered.
-     *
-     * @param property the name of the event
-     * @param newValue the closure to execute
-     */
-    public void setProperty(String property, Object newValue)
-    {
-        if (newValue instanceof Closure)
-            eventHandlers.put(property, newValue);
-    }
-
-    /**
-     * <p>Retrieves the action event closure associated with a given event.</p>
-     *
-     * <p>
-     * For debugging purpose, the generated scripted can be retrieved with:
-     * <code>
-     * println comProxy.events.eventSourceScript
-     * </code>
-     * </p>
-     *
-     * @param property the name of the event
-     * @return the closure associated with the handling of the given event
-     */
-    public Object getProperty(String property)
-    {
-        // used to print the source of the generated class dealing with event support for debugging purpose
-        if ("eventSourceScript".equals(property)) {
-            return eventClassSourceCode;
-        }
-        return eventHandlers.get(property);
-    }
-}
diff --git a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/VariantProxy.java b/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/VariantProxy.java
deleted file mode 100644
index 830a6a2..0000000
--- a/groovy/modules/scriptom/src/main/org/codehaus/groovy/scriptom/VariantProxy.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * $Id$
- *
- * Copyright 2005 (C) Guillaume Laforge. All Rights Reserved.
- *
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met:
- *  1. Redistributions of source code must retain copyright statements and
- * notices. Redistributions must also contain a copy of this document.
- *  2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products
- * derived from this Software without prior written permission of The Codehaus.
- * For written permission, please contact info@codehaus.org.
- *  4. Products derived from this Software may not be called "groovy" nor may
- * "groovy" appear in their names without prior written permission of The
- * Codehaus. "groovy" is a registered trademark of The Codehaus.
- *  5. Due credit should be given to The Codehaus - http://groovy.codehaus.org/
- *
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *
- */
-package org.codehaus.groovy.scriptom;
-
-import com.jacob.com.Dispatch;
-import com.jacob.com.Variant;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.GString;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/**
- * <p>Proxy class for all Variant objects.</p>
- * <p>For the Jacob library, a Variant is a wrapper around an object returned by a COM component:
- * it can be the value of a property, or the return value of a COM method call.</p>
- *
- * @author Guillaume Laforge
- * @author Dierk Koenig, adapted to Jacob 1.9
- * @author Marc Guillemot, adapted to Jacob 1.10.1
- */
-public class VariantProxy extends GroovyObjectSupport
-{
-    private Variant variant;
-
-    /**
-     * Creates a Variant wrapped in a GroovyObject proxy (Groovy's metaprogramming facilities).
-     *
-     * @param var the variant to wrap.
-     */
-    public VariantProxy(Variant var)
-    {
-        variant = var;
-    }
-
-    /**
-     * Used internally by the Groovy generated event support class
-     * to transform Variant arrays to VariantProxy arrays.
-     *
-     * @param obj a Variant[] array
-     * @return a VariantProxy[] array
-     */
-    static VariantProxy[] defineArray(Object obj)
-    {
-        if (obj instanceof Variant[]) {
-            Variant[] variants = (Variant[])obj;
-            VariantProxy[] array = new VariantProxy[variants.length];
-            for (int i = 0; i < array.length; i++)
-                array[i] = new VariantProxy(variants[i]);
-            return array;
-        } else {
-            return new VariantProxy[0];
-        }
-    }
-
-    /**
-     * Get the property associated to the property named passed as argument.<b/>
-     * The property name <code>value</code> will return the real value of the Variant, not a proxy.
-     *
-     * @param property the name of the property to retrieve.
-     * @return the Variant proxy, or the real value if <code>property.equals("value")</code>
-     */
-    public Object getProperty(String property)
-    {
-        if ("value".equals(property))
-            return toObject(variant);
-        return new VariantProxy(Dispatch.get(variant.toDispatch(), property));
-    }
-
-    /**
-     * Return the real value wrapped inside the variant.<b/>
-     *
-     * @param v the variant to retrieve the real value from
-     * @return the real value of the variant
-     */
-    private Object toObject(Variant v)
-    {
-        switch (v.getvt())
-        {
-            case Variant.VariantEmpty:
-                return null;
-            case Variant.VariantNull:
-                return null;
-            case Variant.VariantShort:
-                return new Short(v.toShort());
-            case Variant.VariantInt:
-                return new Integer(v.toInt());
-            case Variant.VariantFloat:
-                return new Float(v.toFloat());
-            case Variant.VariantDouble:
-                return new Double(v.toDouble());
-            case Variant.VariantCurrency:
-                return new Long(v.toCurrency());
-            case Variant.VariantDate:
-                return new Double(v.toDate());
-            case Variant.VariantString:
-                return new String(v.toString());
-            case Variant.VariantDispatch:
-                return v;
-            case Variant.VariantError:
-                return new Integer(v.toError());
-            case Variant.VariantBoolean:
-                return new Boolean(v.toBoolean());
-            case Variant.VariantVariant:
-                return v;
-            case Variant.VariantObject:
-                return v.toObject();
-            case Variant.VariantByte:
-                return new Byte(v.toByte());
-            case Variant.VariantTypeMask:
-                return v;
-            case Variant.VariantArray:
-                return v.toSafeArray();
-            case Variant.VariantByref:
-                return v;
-            default:
-                return v;
-        }
-    }
-
-    /**
-     * Sets a property of the underlying variant.
-     *
-     * @param property name of the property to change
-     * @param newValue the new value of the property
-     */
-    public void setProperty(String property, Object newValue)
-    {
-        Dispatch.put(variant.toDispatch(), property, toValue(newValue));
-    }
-
-    static Object toValue(Object newValue)
-    {
-        // special case for Groovy's arithmetics:
-        // BigInteger and BigDecimal aren't recognized by the Jacob library
-        if (newValue instanceof BigInteger)
-            newValue = new Integer(((BigInteger) newValue).intValue());
-        else if (newValue instanceof BigDecimal)
-            newValue = new Double(((BigDecimal) newValue).doubleValue());
-        else if (newValue instanceof GString)
-            newValue = newValue.toString();
-        return newValue;
-    }
-
-    /**
-     * Invoke a method on the variant.
-     *
-     * @param name name of the method to call
-     * @param args arguments passed as parameters to the method call
-     * @return the value returned by the method call
-     */
-    public Object invokeMethod(String name, Object args)
-    {
-        Object[] objs = InvokerHelper.getInstance().asArray(args);
-        // special case for getValue() to retrieve the real value wrapped inside the variant object
-        if ("getValue".equals(name) && (objs == null || objs.length == 0))
-            return toObject(variant);
-        Variant[] variants = new Variant[objs.length];
-        for (int i = 0; i < variants.length; i++)
-        {
-            variants[i] = new Variant(toValue(objs[i]));
-        }
-        return new VariantProxy(Dispatch.callN(variant.toDispatch(), name, variants));
-    }
-
-    protected void finalize() throws Throwable
-    {
-        variant.safeRelease();
-        super.finalize();
-    }
-}
diff --git a/groovy/modules/scriptom/src/script/excel.groovy b/groovy/modules/scriptom/src/script/excel.groovy
deleted file mode 100644
index 291804a..0000000
--- a/groovy/modules/scriptom/src/script/excel.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-// create a proxy for Excel
-xls = new ActiveXProxy("Excel.Application")
-xls.Visible = true
-
-Thread.sleep(1000)
-
-// get the workbooks object
-workbooks = xls.Workbooks
-// add a new workbook
-workbook  = workbooks.Add()
-
-// select the active sheet
-sheet = workbook.ActiveSheet
-
-// get a handle on two cells
-a1 = sheet.Range('A1')
-a2 = sheet.Range('A2')
-
-// sets a value for A1
-a1.Value   = 123.456
-// defines a formula in A2
-a2.Formula = '=A1*2'
-
-println "a1: ${a1.Value.value}"
-println "a2: ${a2.Value.getValue()}"
-
-// close the workbook without asking for saving the file
-workbook.Close(false, null, false)
-// quits excel
-xls.Quit()
diff --git a/groovy/modules/scriptom/src/script/ie.groovy b/groovy/modules/scriptom/src/script/ie.groovy
deleted file mode 100644
index 17f8e93..0000000
--- a/groovy/modules/scriptom/src/script/ie.groovy
+++ /dev/null
@@ -1,18 +0,0 @@
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-// instanciate Internet Explorer
-explorer = new ActiveXProxy("InternetExplorer.Application")
-
-// set its properties
-explorer.Visible = true
-explorer.AddressBar = true
-
-// navigate to a site
-explorer.Navigate("http://glaforge.free.fr/weblog")
-Thread.sleep(1000)
-explorer.StatusText = "Guillaume Laforge's weblog"
-Thread.sleep(2000)
-
-// quit Internet Explorer
-explorer.Quit()
\ No newline at end of file
diff --git a/groovy/modules/scriptom/src/script/outlook.groovy b/groovy/modules/scriptom/src/script/outlook.groovy
deleted file mode 100644
index dcd5067..0000000
--- a/groovy/modules/scriptom/src/script/outlook.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-// Example how to access MS Outlook from Groovy Scriptom for reading
-// tasks and appointments for further processing. --Dierk Koenig
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-namespace = new ActiveXProxy("Outlook.Application").getNamespace('MAPI')
-
-CALENDAR_FOLDER =  9
-TASK_FOLDER =     13
-
-appointmentAttribs = '''
-	start end duration subject location alldayevent 
-	organizer importance sensitivity body'''
-
-taskAttribs = '''
-	body importance lastmodificationtime mileage noaging saved sensitivity size 
-	subject unread actualwork complete contactnames datecompleted delegationstate 
-	delegator duedate isrecurring ordinal owner ownership percentcomplete recipients 
-	remindertime reminderoverridedefault responsestate role startdate status 
-	statusoncompletionrecipients statusupdaterecipients teamtask totalwork 
-	getrecurrencepattern statusreport'''
-
-print(CALENDAR_FOLDER, appointmentAttribs)
-print(TASK_FOLDER,     taskAttribs)
-
-
-def print (folder, attributes) {
-	entries = namespace.getDefaultFolder(folder)
-	attribute_list = attributes.split(/\s+/).findAll{it.size()>0}
-	count = entries.Items.count.value
-	for (i in 1..count) {
-		entry = entries.Items.item(i)
-		attribute_list.each {attr -> println attr +"\t:\t" + entry[attr].value }
-		println '----'
-	}
-}
diff --git a/groovy/modules/scriptom/src/script/shell.groovy b/groovy/modules/scriptom/src/script/shell.groovy
deleted file mode 100644
index e35eb4e..0000000
--- a/groovy/modules/scriptom/src/script/shell.groovy
+++ /dev/null
@@ -1,29 +0,0 @@
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-// showing the current directory
-cmd = new ActiveXProxy("Scripting.FileSystemObject")
-println cmd.GetAbsolutePathName(".").value
-
-sh = new ActiveXProxy("Shell.Application")
-
-// minimizing all opened windows
-sh.MinimizeAll()
-
-// opens an Explorer at the current location
-sh.Explore(cmd.GetAbsolutePathName(".").value)
-
-// choosing a folder from a native windows directory chooser
-folder = sh.BrowseForFolder(0, "Choose a folder", 0)
-println folder.Items().Item().Path.value
-
-wshell = new ActiveXProxy("WScript.Shell")
-// create a popup
-wshell.popup("Groovy popup")
-
-// show some key from the registry
-println wshell.RegRead("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\User Agent").value
-
-net = new ActiveXProxy("WScript.Network")
-// prints the computer name
-println net.ComputerName.value
diff --git a/groovy/modules/scriptom/src/script/vbscript.groovy b/groovy/modules/scriptom/src/script/vbscript.groovy
deleted file mode 100644
index 58c491f..0000000
--- a/groovy/modules/scriptom/src/script/vbscript.groovy
+++ /dev/null
@@ -1,8 +0,0 @@
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-// invoke some VBScript from Groovy and get the results!
-sc = new ActiveXProxy("ScriptControl")
-sc.Language = "VBScript"
-println sc.Eval("1 + 1").value
-
diff --git a/groovy/modules/scriptom/src/script/wmplayer.groovy b/groovy/modules/scriptom/src/script/wmplayer.groovy
deleted file mode 100644
index 8bc627c..0000000
--- a/groovy/modules/scriptom/src/script/wmplayer.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-def folderName = "."
-println "Playing files from: ${folderName}"
-
-// create a Windows Media Player (from its Class ID)
-def player = new ActiveXProxy("clsid:{6BF52A52-394A-11D3-B153-00C04F79FAA6}")
-
-// react upon a state change
-player.events.PlayStateChange = { variants ->
-    // if the media ended change the status flag
-    // so that the main thread notices the change
-    if (variants[0].value == 1) synchronized(player) { player.notify() }
-}
-// start listening to the events we're subsribed to
-player.events.listen()
-
-// loop over the available files and play them
-new File(folderName).eachFileMatch(~/.*(wav|au|wma|mp3)/) { song ->
-    println "Listening to: $song"
-    player.URL = song.absolutePath
-    control = player.controls.play()
-    synchronized(player) { player.wait() }
-}
-
-// close the player
-player.close()
diff --git a/groovy/modules/scriptom/src/script/wsh.groovy b/groovy/modules/scriptom/src/script/wsh.groovy
deleted file mode 100644
index 5bf21dc..0000000
--- a/groovy/modules/scriptom/src/script/wsh.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-import org.codehaus.groovy.scriptom.ActiveXProxy
-
-ALT 	= '%'
-SHIFT 	= '+' 
-CTRL 	= '^' 
-
-'cmd /k notepad.exe'.execute()
-
-// Windows Scripting Host shell
-host = new ActiveXProxy("WScript.Shell")
-host.AppActivate("Notepad")
-
-Thread.sleep(1000)
-
-// some keystrokes
-host.sendKeys('0/0{TAB}0/1{ENTER}1/0{TAB}1/1{ENTER}')
-
-// function key to insert current date
-host.sendKeys('{F5}')
-
-// replace all 0's by x
-host.sendKeys(CTRL+'h')
-host.sendKeys('0{TAB}x')
-host.sendKeys(ALT+'a')
-host.sendKeys('{ESC}')
-
-
-
diff --git a/groovy/modules/scriptom/src/test/ScriptTest.java b/groovy/modules/scriptom/src/test/ScriptTest.java
deleted file mode 100644
index e5240a4..0000000
--- a/groovy/modules/scriptom/src/test/ScriptTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-
-import groovy.lang.GroovyShell;
-import junit.framework.TestCase;
-
-/**
- * @author Guillaume Laforge
- */
-public class ScriptTest extends TestCase
-{
-    public static final String script =
-        "import org.codehaus.groovy.scriptom.ActiveXProxy\n" +
-        "import com.jacob.com.*\n" +
-        "def sc = new ActiveXProxy(\"ScriptControl\")\n" +
-        "sc.events.Error = { println \"!!! ERROR !!!\" }\n" +
-        "sc.events.listen()\n" +
-        "sc.Language = \"VBScript\"\n" +
-        "sc.AllowUI = true\n" +
-        "sc.Eval(\"+\")";
-
-    public static final String ieScript =
-        "import org.codehaus.groovy.scriptom.ActiveXProxy\n" +
-        "def explorer = new ActiveXProxy(\"InternetExplorer.Application\")\n" +
-        "explorer.events.OnQuit =           { println \"quiting\" }\n" +
-        "explorer.events.DocumentComplete = { println \"document complete\" }\n" +
-        "explorer.events.StatusTextChange = { println \"status text changed\" }\n" +
-        "explorer.events.listen()\n" +
-        "explorer.Visible = true\n" +
-        "explorer.AddressBar = true\n" +
-        "explorer.Navigate(\"http://glaforge.free.fr/weblog/\")\n" +
-        "Thread.sleep(5000)\n" +
-        "explorer.Quit()";
-
-    public void testExceptionThrownAndEventTriggered()
-    {
-        GroovyShell sh = new GroovyShell();
-        try
-        {
-            sh.evaluate(script);
-            fail("The expression should not have been evaluated properly");
-        }
-        catch (Throwable e)
-        {
-            System.out.println(e.getMessage());
-            System.out.println(e.getClass());
-        }
-    }
-}
diff --git a/groovy/modules/xmlrpc/.classpath b/groovy/modules/xmlrpc/.classpath
deleted file mode 100644
index 39b1701..0000000
--- a/groovy/modules/xmlrpc/.classpath
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main"/>
-	<classpathentry kind="src" path="src/test"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="lib" path="lib/smack.jar"/>
-	<classpathentry kind="lib" path="lib/smackx.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/groovy-core"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/groovy/modules/xmlrpc/.cvsignore b/groovy/modules/xmlrpc/.cvsignore
deleted file mode 100644
index 75388d3..0000000
--- a/groovy/modules/xmlrpc/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.log
-target
-
-xmlrpc.iml
-.settings
-.fbwarnings
diff --git a/groovy/modules/xmlrpc/.project b/groovy/modules/xmlrpc/.project
deleted file mode 100644
index 774bd4f..0000000
--- a/groovy/modules/xmlrpc/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>xmlrpc</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/groovy/modules/xmlrpc/lib/smack.jar b/groovy/modules/xmlrpc/lib/smack.jar
deleted file mode 100644
index 4e3fc35..0000000
--- a/groovy/modules/xmlrpc/lib/smack.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/xmlrpc/lib/smackx.jar b/groovy/modules/xmlrpc/lib/smackx.jar
deleted file mode 100644
index 41ab8bc..0000000
--- a/groovy/modules/xmlrpc/lib/smackx.jar
+++ /dev/null
Binary files differ
diff --git a/groovy/modules/xmlrpc/maven.xml b/groovy/modules/xmlrpc/maven.xml
deleted file mode 100644
index f7e9f87..0000000
--- a/groovy/modules/xmlrpc/maven.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<project default="jar" xmlns:j="jelly:core" xmlns:u="jelly:util" xmlns:maven="jelly:maven" xmlns:ant="jelly:ant">
-
-    <!-- Needed goal for the multiproject release of Groovy -->
-    <goal name="default"/>
-
-    <!-- Needed goal for the multiproject release of Groovy -->
-    <goal name="generate"/>
-
-    <!-- Expand the classpath with the Smack jars until they are added to ibiblio -->
-    <preGoal name="java:compile">
-        <ant:path id="smack.classpath">
-            <ant:pathelement path="${project.home}lib/smack.jar"/>
-            <ant:pathelement path="${project.home}lib/smackx.jar"/>
-        </ant:path>
-        <maven:addPath id="maven.dependency.classpath" refid="smack.classpath"/>
-    </preGoal>
-
-</project>
diff --git a/groovy/modules/xmlrpc/project.properties b/groovy/modules/xmlrpc/project.properties
deleted file mode 100644
index 9f423d2..0000000
--- a/groovy/modules/xmlrpc/project.properties
+++ /dev/null
@@ -1,46 +0,0 @@
-maven.compile.source=1.4
-maven.compile.target=1.4
-maven.test.source=1.4
-maven.compile.deprecation=true
-maven.compile.debug=true
-maven.compile.optimize=true
-
-maven.javadoc.links=http://java.sun.com/j2se/1.4.1/docs/api/
-maven.javadoc.source=1.4
-
-maven.test.search.classdir = true
-
-maven.junit.fork=true
-maven.junit.usefile=true
-
-groovy.install.staging.dest=${maven.build.dir}/install/
-maven.html2xdoc.dir=${maven.build.dir}/html
-
-maven.xdoc.date = left
-
-#####################################################
-# codehaus theme
-#####################################################
-maven.xdoc.theme.url=http://codehaus.org/codehaus-style.css
-
-#####################################################
-# Where the jars are uploaded
-#####################################################
-maven.repo.central = dist.codehaus.org
-maven.repo.central.directory = /www/dist.codehaus.org
-
-#maven.repo.remote=http://www.ibiblio.org/maven
-maven.repo.remote=http://dist.codehaus.org
-
-
-#####################################################
-# swt platform
-# possible values, win32, linux-gtk, macosx
-# 
-# for linux-gtk enable gtk deps in project.xml
-#####################################################
-platform=win32
-#platform=linux-gtk
-#platform=macosx
-
-
diff --git a/groovy/modules/xmlrpc/project.xml b/groovy/modules/xmlrpc/project.xml
deleted file mode 100644
index 9625515..0000000
--- a/groovy/modules/xmlrpc/project.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-<project>
-  <pomVersion>3</pomVersion>
-  <extend>${basedir}/../../groovy-core/project.xml</extend>
-  <id>groovy-xmlrpc</id>
-  <groupId>groovy</groupId>
-  <artifactId>groovy-xmlrpc</artifactId>
-  <name>groovy-xmlrpc</name>
-  <currentVersion>0.3</currentVersion>
-  <organization>
-    <name>The Codehaus</name>
-    <url>http://codehaus.org</url>
-    <logo>http://codehaus.org/codehaus-small.gif</logo>
-  </organization>
-  <inceptionYear>2004</inceptionYear>
-  <package>groovy.net.xmlrpc,uk.co.wilson,uk.org.xml.sax</package>
-  <description>An XML-RPC package for Groovy</description>
-  <url>http://groovy.codehaus.org/</url>
-  <issueTrackingUrl>http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242&amp;report=roadmap</issueTrackingUrl>
-  <siteAddress>groovy.codehaus.org</siteAddress>
-  <siteDirectory>/www/groovy.codehaus.org</siteDirectory>
-  <repository>
-    <connection>scm:cvs:pserver:anonymous@cvs.codehaus.org:/scm/cvspublic:groovy/modules/groovy-xmlrpc</connection>
-    <developerConnection>scm:cvs:ext:${maven.username}@cvs.codehaus.org:/scm/cvspublic:groovy/modules/groovy-xmlrpc</developerConnection>
-    <url>http://cvs.groovy.codehaus.org/viewcvs.cgi/groovy/modules/groovy-xmlrpc</url>
-  </repository>
-  <versions/>
-  <branches/>
-  <mailingLists/>
-  <developers>
-    <developer>
-      <id>tug</id>
-      <name>John Wilson</name>
-      <roles>
-        <role>Developer</role>
-        <role>Founder</role>
-      </roles>
-    </developer>
-  </developers>
-
-  <dependencies>
-    
-    <dependency>
-      <groupId>groovy</groupId>
-      <artifactId>groovy</artifactId>
-      <version>1.0-jsr-05</version>
-      <type>jar</type>
-      <properties/>
-    </dependency>
-
-    <dependency>
-      <groupId>xml-apis</groupId>
-      <artifactId>xml-apis</artifactId>
-      <version>1.0.b2</version>
-      <type>jar</type>
-      <properties/>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <nagEmailAddress>scm@groovy.codehaus.org</nagEmailAddress>
-    <sourceDirectory>src/main</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.*</include>
-        <include>**/*Bug.*</include>
-      </includes>
-      <resources>
-        <resource>
-          <directory>src/test</directory>
-          <filtering>false</filtering>
-          <includes>
-            <include>**/*.properties</include>
-            <include>**/*.xml</include>
-          </includes>
-        </resource>
-      </resources>
-    </unitTest>
-    <resources>
-      <resource>
-        <directory>src/main</directory>
-        <filtering>false</filtering>
-        <includes>
-          <include>**/*.properties</include>
-          <include>**/*.xml</include>
-          <include>**/*.providers</include>
-        </includes>
-      </resource>
-    </resources>
-  </build>
-  <reports>
-    <report>maven-license-plugin</report>
-    <report>maven-checkstyle-plugin</report>
-    <report>maven-pmd-plugin</report>
-    <report>maven-jdepend-plugin</report>
-    <report>maven-changelog-plugin</report>
-    <report>maven-file-activity-plugin</report>
-    <report>maven-developer-activity-plugin</report>
-    <report>maven-jxr-plugin</report>
-    <report>maven-javadoc-plugin</report>
-    <report>maven-junit-report-plugin</report>
-    <report>maven-faq-plugin</report>
-    <report>maven-clover-plugin</report>
-    <report>maven-changes-plugin</report>
-  </reports>
-</project>
\ No newline at end of file
diff --git a/groovy/modules/xmlrpc/src/bin/dummy.txt b/groovy/modules/xmlrpc/src/bin/dummy.txt
deleted file mode 100644
index 33e250d..0000000
--- a/groovy/modules/xmlrpc/src/bin/dummy.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is here to make CVS check out create the directory
diff --git a/groovy/modules/xmlrpc/src/conf/dummy.txt b/groovy/modules/xmlrpc/src/conf/dummy.txt
deleted file mode 100644
index 33e250d..0000000
--- a/groovy/modules/xmlrpc/src/conf/dummy.txt
+++ /dev/null
@@ -1 +0,0 @@
-This file is here to make CVS check out create the directory
diff --git a/groovy/modules/xmlrpc/src/main/META-INF/smack.providers b/groovy/modules/xmlrpc/src/main/META-INF/smack.providers
deleted file mode 100644
index 273898a..0000000
--- a/groovy/modules/xmlrpc/src/main/META-INF/smack.providers
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0"?> 

-<!-- Providers file for Smack extensions -->

-<smackProviders>    

-    <!-- Jabber-RPC -->

-    <iqProvider>

-        <elementName>query</elementName>

-        <namespace>jabber:iq:rpc</namespace>

-        <className>uk.co.wilson.smackx.providers.JabberRPCProvider</className>

-    </iqProvider>

-</smackProviders>
\ No newline at end of file
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/http/HTTPServer.java b/groovy/modules/xmlrpc/src/main/groovy/net/http/HTTPServer.java
deleted file mode 100644
index b9167cc..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/http/HTTPServer.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 groovy.net.http;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObjectSupport;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.ServerSocket;
-
-import uk.co.wilson.net.MinMLSocketServer;
-import uk.co.wilson.net.http.MinMLHTTPServer;
-
-/**
- * @author John Wilson
- *
- */
-
-public class HTTPServer extends GroovyObjectSupport {
-  protected static final byte[] userAgent = "User-Agent: Groovy Simple Web Server\r\n".getBytes();
-  
-  private final int minWorkers;
-  private final int maxWorkers;
-  private final int maxKeepAlives;
-  private final int workerIdleLife;
-  private final int socketReadTimeout;
-  private MinMLSocketServer server = null;
-  private Closure getClosure = null;
-  private Closure headClosure = null;
-  private Closure postClosure = null;
-  private Closure putClosure = null;
-  
-  public HTTPServer(final int minWorkers, final int maxWorkers, final int maxKeepAlives, final int workerIdleLife, final int socketReadTimeout) {
-    this.minWorkers = minWorkers;
-    this.maxWorkers = maxWorkers;
-    this.maxKeepAlives = maxKeepAlives;
-    this.workerIdleLife = workerIdleLife;
-    this.socketReadTimeout = socketReadTimeout;
-  }
-  
-  public HTTPServer() {
-    this(2, 10, 8, 60000, 60000);
-  }
-
-  /* (non-Javadoc)
-   * @see groovy.lang.GroovyObject#setProperty(java.lang.String, java.lang.Object)
-   */
-  public void setProperty(final String property, final Object newValue) {
-    if ("get".equalsIgnoreCase(property) && newValue instanceof Closure) {
-      this.getClosure = (Closure)((Closure)newValue).clone();
-    } else if ("head".equalsIgnoreCase(property) && newValue instanceof Closure) {
-      this.headClosure = (Closure)((Closure)newValue).clone();
-    } else if ("post".equalsIgnoreCase(property) && newValue instanceof Closure) {
-      this.postClosure = (Closure)((Closure)newValue).clone();
-    } else if ("put".equalsIgnoreCase(property) && newValue instanceof Closure) {
-      this.putClosure = (Closure)((Closure)newValue).clone();
-    } else {
-      super.setProperty(property, newValue);
-    }
-  }
-
-  /**
-   * @param serverSocket
-   */
-  public void startServer(final ServerSocket serverSocket) throws IOException {
-      if (this.server != null) stopServer();
-      
-      final MinMLHTTPServer server = new MinMLHTTPServer(serverSocket,
-                                                         this.minWorkers, 
-                                                         this.maxWorkers, 
-                                                         this.maxKeepAlives, 
-                                                         this.workerIdleLife, 
-                                                         this.socketReadTimeout) {
-
-
-        /* (non-Javadoc)
-         * @see uk.co.wilson.net.MinMLThreadPool#makeNewWorker()
-         */
-        protected Worker makeNewWorker() {
-          return new HTTPWorker() {
-            protected void processGet(final InputStream in,
-                                      final OutputStream out,
-                                      final String uri,
-                                      final String version)
-                                        throws Exception
-            {             
-              out.write(version.getBytes());
-              out.write(okMessage);
-              out.write(userAgent);
-              out.write(host);
-              
-              if (HTTPServer.this.getClosure != null) {
-                HTTPServer.this.getClosure.call(new Object[]{in, out, uri, version});
-              }
-            }
-            
-            protected void processHead(final InputStream in,
-                                       final OutputStream out,
-                                       final String uri,
-                                       final String version)
-                                         throws Exception
-            {
-              out.write(version.getBytes());
-              out.write(okMessage);
-              out.write(userAgent);
-              out.write(host);
-              
-              if (HTTPServer.this.headClosure != null) {
-                HTTPServer.this.headClosure.call(new Object[]{in, out, uri, version});
-              }
-            }
-            
-            protected void processPost(final InputStream in,
-                                       final OutputStream out,
-                                       final String uri,
-                                       final String version)
-                                         throws Exception
-            {
-              out.write(version.getBytes());
-              out.write(okMessage);
-              out.write(userAgent);
-              out.write(host);
-              
-              if (HTTPServer.this.postClosure != null) {
-                HTTPServer.this.postClosure.call(new Object[]{in, out, uri, version});
-              }
-            }
-            
-            protected void processPut(final InputStream in,
-                                      final OutputStream out,
-                                      final String uri,
-                                      final String version)
-                                        throws Exception
-            {
-              out.write(version.getBytes());
-              out.write(okMessage);
-              out.write(userAgent);
-              out.write(host);
-              
-              if (HTTPServer.this.putClosure != null) {
-                HTTPServer.this.putClosure.call(new Object[]{in, out, uri, version});
-              }
-            }
-          };
-        }
-      };
-      
-      this.server = server;
-      
-      
-      final Thread startingThread = new Thread() {
-        public void run() {
-          server.start();
-        }
-      };
-      
-      startingThread.setDaemon(false);
-      startingThread.setName("HTTP Server main thread");
-      startingThread.start();
-    }
-
-  /**
-   * Starts the server shutdown process
-   * This will return before the server has shut down completely
-   * Full shutdown may take some time
-   * 
-   * @throws IOException
-   */
-  public void stopServer() throws IOException {
-    this.server.shutDown();
-  }
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCException.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCException.java
deleted file mode 100644
index 64e7951..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCException.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 groovy.net.xmlrpc;
-
-import groovy.lang.GroovyRuntimeException;
-
-/**
- * @author John Wilson
- *
- */
-
-public class JabberRPCException extends GroovyRuntimeException {
-  private static final long serialVersionUID = 1L;
-
-    public JabberRPCException(final String reason) {
-      super(reason);
-    }
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServer.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServer.java
deleted file mode 100644
index b821513..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServer.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-
-Copyright 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.net.xmlrpc;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyRuntimeException;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.jivesoftware.smack.ConnectionListener;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.filter.PacketFilter;
-import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.Presence;
-
-import uk.co.wilson.net.MinMLJabberPacketServer;
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-import uk.co.wilson.smackx.packet.JabberRPC;
-
-/**
- * @author John Wilson
- *
- */
-
-public class JabberRPCServer extends RPCServer {
-  static final String startError = ("<methodResponse>\n" +
-                          "\t<fault>\n" +
-                          "\t\t<value>\n" +
-                          "\t\t\t<struct>\n" +
-                          "\t\t\t\t<member>\n" +
-                          "\t\t\t\t\t<name>faultCode</name>\n" +
-                          "\t\t\t\t\t<value><int>");
-  static final String middleError = ("</int></value>\n" +
-                          "\t\t\t\t</member>\n" +
-                          "\t\t\t\t<member>\n" +
-                          "\t\t\t\t\t<name>faultString</name>\n" +
-                          "\t\t\t\t\t<value><string>");
-  static final String endError = ("</string></value>\n" +
-                        "\t\t\t\t</member>\n" +
-                        "\t\t\t</struct>\n" +
-                        "\t\t</value>\n" +
-                        "\t</fault>\n" +
-                        "</methodResponse>\n");
-  
-  public JabberRPCServer(final int minWorkers,
-                         final int maxWorkers,
-                         final int workerIdleLife)
-  {
-    this.minWorkers = minWorkers;
-    this.maxWorkers = maxWorkers;
-    this.workerIdleLife = workerIdleLife;
-  }
-
-  public JabberRPCServer() {
-    this(2, 10, 60000);
-  }
-  public void startServer(final XMPPConnection connection) throws IOException {
-    this.connection = connection;
-    
-    this.connection.addConnectionListener(new ConnectionListener() {
-                                                public void connectionClosed() {
-                                                  try {
-                                                    JabberRPCServer.this.server.shutDown();
-                                                  } catch (final IOException e) {
-                                                 }
-                                                }
-                                                
-                                                public void connectionClosedOnError(final Exception e) {
-                                                  try {
-                                                    JabberRPCServer.this.server.shutDown();
-                                                  } catch (final IOException e1) {
-                                                  }
-                                                }
-                                              });
-    
-    this.connection.sendPacket(new Presence(Presence.Type.AVAILABLE, "Jabber.RPC Server", 5, Presence.Mode.AVAILABLE));
-    
-    if (this.server != null) stopServer();
-    
-    this.server = new MinMLJabberPacketServer(connection.createPacketCollector(new PacketFilter() {
-                                                    public boolean accept(final Packet packet) {
-                                                      return packet instanceof JabberRPC &&
-                                                      ((JabberRPC)packet).getType() == IQ.Type.SET;
-                                                 }
-                                              }),
-                                              this.minWorkers, 
-                                              this.maxWorkers, 
-                                              this.workerIdleLife) {
-      
-      protected Worker makeNewWorker() {
-        return new JabberPacketWorker() {
-          protected void process(final Object resource) throws Exception {
-          final JabberRPC request = (JabberRPC)resource;
-          final StringBuffer buffer = new StringBuffer();
-          
-            try {
-            final XMLRPCMessageProcessor requestParser = new XMLRPCMessageProcessor();
-              
-              requestParser.parseMessage(request.getChildElementXML());
-            
-              final String methodName = requestParser.getMethodname();
-              final List params = requestParser.getParams();
-              final Closure closure = (Closure)JabberRPCServer.this.registeredMethods.get(methodName);
-              Object result = null;
-              
-              if (JabberRPCServer.this.preCallMethod != null) {
-                JabberRPCServer.this.preCallMethod.call(new Object[] {methodName, params.toArray()});
-              }
-              
-              if (closure == null) {
-                if (JabberRPCServer.this.defaultMethod == null) {
-                  throw new GroovyRuntimeException("Method " + methodName + " is not supported on this server");
-                }
-                
-                result = JabberRPCServer.this.defaultMethod.call(new Object[] {methodName, params.toArray()});
-              } else {
-                result = closure.call(params.toArray());
-              }
-              
-              if (result == null) result = new Integer(0);
-              
-              if (JabberRPCServer.this.postCallMethod != null) {
-                JabberRPCServer.this.postCallMethod.call(new Object[] {methodName, result});
-              }
-              
-              XMLRPCMessageProcessor.emitResult(buffer, result);
-              
-              sendResponse(request, buffer.toString());
-              
-//              System.out.println(buffer.toString());
-            }
-            catch (Throwable e) {
-//            e.printStackTrace();
-            final String message;
-            final int codeValue;
-            
-              if (e instanceof InvokerInvocationException) {
-                e = ((InvokerInvocationException)e).getCause();
-              }
-              
-              if (e instanceof XMLRPCFailException) {
-                message = ((XMLRPCFailException)e).getFaultString();
-                codeValue = ((XMLRPCFailException)e).getFaultCode();
-              } else {
-                message = e.getMessage();
-                codeValue = 0;
-              }
-              
-              if (JabberRPCServer.this.faultMethod != null) {
-                try {
-                  JabberRPCServer.this.faultMethod.call(new Object[] {message, new Integer(codeValue)});
-                }
-                catch (final Throwable e1) {
-                  // swallow this and return the orginal fault
-                }
-              }
-              
-              buffer.setLength(0);
-              buffer.append(startError);
-              buffer.append(String.valueOf(codeValue));
-              buffer.append(middleError);
-              buffer.append((message == null) ? e.getClass().getName() : message);
-              buffer.append(endError);
-              
-              sendResponse(request, buffer.toString());
-            }
-          }
-          
-          private void sendResponse(final JabberRPC request, final String response) {
-          final IQ responsePacket =  new JabberRPC(response.toString());
-          
-            responsePacket.setFrom(request.getTo());
-            responsePacket.setTo(request.getFrom());
-            responsePacket.setPacketID(request.getPacketID());
-            responsePacket.setType(IQ.Type.RESULT);
-            
-            JabberRPCServer.this.connection.sendPacket(responsePacket);
-          }
-        };
-      }
-    };
-    
-    final Thread startingThread = new Thread() {
-      public void run() {
-        JabberRPCServer.this.server.start();
-      }
-    };
-    
-    startingThread.setDaemon(false);
-    startingThread.setName("Jabber-RPC Server main thread");
-    startingThread.start();
-  }
-  
-  public void stopServer() throws IOException {
-    this.server.shutDown();
-  }
-  
-  private XMPPConnection connection;
-  private MinMLJabberPacketServer server = null;
-  
-  private final int minWorkers;
-  private final int maxWorkers;
-  private final int workerIdleLife;
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServerProxy.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServerProxy.java
deleted file mode 100644
index b117a1a..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/JabberRPCServerProxy.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-
-Copyright 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.net.xmlrpc;
-
-import groovy.lang.Closure;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.List;
-
-import org.jivesoftware.smack.PacketCollector;
-import org.jivesoftware.smack.Roster;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.filter.PacketFilter;
-import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smack.packet.Packet;
-import org.jivesoftware.smack.packet.Presence;
-
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-import uk.co.wilson.smackx.packet.JabberRPC;
-
-/**
- * @author John Wilson
- *
- */
-
-public class JabberRPCServerProxy extends RPCServerProxy {
-  public JabberRPCServerProxy(final XMPPConnection connection, final String to) {
-    this.connection = connection;    
-    this.to = to;
-    
-    this.connection.sendPacket(new Presence(Presence.Type.AVAILABLE, "Jabber.RPC Client", 1, Presence.Mode.AVAILABLE));
-  }
-  
-  /* (non-Javadoc)
-   * @see groovy.lang.GroovyObject#invokeMethod(java.lang.String, java.lang.Object)
-   */
-  public Object invokeMethod(final String name, final Object args) {  
-    if ("invokeMethod".equals(name)) return super.invokeMethod(name, args);
-    
-    final Object[] params = (args instanceof List) ? ((List)args).toArray() : (Object[])args;
-    int numberOfparams = params.length;
-    
-      if (numberOfparams != 0 && params[numberOfparams - 1] instanceof Closure) {
-        numberOfparams--; // the closure is not to be passed to the remote method
-      }
-    
-    try {
-    final JabberRPC request = new JabberRPC(XMLRPCMessageProcessor.emitCall(new StringBuffer(), name, params, numberOfparams).toString());
-    final PacketCollector responseCollector = this.connection.createPacketCollector(new PacketFilter() {
-                                                                                        public boolean accept(final Packet packet) {
-                                                                                          return packet instanceof JabberRPC &&
-                                                                                                 ((JabberRPC)packet).getType() == IQ.Type.RESULT &&
-                                                                                                 packet.getPacketID().equals(request.getPacketID());
-                                                                                        }
-                                                                                      });
-    
-      request.setType(IQ.Type.SET);
-      request.setTo(getId(connection.getRoster(), this.to));
-      request.setFrom(this.connection.getUser());
-      this.connection.sendPacket(request);
-      
-      final JabberRPC response = (JabberRPC)responseCollector.nextResult(20000);  // TODO: allow the timeout to be specified
-      
-      responseCollector.cancel();
-      
-      if (response == null) throw new XMLRPCCallFailureException("call timed out", new Integer(0));
-      
-      final XMLRPCMessageProcessor responseParser = new XMLRPCMessageProcessor();
-
-      responseParser.parseMessage(response.getChildElementXML());
-      
-      final List result = responseParser.getParams();
-      
-      if (result == null) throw new XMLRPCCallFailureException("Empty response from server", new Integer(0));
-      
-      if (numberOfparams == params.length) {
-        return result.get(0);
-      } else {  
-        // pass the result of the call to the closure
-        final Closure closure = (Closure)params[numberOfparams];
-        
-        closure.setDelegate(this);
-        return closure.call(new Object[] {result.get(0)});
-      }
-      
-    } catch (final IOException e) {
-      throw new XMLRPCCallFailureException(e.getMessage(), new Integer(0));
-    } catch (final XMLRPCFailException e) {
-      throw new XMLRPCCallFailureException(e.getFaultString(), e.getCause());
-    }
-  }
-  
-  private String getId(final Roster roster, final String to) {
-    int pri;
-    int retries = 20;
-    String posTo = to;
-    
-    do {
-    final Iterator iter = roster.getPresences(to);
-    
-      pri = Integer.MIN_VALUE;
-      
-      if (iter != null) {
-        while(iter.hasNext()) {
-        final Presence presence = (Presence)iter.next();
-        
-          if (presence.getPriority() > pri) {
-            posTo = presence.getFrom();
-            pri = presence.getPriority();
-          }
-        }
-      }
-      
-      if (pri >= 0) break;
-      
-      if (retries-- > 0) {
-        try {
-          Thread.sleep(1000);
-        } catch (final InterruptedException e) {
-        }
-      } else {
-        throw new JabberRPCException("User " + posTo + " not available");
-      }
-    } while (true);
-    
-    return posTo;
-  }
-  
-  private final XMPPConnection connection;
-  private final String to;
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServer.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServer.java
deleted file mode 100644
index 5c1227c..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServer.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
-
-Copyright 2004, 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.net.xmlrpc;
-
-import groovy.lang.Closure;
-import groovy.lang.GString;
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.GroovyRuntimeException;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-
-/**
- * @author John Wilson
- *
- */
-
-public class RPCServer extends GroovyObjectSupport {
-  protected final Map registeredMethods = Collections.synchronizedMap(new HashMap());
-  protected Closure defaultMethod = null;
-  protected Closure preCallMethod = null;
-  protected Closure postCallMethod = null;
-  protected Closure faultMethod = null;
-
-  public Object getProperty(final String property) {
-  	return new GroovyObjectSupport() {
-  		/**
-  		 * 
-  		 * Allow server.a.b.c = {....}
-  		 * This deefines a remote method with the name "a.b.c"
-  		 * This technique is shamelessly stolen from the Python XML-RPC implementation
-  		 * Thanks and credit to Fredrik Lundh
-  		 * 
-  		 */
-  				
-  		private final StringBuffer propertyPrefix = new StringBuffer(property + ".");
-  	
-  		public Object getProperty(final String property) {
-  			this.propertyPrefix.append(property).append('.');
-  			
-  			return this;
-  		}
-  		
-  		public void setProperty(final String name, final Object args) {
-  			RPCServer.this.setProperty(this.propertyPrefix + name, name, args);
-  		}
-  	};
-  }
-
-  public void setProperty(final String methodName, final Object method) {
-  	setProperty(methodName, methodName, method);
-  }
-
-  private void setProperty(final String methodName, final String javaMethodName, final Object method) {
-  Closure closure = null;
-  
-  	if (method instanceof Closure) {
-  		//
-  		// This malarky with the CloneNotSupportedException is to keep the broken sun
-  		// java compiler from barfing
-  		//
-  		try {
-  			if (false) throw new CloneNotSupportedException();
-  			closure = (Closure)(((Closure)method).clone());
-  			closure.setDelegate(this);
-  		}
-  		catch (final CloneNotSupportedException e) {
-  			// never thrown
-  		}
-  	} else if (method instanceof Class) {
-  	//
-  	// calling a static method on a class
-  	//
-  		
-  	final int numberofParameters = getNumberOfParameters(Modifier.PUBLIC | Modifier.STATIC, ((Class)method).getMethods(), javaMethodName);			
-  	
-  		if (numberofParameters != -1) {
-  			closure = makeMethodProxy(javaMethodName, numberofParameters, ((Class)method).getName());
-  		} else {
-  			throw new GroovyRuntimeException("No static method "
-  					                         + javaMethodName
-  										    + " on class "
-  											+ ((Class)method).getName());
-  		}
-  	} else {
-  	//
-  	// calling a method on an instance of a class
-  	//
-  		
-  	final int numberofParameters = getNumberOfParameters(Modifier.PUBLIC, method.getClass().getMethods(), javaMethodName);			
-  	
-  		if (numberofParameters != -1) {
-  			closure = makeMethodProxy(javaMethodName, numberofParameters, "delegate");
-  			closure.setDelegate(method);
-  		} else {
-  			throw new GroovyRuntimeException("No method "
-                        + javaMethodName
-  				    + " on class "
-  					+ method.getClass().getName());
-  		}
-  	}
-  	
-  	this.registeredMethods.put(methodName, closure);
-  }
-
-  private int getNumberOfParameters(final int type, final Method methods[], final String property) {
-  boolean foundMatch = false;
-  int numberofParameters = -1;
-  
-  	for (int i = 0; i != methods.length; i++) {
-  		if ((methods[i].getModifiers() & type) == type) {
-  			if (methods[i].getName().equals(property)) {
-  				if (foundMatch) {
-  					if (numberofParameters != methods[i].getParameterTypes().length) {
-  						throw new GroovyRuntimeException("More than one methods "
-  		                        + property
-  							    + " on class "
-  								+ methods[i].getDeclaringClass().getName()
-  								+ " with different numbers of parameters");
-  					}
-  				} else {
-  					foundMatch = true;
-  					numberofParameters = methods[i].getParameterTypes().length;
-  				}
-  			}
-  		}
-  	}
-  	
-  	return numberofParameters;
-  }
-
-  private Closure makeMethodProxy(final String methodName, final int numberOfParameters, final String qualifier) {
-  final String paramIn, paramOut;
-  
-  	if (numberOfParameters == 0) {
-  		paramIn = paramOut = "";
-  	} else {
-  	final StringBuffer params = new StringBuffer();
-  	
-  		for (int i = 0; i != numberOfParameters; i++) {
-  			params.append(", p" + i);
-  		}
-  		
-  		paramOut = params.delete(0, 2).toString();
-  		paramIn = paramOut + " -> ";
-  	}
-  	
-  final String generatedCode = "class X { public def closure = {" + paramIn + " " + qualifier + "." + methodName + "(" + paramOut + ") }}";
-  //     System.out.println(generatedCode);
-  
-  	try {
-  	final InputStream in = new ByteArrayInputStream(generatedCode.getBytes());
-  	final GroovyObject groovyObject = (GroovyObject)new GroovyClassLoader().parseClass(in, methodName).newInstance();
-  		
-  		return (Closure)(groovyObject.getProperty("closure"));
-  	} catch (Exception e) {
-  		throw new GroovyRuntimeException("Can't generate proxy for XML-RPC method " + methodName, e);
-  	}
-  }
-
-  /**
-   * 
-   * Convenience method to be called by closures executing remote calls
-   * Called when the closure wants to return a fault
-   * The method always throws an exception
-   * 
-   * @param msg Fault message to be returned to the caller
-   * @param code Fault code to be returned to the caller
-   */
-  public void returnFault(String msg, int code) throws XMLRPCFailException {
-  	throw new XMLRPCFailException(msg, code);
-  }
-
-  /**
-   * 
-   * Convenience method to be called by closures executing remote calls
-   * Called when the closure wants to return a fault
-   * The method always throws an exception
-   * 
-   * @param msg Fault message to be returned to the caller
-   * @param code Fault code to be returned to the caller
-   */
-  public void returnFault(GString msg, int code) throws XMLRPCFailException {
-  	returnFault(msg.toString(), code);	// sometimes Groovy doesn't do the cconversion to String 
-  }
-
-  /**
-   * Supply a closure to be called if there is no closure supplied to handle the call
-   * Typically this logs the bad call and returns a fault by calling returnFault
-   * 
-   * The closure is called with two parameters - a String containing the method
-   * name and an array of Object containing the parameters
-   * 
-   * @param defaultMethod The closure to be called - if this is null the setting is not changed
-   */
-  public void setupDefaultMethod(final Closure defaultMethod) {
-  	if (defaultMethod != null) this.defaultMethod = defaultMethod;
-  }
-
-  /**
-   * Supply a closure to be called before the closure which handles the remote call
-   *  (or the default closure if there is no handler) is called.
-   * 
-   * The closure is called with two parameters - a String containing the method
-   * name and an array of Object containing the parameters
-   * 
-   * @param preCallMethod The closure to be called - if this is null the setting is not changed
-   */
-  public void setupPreCallMethod(final Closure preCallMethod) {
-  	if (preCallMethod != null) this.preCallMethod = preCallMethod;
-  }
-
-  /**
-   * Supply a closure to be called after the closure which handles the remote call
-   *  (or the default closure if there is no handler) is called.
-   * 
-   * The closure is called with two parameters - a String containing the method
-   * name and an Object containing the result
-   * 
-   * @param postCallMethod The closure to be called - if this is null the setting is not changed
-   */
-  public void setupPostCallMethod(final Closure postCallMethod) {
-  	if (postCallMethod != null) this.postCallMethod = postCallMethod;
-  }
-
-  /**
-   * Supply a closure to be called if the process of executing the remote call throws an exception.
-   * 
-   * The closure is called with two parameters - a String containing the fault string
-   * name and an Integer containing the fault value.
-   * The name of the method being called is not passed as the fault could have been 
-   * generated before the method name was known.
-   * 
-   * @param faultMethod The closure to be called - if this is null the setting is not changed
-   */
-  public void setupFaultMethod(final Closure faultMethod) {
-  	if (faultMethod != null) this.faultMethod = faultMethod;
-  }
-
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServerProxy.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServerProxy.java
deleted file mode 100644
index 34d453e..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/RPCServerProxy.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-
-Copyright 2004, 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.net.xmlrpc;
-
-import groovy.lang.GroovyInterceptable;
-import groovy.lang.GroovyObjectSupport;
-
-/**
- * @author John Wilson
- *
- */
-
-public class RPCServerProxy extends GroovyObjectSupport implements GroovyInterceptable {
-
-  public Object getProperty(final String property) {
-  	return new GroovyObjectSupport() {
-  		/**
-  		 * 
-  		 * Allow serverProxy.a.b.c(...)
-  		 * This invokes a remote method with the name "a.b.c"
-  		 * This technique is shamelessly stolen from the Python XML-RPC implementation
-  		 * Thanks and credit to Fredrik Lundh
-  		 * 
-  		 */
-  				
-  		private final StringBuffer propertyPrefix = new StringBuffer(property + ".");
-  	
-  		public Object getProperty(final String property) {
-  			this.propertyPrefix.append(property).append('.');
-  			
-  			return this;
-  		}
-  		
-  		public Object invokeMethod(final String name, final Object args) {
-  			return RPCServerProxy.this.invokeMethod(this.propertyPrefix + name, args);
-  		}
-  	};
-  }
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCCallFailureException.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCCallFailureException.java
deleted file mode 100644
index 37b913d..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCCallFailureException.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package groovy.net.xmlrpc;
-
-import groovy.lang.GroovyRuntimeException;
-/*
-
-Copyright 2004 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-public class XMLRPCCallFailureException extends GroovyRuntimeException {
-  private static final long serialVersionUID = 1L;
-  
-  private final Object faultString;
-	private final Object faultCode;
-	
-	public XMLRPCCallFailureException(final Object faultString, final Object faultCode) {
-		super("XML-RPC call Failure: fault string = \"" + faultString + "\", fault code = " + faultCode);
-		
-		this.faultString = faultString;
-		this.faultCode = faultCode;
-		
-	}
-	
-	public Object getFaultCode() {
-		return faultCode;
-	}
-	
-	public Object getFaultString() {
-		return faultString;
-	}
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCMessageProcessor.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCMessageProcessor.java
deleted file mode 100644
index a77a744..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCMessageProcessor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-
-Copyright 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-package groovy.net.xmlrpc;
-
-import groovy.lang.GString;
-
-public class XMLRPCMessageProcessor extends uk.co.wilson.net.xmlrpc.XMLRPCMessageProcessor {
-  static {
-    elements.put(GString.class, elements.get(String.class));
-  }
-}
\ No newline at end of file
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServer.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServer.java
deleted file mode 100644
index a57d007..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServer.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
-
-Copyright 2004, 2005 (C) John Wilson. All Rights Reserved.
-
-Redistribution and use of this software and associated documentation
-("Software"), with or without modification, are permitted provided
-that the following conditions are met:
-
-1. Redistributions of source code must retain copyright
-   statements and notices.  Redistributions must also contain a
-   copy of this document.
-
-2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-   products derived from this Software without prior written
-   permission of The Codehaus.  For written permission,
-   please contact info@codehaus.org.
-
-4. Products derived from this Software may not be called "groovy"
-   nor may "groovy" appear in their names without prior written
-   permission of The Codehaus. "groovy" is a registered
-   trademark of The Codehaus.
-
-5. Due credit should be given to The Codehaus -
-   http://groovy.codehaus.org/
-
-THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
-``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 CODEHAUS 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.
-
-*/
-
-package groovy.net.xmlrpc;
-
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyRuntimeException;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.ServerSocket;
-import java.util.List;
-
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-
-import uk.co.wilson.net.MinMLSocketServer;
-import uk.co.wilson.net.http.MinMLHTTPServer;
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-
-/**
-* @author John Wilson (tug@wilson.co.uk)
-*
-*/
-public class XMLRPCServer extends RPCServer {
-private byte[] base64 = new byte[600];
-{
-	for (int i = 0; i != this.base64.length; i++) {
-		this.base64[i] = (byte)i;
-	}
-}
-public byte[] getBase64() { return this.base64;} // bodge to allow testing  
-  protected static final String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
-  protected static final byte[] userAgent = "User-Agent: Groovy XML-RPC\r\n".getBytes();
-  protected static final byte[] contentTypeXML = "Content-Type: text/xml\r\n".getBytes();
-  protected static final byte[] contentLength = "Content-Length: ".getBytes();
-  
-  protected MinMLSocketServer server = null; 
-  protected final int minWorkers;
-  protected final int maxWorkers;
-  protected final int maxKeepAlives;
-  protected final int workerIdleLife;
-  protected final int socketReadTimeout;
-
-	/**
-	 * @param minWorkers
-	 * @param maxWorkers
-	 * @param maxKeepAlives
-	 * @param workerIdleLife
-	 * @param socketReadTimeout
-	 */
-	public XMLRPCServer(final int minWorkers,
-						final int maxWorkers,
-						final int maxKeepAlives,
-						final int workerIdleLife,
-						final int socketReadTimeout)
-	{
-		this.minWorkers = minWorkers;
-		this.maxWorkers = maxWorkers;
-		this.maxKeepAlives = maxKeepAlives;
-		this.workerIdleLife = workerIdleLife;
-		this.socketReadTimeout = socketReadTimeout;
-	}
-	
-	/**
-	 * 
-	 */
-	public XMLRPCServer() {
-		this(2, 10, 8, 60000, 60000);
-	}
-
-  /**
-   * @param serverSocket
-   */
-  public void startServer(final ServerSocket serverSocket) throws IOException {
-      if (this.server != null) stopServer();
-      
-      final MinMLHTTPServer server = new MinMLHTTPServer(serverSocket,
-                                                         this.minWorkers, 
-                                                         this.maxWorkers, 
-                                                         this.maxKeepAlives, 
-                                                         this.workerIdleLife, 
-                                                         this.socketReadTimeout) {
-
-        /* (non-Javadoc)
-         * @see uk.co.wilson.net.MinMLSocketServer#makeNewWorker()
-         */
-        protected Worker makeNewWorker() {
-          return new HTTPWorker() {
-            protected void processPost(final InputStream in,
-                                       final OutputStream out,
-                                       final String uri,
-                                       final String version)
-                          throws Exception
-            {
-              
-              try {
-              final XMLRPCMessageProcessor requestParser = new XMLRPCMessageProcessor();
-                
-                out.write(version.getBytes());
-                out.write(okMessage);
-                out.write(userAgent);
-                out.write(host);
-                out.write(contentTypeXML);
-                writeKeepAlive(out);
-                out.write(contentLength);
-                
-                requestParser.parseMessage(in);
-                
-                final String methodName = requestParser.getMethodname();
-                final List params = requestParser.getParams();
-                final Closure closure = (Closure)XMLRPCServer.this.registeredMethods.get(methodName);
-                Object result = null;
-                
-                if (XMLRPCServer.this.preCallMethod != null) {
-                  XMLRPCServer.this.preCallMethod.call(new Object[] {methodName, params.toArray()});
-                }
-                
-                if (closure == null) {
-                  if (XMLRPCServer.this.defaultMethod == null) {
-                    throw new GroovyRuntimeException("Method " + methodName + " is not supported on this server");
-                  }
-                  
-                  result = XMLRPCServer.this.defaultMethod.call(new Object[] {methodName, params.toArray()});
-                } else {
-                  result = closure.call(params.toArray());
-                }
-                
-                if (result == null) result = new Integer(0);
-                
-                if (XMLRPCServer.this.postCallMethod != null) {
-                  XMLRPCServer.this.postCallMethod.call(new Object[] {methodName, result});
-                }
-                                
-                final byte[] response = XMLRPCMessageProcessor.emitResult(new StringBuffer(xmlDeclaration), result).toString().getBytes("ISO-8859-1");
-                
-                out.write(String.valueOf(response.length).getBytes());
-                out.write(endOfLine);
-                out.write(endOfLine);
-                out.write(response);
-              }
-              catch (Throwable e) {
-//              e.printStackTrace();
-              final String message;
-              final int codeValue;
-              
-                if (e instanceof InvokerInvocationException) {
-                  e = ((InvokerInvocationException)e).getCause();
-                }
-                
-                if (e instanceof XMLRPCFailException) {
-                  message = ((XMLRPCFailException)e).getFaultString();
-                  codeValue = ((XMLRPCFailException)e).getFaultCode();
-                } else {
-                  message = e.getMessage();
-                  codeValue = 0;
-                }
-                
-                if (XMLRPCServer.this.faultMethod != null) {
-                  try {
-                    XMLRPCServer.this.faultMethod.call(new Object[] {message, new Integer(codeValue)});
-                  }
-                  catch (final Throwable e1) {
-                    // swallow this and return the orginal fault
-                  }
-                }
-                
-                final byte[] error = XMLRPCMessageProcessor.emitError(new StringBuffer(xmlDeclaration),
-                                                                      codeValue,
-                                                                      (message == null) ? e.getClass().getName() : message).toString().getBytes("ISO-8859-1");
-               
-                out.write(String.valueOf(error.length).getBytes());
-                out.write(endOfLine);
-                out.write(endOfLine);
-                out.write(error);
-              }
-            }
-          };
-        }
-      };
-      
-      this.server = server;
-      
-      
-      final Thread startingThread = new Thread() {
-        public void run() {
-          server.start();
-        }
-      };
-      
-      startingThread.setDaemon(false);
-      startingThread.setName("XML-RPC Server main thread");
-      startingThread.start();
-    }
-
-  /**
-   * Starts the server shutdown process
-   * This will return before the server has shut down completely
-   * Full shutdown may take some time
-   * 
-   * @throws IOException
-   */
-  public void stopServer() throws IOException {
-    this.server.shutDown();
-  }
-}
diff --git a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServerProxy.java b/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServerProxy.java
deleted file mode 100644
index befad7b..0000000
--- a/groovy/modules/xmlrpc/src/main/groovy/net/xmlrpc/XMLRPCServerProxy.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-
- Copyright 2004, 2005 (C) John Wilson. All Rights Reserved.
-
- Redistribution and use of this software and associated documentation
- ("Software"), with or without modification, are permitted provided
- that the following conditions are met:
-
- 1. Redistributions of source code must retain copyright
-    statements and notices.  Redistributions must also contain a
-    copy of this document.
-
- 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote
-    products derived from this Software without prior written
-    permission of The Codehaus.  For written permission,
-    please contact info@codehaus.org.
-
- 4. Products derived from this Software may not be called "groovy"
-    nor may "groovy" appear in their names without prior written
-    permission of The Codehaus. "groovy" is a registered
-    trademark of The Codehaus.
-
- 5. Due credit should be given to The Codehaus -
-    http://groovy.codehaus.org/
-
- THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS
- ``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 CODEHAUS 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.
-
- */
-
-package groovy.net.xmlrpc;
-
-import groovy.lang.Closure;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.List;
-
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-
-/**
- * @author John Wilson (tug@wilson.co.uk)
- */
-public class XMLRPCServerProxy extends RPCServerProxy {
-  static final String xmlDeclaration = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
-	private URL serverURL;
-	
-	public XMLRPCServerProxy(final String serverURL) throws MalformedURLException {
-		this.serverURL = new URL(serverURL);
-	}
-	
-	/* (non-Javadoc)
-	 * @see groovy.lang.GroovyObject#invokeMethod(java.lang.String, java.lang.Object)
-	 */
-	public Object invokeMethod(final String name, final Object args) {	
-		if ("invokeMethod".equals(name)) return super.invokeMethod(name, args);
-    
-    final Object[] params = (args instanceof List) ? ((List)args).toArray() : (Object[])args;
-    int numberOfParams = params.length;
-    
-      if (numberOfParams != 0 && params[numberOfParams - 1] instanceof Closure) {
-        numberOfParams--; // the closure is not to be passed to the remote method
-      }
-		
-		try {
-    final byte [] request = XMLRPCMessageProcessor.emitCall(new StringBuffer(xmlDeclaration), name, params, numberOfParams).toString().getBytes("ISO-8859-1");
-		final URLConnection connection = this.serverURL.openConnection();
-			
-			connection.setDoInput(true);
-			connection.setDoOutput(true);
-			connection.setUseCaches(false);
-			connection.setAllowUserInteraction(false);
-			connection.setRequestProperty("Content-Length", Integer.toString(request.length));
-			connection.setRequestProperty("Content-Type", "text/xml");
-			
-			final OutputStream requestStream = connection.getOutputStream();
-			requestStream.write(request);
-			requestStream.flush();
-			requestStream.close();
-			
-			final XMLRPCMessageProcessor responseParser = new XMLRPCMessageProcessor();
-			
-			try {
-				responseParser.parseMessage(connection.getInputStream());
-			}
-			catch (final XMLRPCFailException e) {
-//				e.printStackTrace();
-				throw new XMLRPCCallFailureException(e.getFaultString(), new Integer(e.getFaultCode()));
-			}
-			
-			final List response = responseParser.getParams();
-			
-			if (response == null) throw new XMLRPCCallFailureException("Empty response from server", new Integer(0));
-			
-			if (numberOfParams == params.length) {
-				return response.get(0);
-			} else {	
-				// pass the result of the call to the closure
-				final Closure closure = (Closure)params[numberOfParams];
-				
-				closure.setDelegate(this);
-				return closure.call(new Object[] {response.get(0)});
-			}
-			
-		} catch (final IOException e) {
-			throw new XMLRPCCallFailureException(e.getMessage(), new Integer(0));
-		} catch (final XMLRPCFailException e) {
-      throw new XMLRPCCallFailureException(e.getFaultString(), e.getCause());
-    }
-	}
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLJabberPacketServer.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLJabberPacketServer.java
deleted file mode 100644
index 525cce7..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLJabberPacketServer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net;
-
-import java.io.IOException;
-
-import org.jivesoftware.smack.PacketCollector;
-
-/**
- * @author John Wilson
- *
- */
-
-public abstract class MinMLJabberPacketServer  extends MinMLThreadPool {
-    public MinMLJabberPacketServer(final PacketCollector packetCollector,
-                                   final int minWorkers,
-                                   final int maxWorkers,
-                                   final int workerIdleLife)
-            {
-              super(minWorkers, maxWorkers, workerIdleLife);
-              this.packetCollector = packetCollector;
-            }
-
-    /* (non-Javadoc)
-     * @see uk.co.wilson.net.MinMLThreadPool#shutDown()
-     */
-    public void shutDown() throws IOException {
-      this.serverActive = false;
-        this.packetCollector.cancel();
-    }
-
-    /* (non-Javadoc)
-     * @see uk.co.wilson.net.MinMLThreadPool#setTimeout(int)
-     */
-    protected void setTimeout(int timeout) {
-        this.timeout = timeout;
-        
-    }
-    protected abstract class JabberPacketWorker extends Worker {
-        protected Object getResource() throws IOException {
-        final Object result = MinMLJabberPacketServer.this.packetCollector.nextResult(MinMLJabberPacketServer.this.timeout);
-        
-          if (result == null) throw new IOException("packet read timed out");
-          
-          return result;
-        }
-        
-        protected void dispose(Object resource) throws IOException {
-            // No action needed
-        }
-    }
-    
-    private final PacketCollector packetCollector;
-    private long timeout = this.workerIdleLife;
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLSocketServer.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLSocketServer.java
deleted file mode 100644
index 8e11b80..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLSocketServer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2001, 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.SocketException;
-
-public abstract class MinMLSocketServer extends MinMLThreadPool {
-  public MinMLSocketServer(final ServerSocket serverSocket,
-                           final int minWorkers,
-                           final int maxWorkers,
-                           final int workerIdleLife)
-  {
-    super(minWorkers, maxWorkers, workerIdleLife);
-    this.serverSocket = serverSocket;
-  }
-
-  public synchronized void shutDown() throws IOException {
-    this.serverActive = false;
-    this.serverSocket.close();
-  }
-
-  public int getPortNumber() {
-    return this.serverSocket.getLocalPort();
-  }
-
-  protected void setTimeout(final int timeout) {
-    try {
-      this.serverSocket.setSoTimeout(timeout);
-    }
-    catch (final SocketException e) {
-    }
-  }
-  protected abstract class ServerSocketWorker extends Worker {
-      protected Object getResource() throws IOException {
-          return MinMLSocketServer.this.serverSocket.accept();
-      }
-      
-      protected void dispose(Object resource) throws IOException {
-          ((Socket)resource).close();
-      }
-  }
-
-  private final ServerSocket serverSocket;
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLThreadPool.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLThreadPool.java
deleted file mode 100644
index 958fda1..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/MinMLThreadPool.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net;
-
-import java.io.IOException;
-import java.io.InterruptedIOException;
-
-public abstract class MinMLThreadPool {
-    public MinMLThreadPool(final int minWorkers,
-                           final int maxWorkers,
-                           final int workerIdleLife)
-    {
-        this.minWorkers = Math.max(minWorkers, 1);
-        this.maxWorkers = Math.max(this.minWorkers, maxWorkers);
-        this.workerIdleLife = workerIdleLife;
-    }
-
-    public void start() {
-      getNewWorker().run();
-    }
-
-    public abstract void shutDown() throws IOException;
-
-    protected abstract Worker makeNewWorker();
-    
-    protected abstract void setTimeout(int timeout);
-
-    private Worker getNewWorker() {
-      if (debug) System.out.println("Starting new thread: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-      
-      if (this.liveWorkerCount++ == this.minWorkers)
-        setTimeout(this.workerIdleLife);
-
-      return makeNewWorker();
-    }
-
-    private synchronized void startWork() {
-      if (debug) System.out.println("Thread starting work: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-     if (++this.workingWorkerCount == this.liveWorkerCount && this.liveWorkerCount < this.maxWorkers) {
-      final Thread workerThread = new Thread(getNewWorker());
-      
-        workerThread.setDaemon(false);
-        workerThread.setName("Thread Pool worker thread");
-        workerThread.start();
-      }
-
-      if (debug) System.out.println("Thread started work: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-    }
-
-    private synchronized void endWork() {
-      this.workingWorkerCount--;
-      
-      if (debug) System.out.println("Thread ending work: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-    }
-
-    private synchronized boolean workerMustDie() {
-      if (debug) System.out.println("Thread timing out socket read: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-      
-      if (this.liveWorkerCount > this.minWorkers && this.liveWorkerCount != this.workingWorkerCount + 1) {
-        if (debug) System.out.println("Thread commits suicide");
-        
-        workerDies();
-
-        return true;
-      }
-
-      return false;
-    }
-
-    private synchronized void workerDies() {
-      if (--this.liveWorkerCount == this.minWorkers) {
-        setTimeout(0);
-      }
-      
-      if (debug) System.out.println("Thread dying: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);
-      
-      if (this.serverActive && this.liveWorkerCount < this.minWorkers) { 
-        new Thread(getNewWorker()).start();
-        
-        if (debug) System.out.println("Creating replacement thread: liveWorkerCount = " + this.liveWorkerCount + " workingWorkerCount = " + this.workingWorkerCount);        
-      }
-    }
-
-    protected abstract class Worker implements Runnable {
-      public final void run() {
-        try {
-          while (true) {
-          final Object resource;
-
-            try {
-              resource = getResource();
-
-              try {
-                try {
-                  MinMLThreadPool.this.startWork();
-
-                  Thread.yield(); // let a blocked worker thread do an accept()
-
-                  process(resource);
-                }
-                catch (final Exception e) {
-                  processingException(e);
-                }
-              }
-              finally {
-                try {
-                  dispose(resource);
-                }
-                catch (final IOException e) {
-                  if (debug) {
-                    System.out.println("Exception thrown when closing socket: " + e.toString());
-                    e.printStackTrace();
-                  }
-                }
-                finally {
-                    MinMLThreadPool.this.endWork();
-                }
-              }
-            }
-            catch (final InterruptedIOException e) {
-              if (MinMLThreadPool.this.workerMustDie()) return;
-            }
-          }
-        }
-        catch (final Exception e) {
-          operatingException(e);
-                  
-          if (debug) {
-            System.out.println("Thread dying due to Exception: " + e.toString());
-            e.printStackTrace();
-          }
-        
-          MinMLThreadPool.this.workerDies();
-        }
-      }
-
-      protected void processingException(final Exception e) {
-      }
-
-      protected void operatingException(final Exception e) {
-      }
-
-      protected abstract Object getResource() throws Exception;
-      protected abstract void dispose(Object resource) throws Exception;
-      protected abstract void process(Object resource) throws Exception;
-    }
-    
-    protected final int minWorkers;
-    protected final int maxWorkers;
-    protected final int workerIdleLife;
-    protected boolean serverActive = true;
-    private int liveWorkerCount = 0;
-    private int workingWorkerCount = 0;
-
-    protected static final boolean debug = false;
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/http/MinMLHTTPServer.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/http/MinMLHTTPServer.java
deleted file mode 100644
index d456ad1..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/http/MinMLHTTPServer.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright 2001, 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net.http;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.net.UnknownHostException;
-import java.util.StringTokenizer;
-
-import uk.co.wilson.net.MinMLSocketServer;
-
-public abstract class MinMLHTTPServer extends MinMLSocketServer {
-
-  protected static byte[] host;
-  static {
-    try {
-      host  = ("Host: " + InetAddress.getLocalHost().getHostName() +"\r\n").getBytes();
-    } catch (UnknownHostException e) {
-      host = "Host: unknown\r\n ".getBytes();
-    }
-  }
-  public MinMLHTTPServer(final ServerSocket serverSocket,
-                         final int minWorkers,
-                         final int maxWorkers,
-                         final int maxKeepAlives,
-                         final int workerIdleLife,
-                         final int socketReadTimeout)
-  {
-    super(serverSocket, minWorkers, maxWorkers, workerIdleLife);
-
-    this.maxKeepAlives = maxKeepAlives;
-    this.socketReadTimeout = socketReadTimeout;
-  }
-
-  private synchronized boolean startKeepAlive() {
-   if (this.keepAliveCount < this.maxKeepAlives) {
-      MinMLHTTPServer.this.keepAliveCount++;
-
-      return true;
-    }
-
-    return false;
-  }
-
-  private synchronized void endKeepAlive() {
-    this.keepAliveCount--;
-  }
-
-  private static class LimitedInputStream extends InputStream {
-    public LimitedInputStream(final InputStream in, final int contentLength) {
-      this.in = in;
-      this.contentLength = contentLength;
-    }
-
-    public int available() throws IOException {
-      return Math.min(this.in.available(), this.contentLength);
-    }
-
-    public void close() throws IOException {
-      //
-      // Don't close the input stream as there is more data
-      // but skip past any unread data in this section
-      //
-
-      skip(this.contentLength);
-    }
-
-    public int read() throws IOException {
-      if (this.contentLength == 0) return -1;
-
-      this.contentLength--;
-
-      return this.in.read();
-    }
-
-    public int read(final byte[] buffer) throws IOException {
-      return read(buffer, 0, buffer.length);
-     }
-
-    public int read(final byte[] buffer, final int offset, int length) throws IOException {
-      if (this.contentLength == 0) return -1;
-
-      length = this.in.read(buffer, offset, Math.min(length, this.contentLength));
-
-      if (length != -1) this.contentLength -= length;
-
-      return length;
-    }
-
-    public long skip(long count) throws IOException {
-      count = Math.min(count, this.contentLength);
-
-      this.contentLength -= count;
-
-      return this.in.skip(count);
-     }
-
-     private int contentLength;
-     private final InputStream in;
-  }
-
-  protected abstract class HTTPWorker extends ServerSocketWorker {
-    protected final void process(final Object resource) throws Exception {
-    final Socket socket = (Socket)resource;
-    
-      try {
-        socket.setSoTimeout(MinMLHTTPServer.this.socketReadTimeout);
-
-        final InputStream in = new BufferedInputStream(socket.getInputStream());
-        final OutputStream out = new BufferedOutputStream(socket.getOutputStream());
-        int contentLength;
-
-        do {
-          contentLength = -1;
-
-          while (readLine(in) != -1 && this.count == 0);  // skip any leading blank lines
-          final StringTokenizer toks = new StringTokenizer(new String(this.buf, 0, this.count));
-          final String method = toks.nextToken();
-          final String uri = toks.nextToken();
-          final String version = toks.hasMoreTokens() ? toks.nextToken() : "";
-
-          while (readLine(in) != -1 && this.count != 0) {
-          final String option = new String(this.buf, 0, this.count).trim().toLowerCase();
-
-            if (option.startsWith("connection:")) {
-              if (option.endsWith("keep-alive")) {
-                if (!this.keepAlive)
-                  this.keepAlive = MinMLHTTPServer.this.startKeepAlive();
-              } else if (this.keepAlive) {
-                  MinMLHTTPServer.this.endKeepAlive();
-                  this.keepAlive = false;
-              }
-            } else if (option.startsWith("content-length:")) {
-              contentLength = Integer.parseInt(option.substring(15).trim());
-              //
-              // This can throw NumberFormatException
-              // In which case we will abort the transaction
-              //
-            }
-          }
-
-          if (contentLength == -1) {
-            processMethod(in, out, method, uri, version);
-          } else {
-          final InputStream limitedIn = new LimitedInputStream(in, contentLength);
-
-            processMethod(limitedIn, out, method, uri, version);
-
-            limitedIn.close();  // skips unread bytes
-          }
-
-          out.flush();
-
-        } while(contentLength != -1 && this.keepAlive);
-      }
-      finally {
-        if (this.keepAlive == true) {
-          MinMLHTTPServer.this.endKeepAlive();
-          this.keepAlive = false;
-        }
-      }
-    }
-
-    protected void processMethod(final InputStream in,
-                                 final OutputStream out,
-                                 final String method,
-                                 final String uri,
-                                 final String version)
-    throws Exception
-    {
-      if (method.equalsIgnoreCase("GET"))
-        processGet(in, out, uri, version);
-      else if (method.equalsIgnoreCase("HEAD"))
-        processHead(in, out, uri, version);
-      else if (method.equalsIgnoreCase("POST"))
-        processPost(in, out, uri, version);
-      else if (method.equalsIgnoreCase("PUT"))
-        processPut(in, out, uri, version);
-      else
-        processOther(in, out, method, uri, version);
-    }
-
-    protected void processGet(final InputStream in,
-                              final OutputStream out,
-                              final String uri,
-                              final String version)
-      throws Exception
-    {
-      out.write(version.getBytes());
-      out.write(errorMessage1);
-      out.write(get);
-      out.write(errorMessage2);
-    }
-
-    protected void processHead(final InputStream in,
-                               final OutputStream out,
-                               final String uri,
-                               final String version)
-      throws Exception
-    {
-      out.write(version.getBytes());
-      out.write(errorMessage1);
-      out.write(head);
-      out.write(errorMessage2);
-    }
-
-    protected void processPost(final InputStream in,
-                               final OutputStream out,
-                               final String uri,
-                               final String version)
-      throws Exception
-    {
-      out.write(version.getBytes());
-      out.write(errorMessage1);
-      out.write(post);
-      out.write(errorMessage2);
-    }
-
-    protected void processPut(final InputStream in,
-                              final OutputStream out,
-                              final String uri,
-                              final String version)
-      throws Exception
-    {
-      out.write(version.getBytes());
-      out.write(errorMessage1);
-      out.write(put);
-      out.write(errorMessage2);
-    }
-
-    protected void processOther(final InputStream in,
-                                final OutputStream out,
-                                final String method,
-                                final String uri,
-                                final String version)
-      throws Exception
-    {
-      out.write(version.getBytes());
-      out.write(errorMessage1);
-      out.write(method.getBytes());
-      out.write(errorMessage2);
-    }
-
-    protected void writeKeepAlive(final OutputStream res) throws IOException {
-      res.write(this.keepAlive ? keepConnection : closeConnection);
-    }
-
-    private int readLine(final InputStream in) throws IOException {
-    int nextByte;
-
-      this.count = 0;
-
-      while (!((nextByte = in.read()) == '\r' && (nextByte = in.read()) =='\n') && nextByte != -1) {
-      	this.buf[this.count] = (byte)nextByte;
-
-        if (this.count != this.buf.length - 1) this.count++;   // sort of crude should probably handle long lines better
-      }
-
-      return nextByte;
-    }
-
-    private final byte[] buf = new byte[256];
-    private int count = 0;
-    private boolean keepAlive = false;
-  }
-
-  private int keepAliveCount = 0;
-  protected final int maxKeepAlives;
-  protected final int socketReadTimeout;
-
-  protected static final byte[] okMessage = (" 200 OK \r\n"
-                                             + "Server: uk.co.wilson.net.http.HTTPServer\r\n").getBytes();
-
-  protected static final byte[] endOfLine = "\r\n".getBytes();
-  
-  static final byte[] get = "GET".getBytes();
-  static final byte[] head = "HEAD".getBytes();
-  static final byte[] post = "POST".getBytes();
-  static final byte[] put = "PUT".getBytes();
-  static final byte[] errorMessage1 = (" 400 Bad Request\r\n"
-                                                 + "Server: uk.co.wilson.net.http.HTTPServer\r\n\r\n"
-                                                 + "Method ").getBytes();
-
-  static final byte[] errorMessage2 = " not implemented\r\n".getBytes();
-  static final byte[] keepConnection = "Connection: Keep-Alive\r\n".getBytes();
-  static final byte[] closeConnection = "Connection: Close\r\n".getBytes();
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCFailException.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCFailException.java
deleted file mode 100644
index 004a3e0..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCFailException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright 2004, 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net.xmlrpc;
-
-import org.xml.sax.SAXException;
-
-public class XMLRPCFailException extends SAXException {
-    private static final long serialVersionUID = 1L;
-    
-    private final String faultString;
-	private final int faultCode;
-	
-	public XMLRPCFailException(final String faultString, final int faultCode) {
-		super(faultString);
-		
-		this.faultString = faultString;
-		this.faultCode = faultCode;
-	}
-
-	public int getFaultCode() {
-		return faultCode;
-	}
-	
-	public String getFaultString() {
-		return faultString;
-	}
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCMessageProcessor.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCMessageProcessor.java
deleted file mode 100644
index da4f482..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/net/xmlrpc/XMLRPCMessageProcessor.java
+++ /dev/null
@@ -1,617 +0,0 @@
-/*
- * Copyright 2004, 2005 John G. Wilson
- *
- * 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 uk.co.wilson.net.xmlrpc;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.xml.sax.AttributeList;
-import org.xml.sax.SAXException;
-
-import uk.co.wilson.net.xmlrpc.XMLRPCFailException;
-import uk.co.wilson.xml.MinML;
-
-public class XMLRPCMessageProcessor extends MinML {
-  
-  private static final String startResponse = ("<methodResponse>\n" +
-                                               "\t<params>\n" +
-                                               "\t\t<param>\n");
-  private static final String endResponse = ("\n" +
-                                             "\t\t</param>\n" +
-                                             "\t</params>\n" +
-                                             "</methodResponse>");
-  private static final String startError = ("<methodResponse>\n" +
-                                            "\t<fault>\n" +
-                                            "\t\t<value>\n" +
-                                            "\t\t\t<struct>\n" +
-                                            "\t\t\t\t<member>\n" +
-                                            "\t\t\t\t\t<name>faultCode</name>\n" +
-                                            "\t\t\t\t\t<value><int>");
-  private static final String middleError = ("</int></value>\n" +
-                                             "\t\t\t\t</member>\n" +
-                                             "\t\t\t\t<member>\n" +
-                                             "\t\t\t\t\t<name>faultString</name>\n" +
-                                             "\t\t\t\t\t<value><string>");
-  private static final String endError = ("</string></value>\n" +
-                                          "\t\t\t\t</member>\n" +
-                                          "\t\t\t</struct>\n" +
-                                          "\t\t</value>\n" +
-                                          "\t</fault>\n" +
-                                          "</methodResponse>\n");
-	private static final byte[] translateTable = (
-			//
-			"\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
-			//                    \t    \n                \r
-			+ "\u0042\u0042\u0041\u0041\u0042\u0042\u0041\u0042"
-			//
-			+ "\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
-			//
-			+ "\u0042\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
-			//        sp    !     "     #     $     %     &     '
-			+ "\u0041\u0042\u0042\u0042\u0042\u0042\u0042\u0042"
-			//         (    )     *     +     ,     -     .     /
-			+ "\u0042\u0042\u0042\u003E\u0042\u0042\u0042\u003F"
-			//         0    1     2     3     4     5     6     7
-			+ "\u0034\u0035\u0036\u0037\u0038\u0039\u003A\u003B"
-			//         8    9     :     ;     <     =     >     ?
-			+ "\u003C\u003D\u0042\u0042\u0042\u0040\u0042\u0042"
-			//         @    A     B     C     D     E     F     G
-			+ "\u0042\u0000\u0001\u0002\u0003\u0004\u0005\u0006"
-			//         H    I   J K   L     M   N   O
-			+ "\u0007\u0008\t\n\u000B\u000C\r\u000E"
-			//         P    Q     R     S     T     U     V    W
-			+ "\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016"
-			//         X    Y     Z     [     \     ]     ^    _
-			+ "\u0017\u0018\u0019\u0042\u0042\u0042\u0042\u0042"
-			//         '    a     b     c     d     e     f     g
-			+ "\u0042\u001A\u001B\u001C\u001D\u001E\u001F\u0020"
-			//        h   i   j     k     l     m     n     o    p
-			+ "\u0021\"\u0023\u0024\u0025\u0026\u0027\u0028"
-			//        p     q     r     s     t     u     v     w
-			+ "\u0029\u002A\u002B\u002C\u002D\u002E\u002F\u0030"
-			//        x     y     z
-			+ "\u0031\u0032\u0033").getBytes();
-	
-	protected interface Emitter {
-		void emit(StringBuffer buffer, Object value) throws XMLRPCFailException;
-	}
-	
-	protected final static Map elements = new HashMap();
-	static {
-		final char[] tTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();
-		
-		elements.put(Integer.class,
-				new Emitter() {
-					public void emit(final StringBuffer buffer, final Object integer) {
-						buffer.append("<value><i4>").append(integer).append("</i4></value>");
-					}
-				});
-		elements.put(Character.class, 
-        new Emitter() {
-          public void emit(final StringBuffer buffer, final Object character) {
-            buffer.append("<value><i4>").append((int)((Character)character).charValue()).append("</i4></value>");
-          }
-        });
-		elements.put(Byte.class, elements.get(Integer.class));
-    elements.put(Short.class, elements.get(Integer.class));
-    elements.put(Long.class, elements.get(Integer.class));
-    elements.put(BigInteger.class, elements.get(Integer.class));
-		
-		elements.put(Double.class,
-				new Emitter() {
-					public void emit(final StringBuffer buffer, final Object number) {
-						buffer.append("<value><double>").append(number).append("</double></value>");
-					}
-				});
-		elements.put(Float.class, elements.get(Double.class));
-		elements.put(BigDecimal.class, elements.get(Double.class));
-		
-		elements.put(String.class,
-				new Emitter() {
-					public void emit(final StringBuffer buffer, final Object string) throws XMLRPCFailException {
-						encodeString(buffer.append("<value><string>"), string.toString()).append("</string></value>");
-					}
-				});
-		
-		elements.put(Boolean.class,
-				new Emitter() {
-					public void emit(final StringBuffer buffer, final Object bool) {
-						buffer.append("<value><boolean>").append((((Boolean)bool).booleanValue()) ? "1" : "0").append("</boolean></value>");
-					}
-				});
-		
-		elements.put(byte[].class,
-				new Emitter() {
-					public void emit(final StringBuffer buffer, final Object bytes) {
-						int charCount = 0;
-						final byte[] data = (byte[])bytes;
-						final int numChars = ((data.length + 2) / 3) * 4;
-						final int dLimit = (data.length / 3) * 3;
-						
-						buffer.ensureCapacity(numChars + 128 + (data.length / 54));
-						buffer.append("<value><base64>\n");
-
-						for (int dIndex = 0; dIndex != dLimit; dIndex += 3) {
-							int d = ((data[dIndex] & 0XFF) << 16) |  ((data[dIndex + 1] & 0XFF) << 8) | (data[dIndex + 2] & 0XFF);
-
-							buffer.append(tTable[d >> 18]);
-							buffer.append(tTable[(d >> 12) & 0X3F]);
-							buffer.append(tTable[(d >> 6) & 0X3F]);
-							buffer.append(tTable[d & 0X3F]);
-
-							if (++charCount == 18) {
-								buffer.append('\n');
-								charCount = 0;
-							}
-						}
-
-						if (dLimit != data.length) {
-							int d = (data[dLimit] & 0XFF) << 16;
-
-							if (dLimit + 1 != data.length) {
-								d |= (data[dLimit + 1] & 0XFF) << 8;
-							}
-
-							buffer.append(tTable[d >> 18]);
-							buffer.append(tTable[(d >> 12) & 0X3F]);
-							buffer.append((dLimit + 1 < data.length) ? tTable[(d >> 6) & 0X3F] : '=');
-							buffer.append('=');
-						}
-						
-						buffer.append("\n</base64></value>");
-					}
-				});
-		
-		elements.put(Date.class,
-				new Emitter() {
-					private final DateFormat dateTime = new SimpleDateFormat ("yyyyMMdd'T'HH:mm:ss");
-					
-					public synchronized void emit(final StringBuffer buffer, final Object date) {
-						buffer.append("<value><dateTime.iso8601>").append(this.dateTime.format((Date)date)).append("</dateTime.iso8601></value>");
-					}
-				});
-	}
-  
-  public static StringBuffer emitCall(final StringBuffer buffer, final String methodName, final Object[] params, final int numberOfparams) throws XMLRPCFailException {
-    encodeString(buffer.append("<methodCall>\n\t<methodName>"), methodName).append("</methodName>\n\t<params>\n");
-
-    for (int i = 0; i != numberOfparams; i++) {
-      emit(buffer.append("\t\t<param>"), params[i]).append("</param>\n");
-    }
-
-    return buffer.append("\t</params>\n</methodCall>\n");
-  }
-  
-  public static StringBuffer emitResult(final StringBuffer buffer, final Object result) throws XMLRPCFailException {
-    buffer.append(startResponse);
-    emit(buffer, result);
-    buffer.append(endResponse);
-    
-    return buffer;
-  }
-  
-  public static StringBuffer emitError(final StringBuffer buffer, final int codeValue, final String message) throws XMLRPCFailException {
-    buffer.append(startError);
-    emit(buffer, String.valueOf(codeValue));
-    buffer.append(middleError);
-    emit(buffer, message);
-    buffer.append(endError);
-    
-    return buffer;
-  }
-  
-	private static StringBuffer emit(final StringBuffer buffer, final Object param) throws XMLRPCFailException {
-		if (param == null) {
-			throw new XMLRPCFailException("an XML-RPC data value cannot be null", 0);
-		}
-		
-		final Emitter emitter = (Emitter)elements.get(param.getClass());
-		
-		if (emitter == null) {
-			if (param instanceof List) {
-				final Iterator iterator = ((List)param).iterator();
-				
-				buffer.append("<value><array><data>");
-				
-				while (iterator.hasNext()) {
-					emit(buffer, iterator.next());
-				}
-				
-				buffer.append("</data></array></value>");
-				
-      } else if (param instanceof Object[]) {
-        final Object[] array = (Object[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, array[i]);
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof int[]) {
-        final int[] array = (int[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Integer(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof long[]) {
-        final long[] array = (long[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Long(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof short[]) {
-        final short[] array = (short[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Short(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof char[]) {
-        final char[] array = (char[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Character(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof float[]) {
-        final float[] array = (float[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Float(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof double[]) {
-        final double[] array = (double[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Double(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof boolean[]) {
-        final boolean[] array = (boolean[])param;
-        
-          buffer.append("<value><array><data>");
-        
-          for (int i = 0; i < array.length; i++) {
-            emit(buffer, new Boolean(array[i]));
-          }
-          
-          buffer.append("</data></array></value>");
-          
-      } else if (param instanceof Map) {
-				final Iterator iterator =((Map)param).entrySet().iterator();
-				
-				buffer.append("<value><struct>");
-				
-				while (iterator.hasNext()) {
-				final Map.Entry entry = (Map.Entry)iterator.next();
-				final Object name = entry.getKey();
-				
-					if (name == null) {
-						throw new XMLRPCFailException("the name of a struct element cannot be null", 0);
-					}
-					
-					emit(encodeString(buffer.append("<member><name>"), name.toString()).append("</name>"), entry.getValue()).append("</member>");
-				}
-				
-				buffer.append("</struct></value>");
-			} else {
-        //
-        // Work up the chain of classes to see if this is
-        //  a subclass of a class we can handle
-        //
-			  Class superClass = param.getClass();
-        
-        while (true) {
-        final Emitter superEmitter = (Emitter)elements.get(superClass);
-        
-          if (superEmitter != null) {
-            superEmitter.emit(buffer, param);
-            break;
-          } else {
-            if (superClass == Object.class) {
-              throw new XMLRPCFailException(param.getClass() + " is not a supported XML-RPC data type", 0);
-            } else  {
-              superClass = superClass.getSuperclass();
-            }
-          }
-        }
-			}
-		} else {
-			emitter.emit(buffer, param);
-		}
-		
-		return buffer;
-	}
-	
-	public static StringBuffer encodeString(final StringBuffer buffer, final String string) throws XMLRPCFailException {
-		for (int i = 0; i != string.length(); i++) {
-			final char c = string.charAt(i);
-			
-			if (c >= 0X20 || c == 0X09 || c == 0X0A || c == 0X0D) {
-				if (c == '>') {
-					buffer.append("&gt;");
-				} else if (c == '<') {
-					buffer.append("&lt;");
-				} else if (c == '&') {
-					buffer.append("&amp;");
-				} else if (c > 0xff) {
-					if (c > 0XD800 && !(c >= 0XE000 && c < 0XFFFE)) 
-						throw new XMLRPCFailException("Can't include character with value 0x"
-											   		 + Integer.toHexString(c)
-													 + " in a well formed XML document",
-													 0);
-					
-
-					buffer.append("&#x").append(Integer.toHexString(c)).append(';');
-				} else {
-					buffer.append(c);
-				}
-			} else {
-				throw new XMLRPCFailException("Can't include character with value 0x"
-						               		 + Integer.toHexString(c)
-											 + " in a well formed XML document",
-											 0);
-			}
-		}
-		
-		return buffer;
-	}
-
-	private Object params = null;
-	private Object name = null;
-	private String methodName = null;
-	private Map struct = null;
-	private List array = null;
-	private Boolean inArray = Boolean.FALSE;
-	private Stack aggregateStack = new Stack();
-	private boolean gotValue = false;
-	private final StringBuffer buffer = new StringBuffer();
-	private final DateFormat dateTime = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss");
-	private final DateFormat dateTime1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
-	private final Boolean bools[] = {Boolean.FALSE, Boolean.TRUE};
-  
-  public void parseMessage(final String message) throws IOException, XMLRPCFailException { 
-    try {
-      parse(new StringReader(message));
-    } catch (final XMLRPCFailException e) {
-      throw e;
-    } catch (final SAXException e) {
-      throw new XMLRPCFailException("XML error in response from remote system: " + e.getMessage(), 0);
-    }
-  }
-  
-  public void parseMessage(final InputStream in) throws IOException, XMLRPCFailException { 
-		try {
-			parse(new InputStreamReader(in, "ISO-8859-1"));
-		} catch (final XMLRPCFailException e) {
-			throw e;
-		} catch (final SAXException e) {
-			throw new XMLRPCFailException("XML error in response from remote system: " + e.getMessage(), 0);
-		}
-	}
-	
-	public List getParams() {
-		return (List)this.params;
-	}
-	
-	public String getMethodname() {
-		return this.methodName;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.xml.sax.DocumentHandler#startElement(java.lang.String, org.xml.sax.AttributeList)
-	 */
-	public void startElement(final String name, final AttributeList attributes) {
-		if ("value".equals(name) || "name".equals(name) || "methodName".equals(name)) {
-			this.buffer.setLength(0);
-			this.gotValue = false;
-			this.aggregateStack.push(this.inArray);
-			this.inArray = Boolean.FALSE;
-		} else if ("struct".equals(name)) {
-			this.aggregateStack.push(this.struct);
-			this.aggregateStack.push(this.name);
-			this.struct = new HashMap();
-		} else if ("array".equals(name) || "params".equals(name)) {
-			this.aggregateStack.push(this.inArray);
-			this.inArray = Boolean.TRUE;
-			this.aggregateStack.push(this.array);
-			this.array = new ArrayList();
-		}
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.xml.sax.DocumentHandler#characters(char[], int, int)
-	 */
-	public void characters(final char[] ch, final int start, final int length) {
-		this.buffer.append(ch, start, length);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.xml.sax.DocumentHandler#endElement(java.lang.String)
-	 */
-	public void endElement(final String name) throws SAXException {
-		if ("value".equals(name)) {
-			if (!this.gotValue) {
-				this.params = this.buffer.toString();
-				this.gotValue = true;
-			}
-			
-			this.inArray = (Boolean)this.aggregateStack.pop();
-			
-			if (this.inArray.booleanValue())
-				this.array.add(this.params);
-		} else if ("string".equals(name)) {
-			this.params = this.buffer.toString();
-			this.gotValue = true;
-		} else if ("i4".equals(name) || "int".equals(name)) {
-			this.params = new Integer(this.buffer.toString());
-			this.gotValue = true;
-		} else if ("boolean".equals(name)) {
-			try {
-				this.params = this.bools[Integer.parseInt(this.buffer.toString())];
-			}
-			catch (final RuntimeException e) {
-				throw new XMLRPCFailException("bad Boolean value: " + this.buffer.toString(), 0);
-			}
-			
-			this.gotValue = true;
-		} else if ("dateTime.iso8601".equals(name)) {
-			try {
-				synchronized (this) {
-					this.params = this.dateTime.parse(this.buffer.toString());
-				}
-			} catch (final ParseException e) {
-				//
-				// Some implementations produce funny formats 
-				// Try an alternate format
-				//
-				try {
-					synchronized (this) {
-						this.params = this.dateTime1.parse(this.buffer.toString());
-					}
-				} catch (final ParseException e1) {
-					throw new XMLRPCFailException(e.getMessage(), 0);	// throw the original exception
-				}
-			}
-			this.gotValue = true;
-		} else if ("base64".equals(name)) {
-			int bytesIndex = 0;
-			int byteShift = 4;
-			int tmp = 0;
-			boolean done = false;
-			
-			for (int i = 0; i != this.buffer.length(); i++) {
-			final char c = this.buffer.charAt(i);
-			final int sixBit = (c < 123) ? translateTable[c] : 66;
-
-				if (sixBit < 64) {
-					if (done) throw new XMLRPCFailException("= character not at end of base64 value", 0);
-	
-					tmp = (tmp << 6) | sixBit;
-	
-					if (byteShift-- != 4) {
-						this.buffer.setCharAt(bytesIndex++, (char)((tmp >> (byteShift * 2)) & 0XFF));
-					}
-	
-				} else if (sixBit == 64) {
-	
-					byteShift--;
-					done = true;
-	
-				} else if (sixBit == 66) {
-					// RFC 2045 says that I'm allowed to take the presence of 
-					// these characters as evedence of data corruption
-					// So I will
-					throw new XMLRPCFailException("bad character in base64 value", 0);
-				}
-
-				if (byteShift == 0) byteShift = 4;
-			}
-			this.buffer.setLength(bytesIndex);
-			try {
-				this.params = this.buffer.toString().getBytes("ISO-8859-1");
-			} catch (UnsupportedEncodingException e) {
-				throw new XMLRPCFailException("Base 64 decode produced byte values > 255", 0);
-			}
-			this.gotValue = true;
-		} else if ("double".equals(name)) {
-			this.params = new java.math.BigDecimal(this.buffer.toString());
-			this.gotValue = true;
-		} else if ("name".equals(name)) {
-			this.name = this.buffer.toString();
-			this.inArray = (Boolean)this.aggregateStack.pop();
-		} else if ("member".equals(name)) {
-			this.struct.put(this.name, this.params);
-		} else if ("struct".equals(name)) {
-			this.params = this.struct;
-			this.name = (String)this.aggregateStack.pop();
-			this.struct = (Map)this.aggregateStack.pop();
-		} else if ("array".equals(name) || "params".equals(name)) {
-			this.params = this.array;
-			this.array = (List)this.aggregateStack.pop();
-			this.inArray = (Boolean)this.aggregateStack.pop();
-		} else if ("methodName".equals(name)) {
-			this.methodName = this.buffer.toString();
-			this.inArray = (Boolean)this.aggregateStack.pop();
-		} else if ("fault".equals(name)) {
-		//
-		// Some implementations return String fault codes rather than integer ones 
-		// This code tries to deal gracefully with this
-		//
-			
-		final Object faultCode = ((Map)this.params).get("faultCode");
-		final Object faultString = ((Map)this.params).get("faultString");
-		final int faultCodeValue;
-		final String faultStringValue;
-		
-			if (faultCode instanceof Integer) {
-				faultCodeValue = ((Integer)faultCode).intValue();
-				faultStringValue = faultString.toString();
-			} else {
-				faultCodeValue = 0;
-				faultStringValue = faultString.toString() + " : " + faultCode.toString();
-			}
-		
-			throw new XMLRPCFailException(faultStringValue, faultCodeValue);
-		}
-	}
-}
\ No newline at end of file
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/packet/JabberRPC.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/packet/JabberRPC.java
deleted file mode 100644
index 0919374..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/packet/JabberRPC.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 uk.co.wilson.smackx.packet;
-
-import org.jivesoftware.smack.packet.IQ;
-
-/**
- * @author John Wilson
- *
- */
-
-public class JabberRPC extends IQ {
-  public JabberRPC(final String xml) {
-    this.xml = "<query xmlns='jabber:iq:rpc'>\n" + xml + "\n</query>";
-  }
-  
-  public String getChildElementXML() {
-    return this.xml;
-  }
-  
-  private final String xml;
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/providers/JabberRPCProvider.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/providers/JabberRPCProvider.java
deleted file mode 100644
index 967ce7e..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/smackx/providers/JabberRPCProvider.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2005 John G. Wilson
- *
- * 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 uk.co.wilson.smackx.providers;
-
-import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smack.provider.IQProvider;
-import org.jivesoftware.smack.util.StringUtils;
-import org.xmlpull.v1.XmlPullParser;
-
-import uk.co.wilson.smackx.packet.JabberRPC;
-
-/**
- * @author John Wilson
- *
- */
-
-public class JabberRPCProvider implements IQProvider {
-
-  public IQ parseIQ(final XmlPullParser parser) throws Exception {
-  final StringBuffer buffer = new StringBuffer();
-
-    // skip the <query> tag by calling parser.next()
-    while (true) {
-      switch (parser.next()) {
-        case XmlPullParser.TEXT:
-          // We need to escape characters like & and <
-          buffer.append(StringUtils.escapeForXML(parser.getText()));
-          break;
-  
-        case XmlPullParser.START_TAG:
-          buffer.append('<' + parser.getName() + '>');
-          break;
-  
-        case XmlPullParser.END_TAG:
-          if ("query".equals(parser.getName())) {
-            // don't save the </query> end tag
-            return new JabberRPC(buffer.toString().trim());
-          } else {
-            buffer.append("</" + parser.getName() + '>');
-            break;
-          }
-  
-        default:
-      }
-    }
-  }
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/co/wilson/xml/MinML.java b/groovy/modules/xmlrpc/src/main/uk/co/wilson/xml/MinML.java
deleted file mode 100644
index 30104fc..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/co/wilson/xml/MinML.java
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- * Copyright 2000, 2001, 2002, 2003, 2004, 2005 John G. Wilson
- *
- * 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 uk.co.wilson.xml;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.URL;
-import java.util.Locale;
-import java.util.Stack;
-import java.util.Vector;
-
-import org.xml.sax.AttributeList;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import uk.org.xml.sax.DocumentHandler;
-import uk.org.xml.sax.Parser;
-
-public class MinML implements Parser, Locator, DocumentHandler, ErrorHandler {
-  public static final int endStartName = 0;
-  public static final int emitStartElement = 1;
-  public static final int emitEndElement = 2;
-  public static final int emitCharacters = 3;
-  public static final int saveAttributeName = 4;
-  public static final int saveAttributeValue = 5;
-  public static final int startComment = 6;
-  public static final int endComment = 7;
-  public static final int incLevel = 8;
-  public static final int decLevel = 9;
-  public static final int startCDATA = 10;
-  public static final int endCDATA = 11;
-  public static final int processCharRef = 12;
-  public static final int writeCdata = 13;
-  public static final int exitParser = 14;
-  public static final int parseError = 15;
-  public static final int discardAndChange = 16;
-  public static final int discardSaveAndChange = 17;
-  public static final int saveAndChange = 18;
-  public static final int change = 19;
-
-  public static final int inSkipping = 0;
-  public static final int inSTag = 1;
-  public static final int inPossiblyAttribute = 2;
-  public static final int inNextAttribute = 3;
-  public static final int inAttribute = 4;
-  public static final int inAttribute1 = 5;
-  public static final int inAttributeValue = 6;
-  public static final int inAttributeQuoteValue = 7;
-  public static final int inAttributeQuotesValue = 8;
-  public static final int inETag = 9;
-  public static final int inETag1 = 10;
-  public static final int inMTTag = 11;
-  public static final int inTag = 12;
-  public static final int inPI = 13;
-  public static final int inPI1 = 14;
-  public static final int inPossiblySkipping = 15;
-  public static final int inCharData = 16;
-  public static final int inCDATA = 17;
-  public static final int inCDATA1 = 18;
-  public static final int inComment =19;
-  public static final int inDTD = 20;
-
-  public MinML(final int initialBufferSize, final int bufferIncrement) {
-    this.initialBufferSize = initialBufferSize;
-    this.bufferIncrement = bufferIncrement;
-  }
-
-  public MinML() {
-    this(256, 128);
-  }
-
-  public void parse(final Reader in) throws SAXException, IOException {
-  final Vector attributeNames = new Vector();
-  final Vector attributeValues = new Vector();
-
-  final AttributeList attrs = new AttributeList() {
-    public int getLength() {
-      return attributeNames.size();
-    }
-
-    public String getName(final int i) {
-      return (String)attributeNames.elementAt(i);
-    }
-
-    public String getType(final int i) {
-      return "CDATA";
-    }
-
-    public String getValue(final int i) {
-      return (String)attributeValues.elementAt(i);
-    }
-
-    public String getType(final String name) {
-      return "CDATA";
-    }
-
-    public String getValue(final String name) {
-    final int index = attributeNames.indexOf(name);
-
-      return (index == -1) ? null : (String)attributeValues.elementAt(index);
-    }
-  };
-
-  final MinMLBuffer buffer = new MinMLBuffer(in);
-  int currentChar = 0, charCount = 0;
-  int level = 0;
-  String elementName = null;
-  String state = operands[inSkipping];
-
-    this.lineNumber = 1;
-    this.columnNumber = 0;
-
-    try {
-main: while(true) {
-        charCount++;
-
-        //
-        // this is to try and make the loop a bit faster
-        // currentChar = buffer.read(); is simpler but is a bit slower.
-        //
-        currentChar = (buffer.nextIn == buffer.lastIn) ? buffer.read() : buffer.chars[buffer.nextIn++];
-
-        final int transition;
-
-        if (currentChar > ']') {
-          transition = state.charAt(14);
-        } else {
-        final int charClass = charClasses[currentChar + 1];
-
-          if (charClass == -1) fatalError("Document contains illegal control character with value " + currentChar, this.lineNumber, this.columnNumber);
-
-          if (charClass == 12) {
-            if (currentChar == '\r') {
-              currentChar = '\n';
-              charCount = -1;
-            }
-
-            if (currentChar == '\n') {
-              if (charCount == 0) continue;  // preceeded by '\r' so ignore
-
-              if (charCount != -1) charCount = 0;
-
-              this.lineNumber++;
-              this.columnNumber = 0;
-            }
-          }
-
-          transition = state.charAt(charClass);
-       }
-
-        this.columnNumber++;
-
-        final String operand = operands[transition >>> 8];
-
-        switch (transition & 0XFF) {
-          case endStartName:
-          // end of start element name
-            elementName = buffer.getString();
-            if (currentChar != '>' && currentChar != '/') break;  // change state to operand
-            // drop through to emit start element (we have no attributes)
-
-          case emitStartElement:
-          // emit start element
-
-          final Writer newWriter = this.extDocumentHandler.startElement(elementName, attrs,
-                                                                   (this.tags.empty()) ?
-                                                                     this.extDocumentHandler.startDocument(buffer)
-                                                                   :
-                                                                     buffer.getWriter());
-
-            buffer.pushWriter(newWriter);
-            this.tags.push(elementName);
-
-            attributeValues.removeAllElements();
-            attributeNames.removeAllElements();
-
-            if (currentChar != '/') break;  // change state to operand
-
-            // <element/> drop through
-
-          case emitEndElement:
-          // emit end element
-
-            if (this.tags.empty())
-              fatalError("end tag at begining of document", this.lineNumber, this.columnNumber);
-              
-            final String begin = (String)this.tags.pop();
-            buffer.popWriter();
-            elementName = buffer.getString();
-
-            if (currentChar != '/' && !elementName.equals(begin)) {
-              fatalError("end tag </" + elementName + "> does not match begin tag <" + begin + ">",
-                         this.lineNumber, this.columnNumber);
-            } else {
-            	this.documentHandler.endElement(begin);
-
-              if (this.tags.empty()) {
-              	this.documentHandler.endDocument();
-                return;
-              }
-            }
-            break;  // change state to operand
-
-
-          case emitCharacters:
-          // emit characters
-
-            buffer.flush();
-            break;  // change state to operand
-
-          case saveAttributeName:
-          // save attribute name
-
-            attributeNames.addElement(buffer.getString());
-            break;  // change state to operand
-
-          case saveAttributeValue:
-          // save attribute value
-
-            attributeValues.addElement(buffer.getString());
-            break;  // change state to operand
-
-          case startComment:
-          // change state if we have found "<!--"
-
-            if (buffer.read() != '-') continue; // not "<!--"
-
-            break;  // change state to operand
-
-          case endComment:
-          // change state if we find "-->"
-
-            if ((currentChar = buffer.read()) == '-') {
-              // deal with the case where we might have "------->"
-              while ((currentChar = buffer.read()) == '-');
-
-              if (currentChar == '>') break;  // end of comment, change state to operand
-            }
-
-            continue;   // not end of comment, don't change state
-
-          case incLevel:
-
-            level++;
-
-            break;
-
-          case decLevel:
-
-            if (level == 0) break; // outer level <> change state
-
-            level--;
-
-            continue; // in nested <>, don't change state
-
-          case startCDATA:
-          // change state if we have found "<![CDATA["
-
-            if (buffer.read() != 'C') continue;   // don't change state
-            if (buffer.read() != 'D') continue;   // don't change state
-            if (buffer.read() != 'A') continue;   // don't change state
-            if (buffer.read() != 'T') continue;   // don't change state
-            if (buffer.read() != 'A') continue;   // don't change state
-            if (buffer.read() != '[') continue;   // don't change state
-            break;  // change state to operand
-
-          case endCDATA:
-          // change state if we find "]]>"
-
-            if ((currentChar = buffer.read()) == ']') {
-              // deal with the case where we might have "]]]]]]]>"
-              while ((currentChar = buffer.read()) == ']') buffer.write(']');
-
-              if (currentChar == '>') break;  // end of CDATA section, change state to operand
-
-              buffer.write(']');
-            }
-
-            buffer.write(']');
-            buffer.write(currentChar);
-            continue;   // not end of CDATA section, don't change state
-
-          case processCharRef:
-          // process character entity
-
-            int crefState = 0;
-
-            currentChar = buffer.read();
-
-            while (true) {
-              if ("#amp;&pos;'quot;\"gt;>lt;<".charAt(crefState) == currentChar) {
-                crefState++;
-
-                if (currentChar == ';') {
-                  buffer.write("#amp;&pos;'quot;\"gt;>lt;<".charAt(crefState));
-                  continue main;
-
-                } else if (currentChar == '#') {
-                final int radix;
-
-                  currentChar = buffer.read();
-
-                  if (currentChar == 'x') {
-                    radix = 16;
-                    currentChar = buffer.read();
-                  } else {
-                    radix = 10;
-                  }
-
-                  int charRef = Character.digit((char)currentChar, radix);
-
-                  while (true) {
-                    currentChar = buffer.read();
-
-                    final int digit = Character.digit((char)currentChar, radix);
-
-                    if (digit == -1) break;
-
-                    charRef = (char)((charRef * radix) + digit);
-                  }
-
-                  if (currentChar == ';' && charRef != -1) {
-                    buffer.write(charRef);
-                    continue main;
-                  }
-
-                  break;  // bad char reference
-                } else {
-                  currentChar = buffer.read();
-                }
-              } else {
-                crefState = ("\u0001\u000b\u0006\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff\u00ff" +
-//                               #     a     m     p     ;     &     p     o     s     ;     '
-//                               0     1     2     3     4     5     6     7     8     9     a
-                             "\u0011\u00ff\u00ff\u00ff\u00ff\u00ff\u0015\u00ff\u00ff\u00ff" +
-//                               q     u     o     t     ;     "     g     t     ;     >
-//                               b     b     d     e     f     10    11    12    13    14
-                             "\u00ff\u00ff\u00ff").charAt(crefState);
-//                               l     t     ;
-//                               15    16    17
-
-                if (crefState == 255) break;  // bad char reference
-              }
-            }
-           // drop through to report error and exit
-
-          case parseError:
-          // report fatal error
-
-            fatalError(operand, this.lineNumber, this.columnNumber);
-            // drop through to exit parser
-
-          case exitParser:
-          // exit parser
-
-            return;
-
-          case writeCdata:
-          // write character data
-          // this will also write any skipped whitespace
-
-            buffer.write(currentChar);
-            break;  // change state to operand
-
-          case discardAndChange:
-          // throw saved characters away and change state
-
-            buffer.reset();
-            break;  // change state to operand
-
-          case discardSaveAndChange:
-          // throw saved characters away, save character and change state
-
-            buffer.reset();
-            // drop through to save character and change state
-
-          case saveAndChange:
-          // save character and change state
-
-            buffer.saveChar((char)currentChar);
-            break;  // change state to operand
-
-          case change:
-          // change state to operand
-
-            break;  // change state to operand
-        }
-
-        state = operand;
-      }
-    }
-    catch (final IOException e) {
-      this.errorHandler.fatalError(new SAXParseException(e.toString(), null, null, this.lineNumber, this.columnNumber, e));
-    }
-    finally {
-      this.errorHandler = this;
-      this.documentHandler = this.extDocumentHandler = this;
-      this.tags.removeAllElements();
-    }
-  }
-
-  public void parse(final InputSource source) throws SAXException, IOException {
-    if (source.getCharacterStream() != null)
-      parse(source.getCharacterStream());
-    else if (source.getByteStream() != null)
-      parse(new InputStreamReader(source.getByteStream()));
-    else
-     parse(new InputStreamReader(new URL(source.getSystemId()).openStream()));
-  }
-
-  public void parse(final String systemId) throws SAXException, IOException {
-    parse(new InputSource(systemId));
-  }
-
-  public void setLocale(final Locale locale) throws SAXException {
-    throw new SAXException("Not supported");
-  }
-
-  public void setEntityResolver(final EntityResolver resolver) {
-    // not supported
-  }
-
-  public void setDTDHandler(final DTDHandler handler) {
-    // not supported
-  }
-
-  public void setDocumentHandler(final org.xml.sax.DocumentHandler handler) {
-   this.documentHandler = (handler == null) ? this : handler;
-   this.extDocumentHandler = this;
-  }
-
-  public void setDocumentHandler(final DocumentHandler handler) {
-   this.documentHandler = this.extDocumentHandler = (handler == null) ? this : handler;
-   this.documentHandler.setDocumentLocator(this);
-  }
-
-  public void setErrorHandler(final ErrorHandler handler) {
-   this.errorHandler = (handler == null) ? this : handler;
-  }
-
-  public void setDocumentLocator(final Locator locator) {
-  }
-
-  public void startDocument() throws SAXException {
-  }
-
-  public Writer startDocument(final Writer writer) throws SAXException {
-    this.documentHandler.startDocument();
-    return writer;
-  }
-
-  public void endDocument() throws SAXException {
-  }
-
-  public void startElement(final String name, final AttributeList attributes) throws SAXException {
-  }
-
-  public Writer startElement(final String name, final AttributeList attributes, final Writer writer)
-        throws SAXException
-  {
-    this.documentHandler.startElement(name, attributes);
-    return writer;
-  }
-
-  public void endElement(final String name) throws SAXException {
-  }
-
-  public void characters(final char ch[], final int start, final int length) throws SAXException {
-  }
-
-  public void ignorableWhitespace(final char ch[], final int start, final int length) throws SAXException {
-  }
-
-  public void processingInstruction(final String target, final String data) throws SAXException {
-  }
-
-  public void warning(final SAXParseException e) throws SAXException {
-  }
-
-  public void error(final SAXParseException e) throws SAXException {
-  }
-
-  public void fatalError(final SAXParseException e) throws SAXException {
-    throw e;
-  }
-
-  public String getPublicId() {
-    return "";
-  }
-
-
-  public String getSystemId() {
-    return "";
-  }
-
-  public int getLineNumber () {
-    return this.lineNumber;
-  }
-
-  public int getColumnNumber () {
-    return this.columnNumber;
-  }
-
-  private void fatalError(final String msg, final int lineNumber, final int columnNumber) throws SAXException {
-  	final SAXParseException e = new SAXParseException(msg, null, null, lineNumber, columnNumber);
-  	
-    this.errorHandler.fatalError(e);
-    
-    throw e;
-  }
-
-  private class MinMLBuffer extends Writer {
-    public MinMLBuffer(final Reader in) {
-      this.in = in;
-    }
-
-    public void close() throws IOException {
-      flush();
-    }
-
-    public void flush() throws IOException {
-      try {
-        _flush();
-        if (this.writer != this) this.writer.flush();
-      }
-      finally {
-        this.flushed = true;
-      }
-    }
-
-    public void write(final int c) throws IOException {
-      this.written = true;
-      this.chars[this.count++] = (char)c;
-    }
-
-    public void write(final char[] cbuf, final int off, final int len) throws IOException {
-      this.written = true;
-      System.arraycopy(cbuf, off, this.chars, this.count, len);
-      this.count += len;
-    }
-
-    public void saveChar(final char c) {
-      this.written = false;
-      this.chars[this.count++] = c;
-    }
-
-    public void pushWriter(final Writer writer) {
-      MinML.this.tags.push(this.writer);
-
-      this.writer = (writer == null) ? this : writer;
-
-      this.flushed = this.written = false;
-    }
-
-    public Writer getWriter() {
-      return this.writer;
-    }
-
-    public void popWriter() throws IOException {
-      try {
-        if (!this.flushed && this.writer != this) this.writer.flush();
-      }
-      finally {
-        this.writer = (Writer)MinML.this.tags.pop();
-        this.flushed = this.written = false;
-      }
-    }
-
-    public String getString() {
-    final String result = new String(this.chars, 0, this.count);
-
-      this.count = 0;
-      return result;
-    }
-
-    public void reset() {
-      this.count = 0;
-    }
-
-    public int read() throws IOException {
-      if (this.nextIn == this.lastIn) {
-        if (this.count != 0) {
-          if (this.written) {
-            _flush();
-          } else if (this.count >= (this.chars.length - MinML.this.bufferIncrement)) {
-          final char[] newChars = new char[this.chars.length + MinML.this.bufferIncrement];
-
-            System.arraycopy(this.chars, 0, newChars, 0, this.count);
-            this.chars = newChars;
-          }
-        }
-
-        final int numRead = this.in.read(this.chars, this.count, this.chars.length - this.count);
-
-        if (numRead == -1) return -1;
-
-        this.nextIn = this.count;
-        this.lastIn = this.count + numRead;
-      }
-
-      return this.chars[this.nextIn++];
-    }
-
-    private void _flush() throws IOException {
-      if (this.count != 0) {
-        try {
-          if (this.writer == this) {
-            try {
-              MinML.this.documentHandler.characters(this.chars, 0, this.count);
-            }
-            catch (final SAXException e) {
-              throw new IOException(e.toString());
-            }
-          } else {
-            this.writer.write(this.chars, 0, this.count);
-          }
-        }
-        finally {
-          this.count = 0;
-        }
-      }
-    }
-
-    private int nextIn = 0, lastIn = 0;
-    private char[] chars = new char[MinML.this.initialBufferSize];
-    private final Reader in;
-    private int count = 0;
-    private Writer writer = this;
-    private boolean flushed = false;
-    private boolean written = false;
-  }
-
-  private DocumentHandler extDocumentHandler = this;
-  private org.xml.sax.DocumentHandler documentHandler = this;
-  private ErrorHandler errorHandler = this;
-  private final Stack tags = new Stack();
-  private int lineNumber = 1;
-  private int columnNumber = 0;
-  private final int initialBufferSize;
-  private final int bufferIncrement;
-
-  private static final byte[] charClasses = {
-  //  EOF
-      13,
-  //                                      \t  \n          \r
-      -1, -1, -1, -1, -1, -1, -1, -1, -1, 12, 12, -1, -1, 12, -1, -1,
-  //
-      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-  //  SP   !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
-      12,  8,  7, 14, 14, 14,  3,  6, 14, 14, 14, 14, 14, 11, 14,  2,
-  //   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
-      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,  0,  5,  1,  4,
-  //
-      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-  //                                               [   \   ]
-      14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,  9, 14, 10
-  };
-
-  private static final String[] operands = {
-    "\u0c13\u150f\u150f\u150f\u150f\u150f\u150f\u150f\u150f\u150f\u150f\u150f\u0013\u000e\u150f",
-    "\u160f\u0f00\u0b00\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u0112\u0200\u170f\u0112",
-    "\u160f\u0f01\u0b01\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u0213\u170f\u0412",
-    "\u160f\u0f01\u0b01\u160f\u180f\u180f\u180f\u180f\u180f\u180f\u180f\u180f\u0313\u170f\u0412",
-    "\u180f\u180f\u180f\u180f\u180f\u0604\u180f\u180f\u180f\u180f\u180f\u0412\u0513\u170f\u0412",
-    "\u180f\u180f\u180f\u180f\u180f\u0604\u180f\u180f\u180f\u180f\u180f\u180f\u0513\u170f\u180f",
-    "\u190f\u190f\u190f\u190f\u190f\u190f\u0713\u0813\u190f\u190f\u190f\u190f\u0613\u170f\u190f",
-    "\u0712\u0712\u0712\u1a0c\u0712\u0712\u0305\u0712\u0712\u0712\u0712\u0712\u0712\u170f\u0712",
-    "\u0812\u0812\u0812\u1a0c\u0812\u0812\u0812\u0305\u0812\u0812\u0812\u0812\u0812\u170f\u0812",
-    "\u160f\u0002\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u0912\u0913\u170f\u0912",
-    "\u1b0f\u1b0f\u0903\u1b0f\u1b0f\u1b0f\u1b0f\u1b0f\u1113\u1b0f\u1b0f\u1b0f\u1b0f\u170f\u1b0f",
-    "\u160f\u0013\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u160f\u170f\u160f",
-    "\u160f\u1c0f\u0913\u160f\u0d13\u160f\u160f\u160f\u1113\u160f\u160f\u160f\u160f\u170f\u0111",
-    "\u0d13\u0d13\u0d13\u0d13\u0e13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u170f\u0d13",
-    "\u0d13\u0013\u0d13\u0d13\u0e13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u0d13\u170f\u0d13",
-    "\u0c10\u100d\u100d\u1a0c\u100d\u100d\u100d\u100d\u100d\u100d\u100d\u100d\u0f12\u170f\u100d",
-    "\u0a13\u100d\u100d\u1a0c\u100d\u100d\u100d\u100d\u100d\u100d\u100d\u100d\u100d\u170f\u100d",
-    "\u1d0f\u1d0f\u1d0f\u1d0f\u1d0f\u1d0f\u1d0f\u1d0f\u1d0f\u120a\u1d0f\u1306\u1d0f\u170f\u1413",
-    "\u120d\u120d\u120d\u120d\u120d\u120d\u120d\u120d\u120d\u120d\u100b\u120d\u120d\u170f\u120d",
-    "\u1313\u1313\u1313\u1313\u1313\u1313\u1313\u1313\u1313\u1313\u1313\u0007\u1313\u170f\u1313",
-    "\u1408\u0009\u1413\u1413\u1413\u1413\u1413\u1413\u1413\u1413\u1413\u1413\u1413\u170f\u1413",
-    "expected Element",
-    "unexpected character in tag",
-    "unexpected end of file found",
-    "attribute name not followed by '='",
-    "invalid attribute value",
-    "invalid Character Entity",
-    "expecting end tag",
-    "empty tag",
-    "unexpected character after <!"
-  };
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/DocumentHandler.java b/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/DocumentHandler.java
deleted file mode 100644
index 003f5fe..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/DocumentHandler.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2000 John G. Wilson
- *
- * 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 uk.org.xml.sax;
-
-import java.io.Writer;
-
-import org.xml.sax.AttributeList;
-import org.xml.sax.SAXException;
-
-public interface DocumentHandler extends org.xml.sax.DocumentHandler {
-  Writer startDocument(final Writer writer) throws SAXException;
-  Writer startElement(final String name, final AttributeList attributes, final Writer writer)
-        throws SAXException;
-}
diff --git a/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/Parser.java b/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/Parser.java
deleted file mode 100644
index d53b4e8..0000000
--- a/groovy/modules/xmlrpc/src/main/uk/org/xml/sax/Parser.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2000 John G. Wilson
- *
- * 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 uk.org.xml.sax;
-
-public interface Parser extends org.xml.sax.Parser {
-  void setDocumentHandler(DocumentHandler handler);
-}
\ No newline at end of file
diff --git a/groovy/modules/xmlrpc/src/test/groovy/net/xmlrpc/GroovyXmlrpcTest.groovy b/groovy/modules/xmlrpc/src/test/groovy/net/xmlrpc/GroovyXmlrpcTest.groovy
deleted file mode 100644
index 416e07d..0000000
--- a/groovy/modules/xmlrpc/src/test/groovy/net/xmlrpc/GroovyXmlrpcTest.groovy
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright 2004 (C) John Wilson. All Rights Reserved.
- * 
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided that the
- * following conditions are met: 1. Redistributions of source code must retain
- * copyright statements and notices. Redistributions must also contain a copy
- * of this document. 2. Redistributions in binary form must reproduce 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 name "groovy" must not be used to endorse or promote products derived
- * from this Software without prior written permission of The Codehaus. For
- * written permission, please contact info@codehaus.org. 4. Products derived
- * from this Software may not be called "groovy" nor may "groovy" appear in
- * their names without prior written permission of The Codehaus. "groovy" is a
- * registered trademark of The Codehaus. 5. Due credit should be given to The
- * Codehaus - http://groovy.codehaus.org/
- * 
- * THIS SOFTWARE IS PROVIDED BY THE CODEHAUS AND CONTRIBUTORS ``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 CODEHAUS 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.
- *  
- */
-
-package groovy.net.xmlrpc
-
-import java.net.ServerSocket
-import java.math.BigInteger
-import java.math.BigDecimal
-
-import groovy.util.GroovyTestCase
-
-/**
- * Tests the use of the structured Attribute type
- * 
- * @author <a href="mailto:tug@wilson.co.uk">John Wilson/a>
-
- */
-public class GroovyXmlrpcTest extends GroovyTestCase {
-
-    public void testXmlrpcCalls() {
-    //
-    // create a new XML-RPC server
-    //
-    def server = new XMLRPCServer(2, 10, 8, 1000, 1000)
-    
-    //
-    // add methods that can be called remotely
-    //
-    
-    server.validator1.arrayOfStructsTest = {structs ->      
-                                              def count = 0
-                                            
-                                              for (struct in structs) {
-                                                count += struct['curly']
-                                              }
-                                              
-                                              return count
-                                           }
-    server.validator1.countTheEntities = {text -> foo(text) }
-    
-    server.validator1.easyStructTest = {struct -> return struct['larry'] + struct['moe'] + struct['curly'] }
-    
-    server.validator1.echoStructTest = {struct -> return struct }  
-    
-    server.validator1.manyTypesTest = {p1, p2, p3, p4, p5, p6 ->  
-                                          return [p1, p2, p3, p4, p5, p6]
-                                       }  
-    
-    server.validator1.moderateSizeArrayCheck = {array -> return array[0] + array[array.size() - 1] } 
-    
-    server.validator1.nestedStructTest = {struct ->  
-                                            def day = struct['2000']['04']['01']
-                                            return day['larry'] + day['moe'] + day['curly']
-                                         }
-    
-    server.validator1.simpleStructReturnTest = {number ->  
-                                                  return ['times10' : number * 10, 'times100' : number * 100, 'times1000' : number * 1000]
-                                               }
-                                   
-    server.echo = {return it}
-    
-    //
-    // switch the server on
-    //
-    def serverSocket = new ServerSocket(0)
-    server.startServer(serverSocket)
-
-    try {
-    
-      //
-      // create a proxy of the server to handle calls
-      //
-      def serverProxy = new XMLRPCServerProxy("http://127.0.0.1:${serverSocket.getLocalPort()}")
-      
-      serverProxy.validator1.arrayOfStructsTest([['curly': 9], ['curly' : 3]]) {result ->
-        assertEquals("validator1.arrayOfStructsTest", result, 12)
-      }
-      
-      serverProxy.validator1.countTheEntities('<.\'"  l&oi ><><><>"""') {result ->
-        assertEquals("serverProxy.validator1.countTheEntities", result['ctLeftAngleBrackets'], 4)
-        assertEquals("serverProxy.validator1.countTheEntities", result['ctRightAngleBrackets'], 4)
-        assertEquals("serverProxy.validator1.countTheEntities", result['ctApostrophes'], 1)
-        assertEquals("serverProxy.validator1.countTheEntities", result['ctAmpersands'], 1)
-        assertEquals("serverProxy.validator1.countTheEntities", result['ctQuotes'], 4)
-      }
-      
-      
-      serverProxy.validator1.manyTypesTest('a', 1.25, 'c', true, 2, 3) {result ->
-        assertEquals("serverProxy.validator1.manyTypesTest", result[0], 'a')
-        assertEquals("serverProxy.validator1.manyTypesTest", result[1], 1.25)
-        assertEquals("serverProxy.validator1.manyTypesTest", result[2], 'c')
-        assertEquals("serverProxy.validator1.manyTypesTest", result[3], true)
-        assertEquals("serverProxy.validator1.manyTypesTest", result[4], 2)
-        assertEquals("serverProxy.validator1.manyTypesTest", result[5], 3)
-      }
-      
-      serverProxy.validator1.moderateSizeArrayCheck(['a', 'b', 'c']) {result ->
-        assertEquals("serverProxy.validator1.moderateSizeArrayCheck", result, 'ac')
-      }
-      
-      serverProxy.echo(["hello", "world"]) {result ->
-        assertEquals("serverProxy.echo", result[0], "hello")
-        assertEquals("serverProxy.echo", result[1], "world")
-      }
-      
-      serverProxy.echo(["hello", "world"] as String[]) {result ->
-        assertEquals("serverProxy.echo", result[0], "hello")
-        assertEquals("serverProxy.echo", result[1], "world")
-      }
-
-      serverProxy.echo(['a', 'b'] as char[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 97)
-        assertEquals("serverProxy.echo", result[1], 98)
-      }
-
-      serverProxy.echo(['a', 'b'] as Character[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 97)
-        assertEquals("serverProxy.echo", result[1], 98)
-      }
-      
-      serverProxy.echo([1, 2] as Integer[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as int[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as Long[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as long[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as Short[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as short[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as Byte[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1, 2] as byte[]) {result ->
-        //
-        // Note that this is a special case and gets transmitted as Base64 encoded
-        //
-        assertEquals("serverProxy.echo", result[0], 1 as byte)
-        assertEquals("serverProxy.echo", result[1], 2 as byte)
-      }
-      
-      serverProxy.echo([1G, 2G] as BigInteger[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1)
-        assertEquals("serverProxy.echo", result[1], 2)
-      }
-      
-      serverProxy.echo([1.0, 2.0] as Float[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1.0)
-        assertEquals("serverProxy.echo", result[1], 2.0)
-      }
-      
-      serverProxy.echo([1.0, 2.0] as float[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1.0)
-        assertEquals("serverProxy.echo", result[1], 2.0)
-      }
-      
-      serverProxy.echo([1.0, 2.0] as double[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1.0)
-        assertEquals("serverProxy.echo", result[1], 2.0)
-      }
-      
-      serverProxy.echo([1.0, 2.0] as Double[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1.0)
-        assertEquals("serverProxy.echo", result[1], 2.0)
-      }
-      
-      serverProxy.echo([1.0, 2.0] as BigDecimal[]) {result ->
-        assertEquals("serverProxy.echo", result[0], 1.0)
-        assertEquals("serverProxy.echo", result[1], 2.0)
-      }
-      
-      serverProxy.echo([true, false] as Boolean[]) {result ->
-        assertEquals("serverProxy.echo", result[0], true)
-        assertEquals("serverProxy.echo", result[1], false)
-      }
-      
-      serverProxy.echo([true, false] as boolean[]) {result ->
-        assertEquals("serverProxy.echo", result[0], true)
-        assertEquals("serverProxy.echo", result[1], false)
-      }
-    }
-    finally {
-      //
-      // switch the server off
-      //
-      server.stopServer()
-    }
-  }
-  
-  def foo(text) {
-    def ctLeftAngleBrackets = 0
-    def ctRightAngleBrackets = 0
-    def ctAmpersands = 0
-    def ctApostrophes = 0
-    def ctQuotes = 0
-     
-    for (c in text) {
-      switch (c) {
-        case '<' :
-          ctLeftAngleBrackets++
-          break;
-          
-        case '>' :
-          ctRightAngleBrackets++
-          break;
-          
-        case '&' :
-          ctAmpersands++
-          break;
-          
-        case '\'' :
-          ctApostrophes++
-          break;
-          
-        case '"' :
-          ctQuotes++
-          break;
-      }
-    }
-    
-    return ['ctLeftAngleBrackets' : ctLeftAngleBrackets,
-            'ctRightAngleBrackets' : ctRightAngleBrackets,
-            'ctAmpersands' : ctAmpersands,
-            'ctApostrophes' : ctApostrophes,
-            'ctQuotes' : ctQuotes]
-
-  }                         
-}
diff --git a/groovy/modules/xmlrpc/xdocs/index.wiki b/groovy/modules/xmlrpc/xdocs/index.wiki
deleted file mode 100644
index 8b13789..0000000
--- a/groovy/modules/xmlrpc/xdocs/index.wiki
+++ /dev/null
@@ -1 +0,0 @@
-